JavaWeb[1] -- Servlet

Servlet 简介

  • Java Servlet 运行在Servlet容器中,Servlet容器负责Servlet和客户端的通信以及调用Servlet方法,servlet和客户端的通信采用“请求/响应”的模式。
  • Servlet功能:
    • 创建并返回基于客户请求的动态html页面
    • 创建可嵌入到现有html页面中的部分html页面
    • 与其他服务器资源进行通信

Servlet 容器响应客户请求的过程

Servlet响应客户请求过程

  • Servlet引擎检查是否已经装载并创建了该Servlet的实例对象
  • 装载并创建该Servlet的一个实例对象:调用该Servlet的构造器
  • 调用Servlet实例对象的init()方法
  • 创建一个用于封装请求的ServletRequest对象和一个代表响应消息的ServletResponse对象,然后调用ServletService()方法并将请求和响应对象作为参数传递进去
  • WEB应用程序被停止或者重新启动之前,Servlet引擎将卸载Servlet,并在卸载前调用Servletdestroy()方法

Servlet 的配置和映射

<servlet>
  <!--Servelt 注册的名字-->
  <servelt-name>helloServlet</servelt-name>
  <!--Servlet 全类名 -->
  <servlet-class>io.github.gongfukangEE.helloServlet</servlet-class>
  <!-- 指定 Servlet 被创建的时机 -->
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <!-- 需要和某一个 servlet 节点的 servlet-name 子节点的文本节点一致 -->
  <servlet-name>helloServlet</servlet-name>
  <!-- 映射具体的访问路径:/ 代表当前WEB的根目录 -->
  <url-pattern>/hello</url-pattern>
</servlet-mapping>

Servlet 生命周期的方法

  • 构造器:只有第一次请求Servlet时,创建Servlet的实例,调用构造器,说明Servlet是单实例的!
  • init 方法:只被调用一次,在创建好实例后立即被调用,用于初始化当前Servlet
  • service方法:被多次调用,每次请求都会调用Service方法,实际用于请求响应
  • destroy方法:只被调用一次,当前Servlet所在的WEB应用被卸载前调用,用于释放当前Servelt所占用的资源

ServletConfig : 封装了Servlet的配置信息,并且可以获取ServletContext对象

<!-- 配置 Servlet 的初始化参数 -->
<init-param>
  <!-- 参数名 -->
  <param-name>user</param-name>
  <!-- 参数值 -->
  <param-value>root</param-value>
</init-param>
  • 获取初始化参数
    • getInitParameter(String name):获取指定参数名的初始化参数
    • getInitParameterNames():获取参数名组成的Enumeration对象

ServletContext 接口:

可以由ServletConfig获取

ServletContext servletContext = servletConfig.getServletContext();
  • Servlet引擎为每个WEB应用程序都创建一个对应的ServletContext对象,ServletContext对象被包含在ServletConfig对象中,调用ServeltConfig.getServletContext方法可以返回ServletContext对象的引用。

    <!-- 配置当前应用的初始化参数 -->
    <context-param>
    <param-name>driver</param-name>
    <param-value>com.mysql.jdbc.Driver</param-value>
    </context-param>
  • 获取初始化参数:

    • getInitParameter
    • getInitParameterNames
  • 获取当前WEB应用的某一个文件的绝对路径

Servlet 与 HTTP

  • Servletservice()方法用于应答请求:因为每次请求都会调用servic()方法

    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
          System.out.println("请求来了!");
      }
    • ServletRequset:封装了请求信息,可以从中获取到任何请求信息
    • ServletResponse:封装了响应信息,如果想给用户什么响应,均可以使用该接口的方法实现
  • ServletRequest

    • 获取请求参数

    String getParameter(String name):根据请求参数的名字,返回参数值(单选)

    String[] getParameterValues(String name):根据请求参数的名字,返回请求参数的字符串数组(多选)

    Enumeration getParameterNames():返回参数名对应的Enumeration对象

    Map getParameterMap():返回请求参数的键值对

    • 获取请求的URI
     HttpServletRequest httpServletRequest=(HttpServletRequest) servletRequest;
     String requestURI=httpServletRequest.getRequestURI();
     System.out.println(requestURI);
    • 获取请求的Servelt映射路径
     String servletPath =httpServletRequest.getServletPath();
     System.out.println(servletPath);
  • ServletResponse

    • getWriter():返回PriterWriter对象,调用该对象的print()方法,把peiter()中的参数直接打印在浏览器上
    • servletResponse.setContentType("application/msword") 设置响应的内容类型,具体类型可在Tomcat/conf/web.xml文件中查找
  • GenericServlet

    是一个Servlet,是Servlet接口和ServletConfig接口的实现类,但是一个抽象类,其中的Service方法为抽象方法,它可以使开发更加简洁

    public abstract class GenericServlet implements Servlet,ServletConfig{}

HttpServlet

  • 继承自GenericServlet,针对于HTTP协议所定制
  • Service()方法中直接把ServletRequestServletResponse转为HttpServletRequestHttpServletResponse,并调用了重载的Service(HttpServletRequest,HttpServletResponse),在Service()方法中获取了请求方式:request.getMethod(),根据请求方式创建了doGet()doPost()方法等
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值