100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > JavaWeb——Servlet生命周期

JavaWeb——Servlet生命周期

时间:2020-04-29 09:37:06

相关推荐

JavaWeb——Servlet生命周期

Servlet生命周期

构造方法init方法service方法destory方法注意 Servlet的创建和销毁是由Servlet容器负责的(Tomcat)

jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><a href="./DataServlet">跳转</a></body></html>

DataServlet

public class DataServlet extends HttpServlet {private static final long serialVersionUID = 1L;public DataServlet() {System.out.println("DataServlet构造方法");}@Overridepublic void init() throws ServletException {System.out.println("initMethod");}@Overrideprotected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {System.out.println("serviceMethod");super.service(arg0, arg1);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("doGetMethod");response.sendRedirect("./data.jsp");}@Overridepublic void destroy() {System.out.println("destroyMethod");}}

data.jsp

<%@page import="com.zzu.ov.Student"%><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@taglib uri="/jsp/jstl/core" prefix="c"%><!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><p>跳转过来了!!!</p></body></html>

点击之后跳转

访问三次主页然后点击跳转

构造方法

只执行一次,默认第一次访问Servlet的时候执行,再次访问的时候不会执行,只创建了一个Servlet对象。

init方法

只执行一次,默认第一次访问Servlet的时候执行,再次访问的时候不会执行,在执行构造方法之后执行。

service方法

每次访问就执行一次,对请求方法进行判断,对于不同的请求方法执行对应的方法。

HttpServlet中service方法源码

protected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {String method = req.getMethod();if (method.equals(METHOD_GET)) {long lastModified = getLastModified(req);if (lastModified == -1) {doGet(req, resp);} else {long ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);if (ifModifiedSince < lastModified) {maybeSetLastModified(resp, lastModified);doGet(req, resp);} else {resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);}}} else if (method.equals(METHOD_HEAD)) {long lastModified = getLastModified(req);maybeSetLastModified(resp, lastModified);doHead(req, resp);} else if (method.equals(METHOD_POST)) {doPost(req, resp);} else if (method.equals(METHOD_PUT)) {doPut(req, resp); } else if (method.equals(METHOD_DELETE)) {doDelete(req, resp);} else if (method.equals(METHOD_OPTIONS)) {doOptions(req,resp);} else if (method.equals(METHOD_TRACE)) {doTrace(req,resp); } else {String errMsg = lStrings.getString("http.method_not_implemented");Object[] errArgs = new Object[1];errArgs[0] = method;errMsg = MessageFormat.format(errMsg, errArgs); resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg);}}

destory方法

只执行一次,创建Servlet对象之后如果正常关闭服务器,或者停止发布Web项目的时候执行。

把Tomcat服务器关掉(stop按钮)

注意: 如果使用Terminate按钮则不会执行destroy。 在服务器启动的时候并且已经创建了Servlet对象,将Web项目停止发布,也会执行destroy方法。操作如下

注意

当在web.xml(部署描述符)文件中,在Servlet中配置了<load-on-startup></load-on-startup>如果标签内的数字大于等于0的时候则会在服务器启动的时候加载这个Servlet。

web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="/2001/XMLSchema-instance" xmlns="/xml/ns/javaee" xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><display-name>sun</display-name><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><servlet><servlet-name>DataServlet</servlet-name><servlet-class>com.zzu.servlet.DataServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>DataServlet</servlet-name><url-pattern>/DataServlet</url-pattern></servlet-mapping></web-app>

再次启动服务器

Servlet对象在服务器启动的时候创建了,并执行了init方法

点击之后访问DataServlet并转发到data.jsp

执行了service方法和doGet方法(因为是通过get请求访问的Servlet)

再点击一次

再次执行service方法和doGet方法,不再执行DataServlet构造方法和init方法

正常关闭Tomcat服务器

Servlet生命周期各方法执行顺序

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。