servlet 笔记

 servlet 介绍:

  • javaWeb的核心技术!(servlet,filter,listenner)+(PageContext,ServletContext,ServletRequest,HttpSession)
  • 服务端运行的java类,service()方法:处理请求,完成响应。
  • Servlet3.0之前的版本要使用Servlet,需要在web.xml中进行配置。在web.xml中配置Servlet时可以配置一些初始化参数,在servlet中可以通过ServletConfig接口提供的方法来获取 这些参数。
  • 在Servlet3.0及3.0之后的版本,该版本新增了若干注解。

servlet生命周期:

   实例化(构造函数) ----> 初始化init() ---->  服务service() ---->  销毁destroy()

  1.  创建,init阶段: 第一次访问该servlet类时,创建并初始化。默认注意并不是tomcat容器启动阶段!(但配置start on load参数>=0时,容器启动时加载 )
  2.  service阶段:每访问一次,执行一次。
  3.  destroy阶段:应用结束。

    整个生命周期,init和destroy只执行一次,主要任务在service函数。实现servlet的类要重写service逻辑,如HttpServlet类。

自定义servlet类

  开发过程,根据业务逻辑创建的自定义servlet,实现servlet接口。

  常用的抽象类:javax.servlet.GenericServlet  和  javax.servlet.http.HttpServlet

  1. GenericServlet  抽象类,与协议无关,适配器模式:已实现servlet接口的全部方法。
      继承此类的自定义servlet不必实现servlet接口的全部方法,用哪个重写哪个--适配器模式。
  2. HttpServlet (继承GenericServlet)  抽象类,http实现类,模板方法设计模式
      service()方法为protected,所以它的实现类 只需重写doGet(),doPost()等方法。开发中常见

servlet配置

  1. web.xml中配置
    name --> class --> urlpattern
  2. 注解配置
    @WebServlet("/hello")

servlet参数

private  ServletConfig servletConfig;

//getInitParameter() 获取某个K-V 参数
String name = servletConfig.getInitParameter("name");
String password = servletConfig.getInitParameter("password");

//getInitParameterNames() 获取全部参数
Enumeration<String> en = servletConfig.getInitParameterNames();

//上面获取的是具体某个servlet类的局部参数
//下面servletConfig.getServletContext().getInitParameter获取全局参数
//getServletContext()返回ServletContext对象!!!---comtext容器,全局唯一
 String k = servletConfig.getServletContext().getInitParameter("k");


//注解方式,先setAttribute赋值参数,getAttribute取值。K-V
ServletContext servletContext = this.getServletContext();
servletContext.setAttribute("user","Tom");
String user = (String)servletContext.getAttribute("user");

ServletContext对象

  servletContext,应用的servlet上下文容器,单实例唯一。tomcat服务器启动应用时产生,tomcat关闭时销毁context.

  servletContext对象是web应用中所有servlet的共享变量,用于servlet间的数据共享。

  • 获取servletContext对象:ServletContext context = config.getServletContext();

servletContext对象功能:JavaWeb四大域对象之一

Enumeration getAttributeNames()等 获取所有域属性的名称。  
public String getInitParamenter(String name) 等 获取全局配置信息  
public String getRealPath(String path)等 获取资源文件路径  
public <T extends Servlet> createServlet(Class<T> clazz) 创建servlet,filter, listenner等 Dynamic
addFilter(), addListenner(), addServlet() 添加web组件 Dynamic

servlet重定向和转发

  • 重定向:HttpServletResponse的sendRedirect()方法。
      例如 response.sendRedirect(“demo.jsp");  //重定向到demo.jsp,此处注意路径,忘记加项目根目录
      可重定向到任意地址,浏览器url地址变化,request参数不共享。
  • 转发:RequestDispatcher.forward(request, response)方法。
          例如 request.getRequestDispatcher (“demo.jsp"). forward(request,response);//转发到demo.jsp
       只转发到同一web应用, 浏览器url地址不变,共享request参数。

 注意:sendRedirect()方法不能转发到“/WEB-INF/”路径下的jsp页面资源,而getRequestDispatcher().forword()可以重定向到“/WEB-INF/”路径下的jsp页面资源。如 request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response); 

  web-inf 服务器的安全目录,浏览器无法直接访问。可通过servlet的forward,或者springMVC的视图解析,但都不是url直接访问的

 区别: 转发是HttpServletRequest中的方法,基于请求。重定向是HttpServletResponse中的方法,基于响应。

posted @ 2019-07-14 03:56  scmath  阅读(135)  评论(0编辑  收藏  举报