Servlet总结–补一补基础

Servlet会在服务器启动或第一次请求该Servlet的时候开始生命周期,在服务器结束的时候结束生命周期。无论请求多少次Servlet,最多只有一个Servlet实例。多个客户端并发请求Servlet时,服务器会启动多个线程分别执行该Servlet的service方法

概述

工作流程

  • Tomcat将浏览器提交的请求封装成HttpServletRequest对象,同时将输出流封装成HttpServletResponse对象
  • Tomcat把request、response作为参数,调用Servlet的相应方法,例如doGet(request, response)等
  • Servlet中主要处理业务逻辑

接口

实现javax.servlet.Servlet接口类,规定了特定的方法来处理特定的请求。开发者只需要实现Servlet的相关方法,用户访问Web程序的时候,Tomcat会调用这些方法完成业务处理

Java Web目录结构

文件夹 描述
/ Web应用根目录
/WEB-INF/ Tomcat会隐藏该文件夹下的所有文件及文件夹,保护它们不能通过浏览器直接访问
/WEB-INF/web.xml 主要的配置文件
/WEB-INF/classes/ 类文件,包括Servlet类
/WEB-INF/lib/ jar文件位置

配置

servlet

<servlet>
  <servlet-name>[唯一的名称]</servlet-name>
  <servlet-class>[包含包名的路径]</servlet-class>
  <init-param>
    <param-name>[配置名称]</param-name>
    <param-value>[配置值]</param-value>
  </init-param>
  <load-on-startup>1[0:请求时加载;1:启动时加载]</load-on-startup>
</servlet>
复制代码

访问路径配置 servlet-mapping

<servlet-mapping>
  <servlet-name>[同servlet配置中的名称对应]</servlet-name>
  <url-pattern>[访问路径]</url-pattern>
</servlet-mapping>
复制代码

上下文参数 context-param

全局共享,能够被所有的servlet读取

<context-param>
  <param-name>[配置名称]</param-name>
  <param-value>[配置值]</param-value>
</context-param>
复制代码

在Servlet类中,通过 getServletConfig.getServletContext
获取ServletContext,然后通过其方法获取相应上下文参数

Servlet生命周期

  • init
  • doGet
  • doPost
  • Destroy

Servlet注解

  • @PostContructor
    • 在构造函数执行之后,init函数执行之前被调用
  • @PreDestroy
    • 在destroy方法之后,Servlet被彻底卸载之前被调用
  • 注解会影响服务器的启动速度

    • 服务器在启动时会遍历Web应用的WEB-INF/classes下的所有class文件与WEB-INF/lib下的jar文件以检查哪些类使用了注解

线程安全

隐患原因

由于Servlet只会有一个实例,多个用户同时请求同一个Servlet时,Tomcat会派生出多条线程执行Servlet的代码,因此Servlet有线程不安全的隐患。

重定向

服务端重定向

通过RequestDispatcher对象的 forward(HttpServletRequest, HttpServletResponse)
来实现; 浏览器地址栏显示跳转前的Servlet访问地址

浏览器端重定向

  • 301 永久性重定向
  • 302 临时性重定向
    • 有可能网页端地址不变,产生网址劫持隐患
    • Page Rank相关会受影响

原文 

https://juejin.im/post/5efbc75ce51d4534a2086f3b

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Servlet总结–补一补基础

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址