day51
Servlet
servlet的配置方式
自servlet2.5后,servlet有两种配置方式
注解方式配置
在Servlet类上添加@WebServlet注解
在里面配置value属性或者urlPattern属性,来设置url
用户访问该url则自动查找当前servlet容器中唯一的servlet来进行访问
package com.saas.day51; import java.io.*; import javax.servlet.http.*; import javax.servlet.annotation.*; /** * value或者url-pattern属性可以用大括号来放置多个url,代表多个url指向同一个servlet * 当前servlet能够处理hello-servlet、hello-servlet02、hello-servlet03三个不同的请求 * 意思是这三个请求都将交给这同一个HelloSevlet来处理 */ @WebServlet(name = "helloServlet", value = {"/hello-servlet", "/hello-servlet02", "/hello-servlet03"}) public class HelloServlet extends HttpServlet { private String message; public void init() { message = "Hello World!"; } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/html"); // Hello PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("<h1>" + message + "</h1>"); out.println("</body></html>"); } public void destroy() { } }
xml方式配置
在项目的webapp目录下的WEB-INF目录的web.xml文件中配置servlet
配置servlet-mapping节点,里面分别设置urlPattern和servletname
配置servlet节点,根据servletmapping节点中得到的servlet查找servlet-class
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>xxx</servlet-name> <servlet-class>com.saas.day51.HelloServlet02</servlet-class> </servlet> <servlet> <servlet-name>yyy</servlet-name> <servlet-class>com.saas.day51.HelloServlet03</servlet-class> </servlet> <servlet-mapping> <servlet-name>xxx</servlet-name> <url-pattern>/xyz</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>yyy</servlet-name> <url-pattern>/zzz</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>yyy</servlet-name> <url-pattern>/zzz02</url-pattern> </servlet-mapping> <!-- 三个url-patternzzz, zzz02, zzz03, 都映射到yyy这个servlet --> <servlet-mapping> <servlet-name>yyy</servlet-name> <url-pattern>/zzz03</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>yyy</servlet-name> <url-pattern>/hello-servlet</url-pattern> </servlet-mapping> </web-app>servlet2.5之前,servlet只有xml方式的配置
servlet的两种配置方式中:
@WebServlet注解相对灵活,便于团队开发
在整个项目中都属于同一个web容器tomcat
整个项目中url-pattern要保证唯一
在整个tomcat容器中注解和xml也要保证url-pattern唯一
在整个项目中可以让多个不同的url-pattern指向同一个servlet
servlet的生命周期
人从出生,幼儿,儿童,青年,壮年,老年,都是“自动生长”
package com.saas.day51; import javax.servlet.http.HttpServlet; public class LifeCycleServlet extends HttpServlet { public LifeCycleServlet() { System.out.println("Constructor()"); } public void init() { System.out.println("init()"); } public void destroy() { System.out.println("destroy()"); } public void service(javax.servlet.ServletRequest req, javax.servlet.ServletResponse res) throws javax.servlet.ServletException, java.io.IOException { System.out.println("service()"); } }Servlet的生命周期是指多个生命周期方法不需要程序员手动调用,web容器tomcat会根据servlet的生命周期自动调用各个生命周期方法
整个声明周期方法是1 +3
1代表构造器,web容器启动后调用当前servlet会自动初始化该对象,在web容器中每个servlet默认都是单例的
3代表init,service和destroy方法
init代表初始化,每个servlet在web容器中只初始化一次
service服务方法,每请求一次,会自动执行一次该方法
destroy销毁方法,web容器关闭会自动执行该方法