servlet的调用流程
假设在login页面有一个form表单,表单的action="login"。则表单会提交到login路径。
在xml映射中,/login对应的servlet类是LoginServlet,tomcat定位到loginservle后,发现并没有servlet实例存在,于是就调用Loginservlet的构造函数进行实例化对象。根据login.html提交对信息时带的method="post"来调用doPost方法
运用request把对应信息提取后,设置了response对象。tomcat拿到被servlet修改过的response,根据这个response生成html字符串,然后返回给浏览器。
在dopost和doget方法执行之前会先调用service()方法来判断接下来是调用dopost还是doget,
转发response.sendRedirect(
"fail.html"
);
和
重定向request.getRequestDispatcher(
"success.html"
).forward(request, response);
的区别
其中重定向地址栏改变并且请求两次并不保留第一次的数据
而转发则地址栏改变请求一次保留第一次的数据
有时候会需要tomcat'启动的时候就要执行一些初始化代码,比如校验数据库的完整性等,但是servlet的生命周期是在用户浏览器对应的路径开始的,但是如果没有用户的第一次访问就无法执行相关代码。这时候就需要servlet实现自启动,即伴随着tomcat的启动,自动启动初始化,在初始化方法init()中就可以进行一些代码的工作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import java.io.IOException; import java.util.Date; import javax.servlet.ServletConfig; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloServlet extends HttpServlet{ public void init(ServletConfig config){ System.out.println( "init of Hello Servlet" ); } public void doGet(HttpServletRequest request, HttpServletResponse response){ try { response.getWriter().println( "<h1>Hello Servlet!</h1>" ); response.getWriter().println( new Date().toLocaleString()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |
但是其xml映射中需要设置一行<load-on-startup>10</load-on-startup>,其中的10代表优先级。数字越小则优先级越高。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?xml version= "1.0" encoding= "UTF-8" ?> <web-app> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet- class >HelloServlet</servlet- class > <load-on-startup> 10 </load-on-startup> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> <servlet> <servlet-name>LoginServlet</servlet-name> <servlet- class >LoginServlet</servlet- class > </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> </web-app> |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步