在这一步又有错,/web-app处报错: Element ‘web-app‘ cannot have character [children]... 找原因: 最终经过不断测试,发现问题所在:> demo1 cn.itcast.web.servlet.servletDemo1 demo1 /demo1
package cn.itcast.web.servlet; import javax.servlet.*; import java.io.IOException; public class servletDemo2 implements Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("init....."); } @Override public ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("service"); } @Override public String getServletInfo() { return null; } @Override public void destroy() { System.out.println("destroy"); } }servlet的生命周期分析: 1.被创建:执行init方法,只执行一次(说明一个Servlet在内存中只有一个对象,是单例的) 在日志中,init只执行一次 2.提供服务:会执行service()方法,执行多次 3.被销毁:执行destroy()方法,执行一次 以上三个周期有如下问题: 创建阶段之servlet什么情况被创建? 默认情况下,第一次被访问时,servlet被创建 可以 配置执行servlet的创建时机 步骤如下: 设置web.xml 注意: 因为Servlet是单例的,所以当多个用户访问时,可能存在线程安全问题。 解决方案:尽量不在servlet中定义成员变量,即使定义成员变量,也不要修改值 提供服务阶段之执行service方法,执行多次 每调用一次该方法都会执行一次 被销毁:destroy执行一次,且只有服务器正常关闭时才执行。 注意:destroy()方法在servlet被销毁之前执行 关于制定servlet的创建时机,可以用
三、Servlet3.0版本的注解配置demo2 cn.itcast.web.servlet.servletDemo1 5 demo2 /demo2
好处:不需要在web.xml中配置了
步骤:
1.创建JavaEE项目,选择servlet3.0以上版本
2.定义一个类实现servlet接口
3.复习方法
4.在类上使用@WebServlet注解,进行配置
创建module时,Version下面的Web.xml不要勾选即可。
查看WebServlet,选中@后面的WebServlet,不要包括@,crtl+b
需要配置虚拟路径,在@WebServlet后面写
@WebServlet(urlPatterns = "/demo")
测试:
还可以更简洁,直接写servlet的资源路径,同样可以访问
@WebServlet("/demo2")
四、GenericServlet-----抽象类GenericServlet,将Servlet接口中其他方法做了默认空实现,只有service()方法作为抽象
将来定义Servlet类时,可以继承GenericServet,实现service()方法即可。
HttpServlet-----抽象类
package cn.itcast.web.servlet; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.annotation.WebServlet; import java.io.IOException; @WebServlet("/demo2") public class servletDemo extends GenericServlet { @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("GenericServlet....."); } }
测试结果如下:
//servlet中service()方法的判断请求方式: // 判断请求方式 String method = req.getMethod(); if("GET".equals(method)){ //get方式获取数据 doGet(); }else if("POST".equals(method)){ //post方法获取数据 doPost(); }五、servlet体系结构 HttpServlet:(继承了GenerticServlet()方法) 对http协议的一种封装,简化 *** 作 1.定义类继承HttpServlet 2.复写doGet()和doPost()方法
package cn.itcast.web.servlet; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/demo2") public class servletDemo extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException{ System.out.println("doGet...."); } @Override protected void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{ System.out.println("doPost..."); } }
测试结果如下:
还可以在此编写一个login.html
Title
测试结果如下:
这里补充Servlet相关的配置:
urlpartten:Servlet访问路径
1.一个servlet可以定义多个访问路径:@WebServlet{"/xxxx","/x4","/xxxx5"}
2.路径的定义规则:
/xxx(一层路径)
/Xxx/Xxx(两层路径)
*.do
比如:@WebServlet{"/user/demo"}相当于@WebServlet{"/user/*"}
get!!!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)