一、演示servlet的生命周期
servlet的生命周期: 1.初始化调用init方法 只会执行一次 自动执行 2.执行 调用service方法,调用几次执行几次 需要手动调用 3.消亡调用destory方法 只会执行一次 自动执行 没啥用,一般是项目停止自动执行。
package com.yyzy.servlet; import com.yyzy.dao.UserDao; import javax.servlet.ServletException; 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("/AServlet") public class AServlet extends HttpServlet { UserDao ud = null; @Override public void init() throws ServletException { ud = new UserDao(); System.out.println("我被创建了,只会执行一次"); } @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("进来了"); ud.say(); } @Override public void destroy() { System.out.println("我死了"); } } |
二、演示servlet的跳转
servlet的跳转: 1.可以从servlet跳转到另外一个servlet(删除数据之后返回到刷新查询servlet) 2.可以从servlet跳转到前台页面(注册成功返回登录页面) 有两种方式: 1.通过转发跳转 2.通过重定向跳转 转发跳转: 只需1次请求即可完成 效率高 URL地址不会改变 例如从B转发到A URL地址依然是B 重定向跳转: 只需2次请求即可完成 效率低 URL地址会改变 例如从B定向到A URL地址就是A 总结:能用转发就用转发。但是以下情况不推荐:涉及到敏感操作一定不能使用转发,涉及到注册操作.涉及到增删改都推荐使用重定向 备注:超链接本质就是重定向跳转
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <a href="BServlet">通过转发跳转</a><br> <a href="CServlet">通过重定向跳转</a><br> </body> </html> |
package com.yyzy.servlet; import com.yyzy.dao.UserDao; import javax.servlet.ServletException; 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("/BServlet") public class BServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("我是Bservlet"); //转发跳转: // req.getRequestDispatcher("AServlet").forward(req,resp); req.getRequestDispatcher("index.html").forward(req,resp); } } |
package com.yyzy.servlet; import javax.servlet.ServletException; 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("/CServlet") public class CServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("我是Cservlet"); //重定向跳转: // resp.sendRedirect("xxx"); resp.sendRedirect("index.html"); } } |
三、演示Servlet的四大作用域
Servlet的四大作用域: 有些情况下:我们需要实现后台servlet的数据共享(先掌握这里) 有些情况下:我们需要实现后台servlet和前台页面的数据共享(暂时不讲解) 比如:后台查询到了数据 需要丢给前台去渲染 四大作用域:pageContext < request < session < application pageContext作用域:仅在当前页面有效,只要页面发生了跳转就失效。 所以不用 request作用域:重点掌握:作用域一次请求有效。超过一次请求就失效,所以切忌使用重定向跳珠 session作用域:重点掌握:作用域一次回话有效。(浏览器打开到关闭为一次回话) application作用域:了解即可:作用域全局有效。只想项目不关,就一直生效,例如网站访问量
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <a href="FServlet">测试request作用域</a> <hr> <a href="GServlet">测试session作用域</a> <hr> <a href="HServlet">测试application作用域</a> <hr> </body> </html> |
测试request作用域:
package com.yyzy.servlet; import javax.servlet.ServletException; 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("/FServlet") public class FServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // request作用域:重点掌握:作用域一次请求有效。超过一次请求就失效 //如何存储数据 注意key要保证唯一,否则会被覆盖 // req.setAttribute("key","aa"); req.setAttribute("username","张三"); req.getRequestDispatcher("ZServlet").forward(req,resp); // resp.sendRedirect("ZServlet"); } } |
测试session作用域:
package com.yyzy.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; @WebServlet("/GServlet") public class GServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // session作用域:重点掌握:作用域一次会话有效。浏览器关闭就失效 //如何存储数据 注意key要保证唯一,否则会被覆盖 //1.获取session对象 HttpSession session = req.getSession(); //2.存值 session.setAttribute("username","李四"); //简写req.getSession().setAttribute("aa,","xx"); req.getRequestDispatcher("ZServlet").forward(req,resp); // resp.sendRedirect("ZServlet"); } } |
测试application作用域:
package com.yyzy.servlet; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; @WebServlet("/HServlet") public class HServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // application作用域:了解即可:作用域全局有效。只想项目不关,就一直生效,例如网站访问量 //如何存储数据 注意key要保证唯一,否则会被覆盖 //1.获取application对象 ServletContext context = req.getServletContext(); //2.存值 context.setAttribute("username","王五"); req.getRequestDispatcher("ZServlet").forward(req,resp); // resp.sendRedirect("ZServlet"); } } |
测试四大作用域的数据:
package com.yyzy.servlet; import javax.servlet.ServletException; 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("/ZServlet") public class ZServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //测试四大作用域的数据 // String username =(String) req.getAttribute("username"); // System.out.println(username); // Object o = req.getSession().getAttribute("username"); // System.out.println(o); Object o = req.getServletContext().getAttribute("username"); System.out.println(o); } } |