Servlet复习

Servlet复习

1.Servlet执行原理

  • 1.tomcat接受客户端的请求,去web.xml解析URL路径,访问Servlet的资源路径

  • 2.根据资源路径,和servlet-name,找到servlet-class

  • 3.tomcat将全类名对应字节码加载进内存 Class.forName()

  • 4.创建对象 newInstance()

  • 5.调用方法 service()

2.Servlet的生命周期方法

  • 1.init——执行init方法,只执行一次

    init方法与<load-on-startup>1</load-on-startup>有关
    默认load-on-startup是负数(默认是负数),那么第一次访问时进行加载。
    如果是设置了正数,按照级别进行加载,越小优先级越高
    
  • 2.service——每次访问的时候

  • 3.destroy——被销毁时(服务器关闭的时候)

3.线程安全问题

Servlet只有一个对象。在多线程下,可能会有线程安全问题。

不能加锁,如果加锁,性能影响太大了。

所以,尽量不要在servlet中定义成员变量,即可避免线程安全问题。

4.Servlet 配置

Web-xml配置:

    <servlet>
        <servlet-name>servlet-demo</servlet-name>
        <servlet-class>cn.steveyu.web.sevlet.ServletDemo</servlet-class>

        <load-on-startup>3</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet-demo</servlet-name>
        <url-pattern>/demo</url-pattern>
    </servlet-mapping>

JavaEE 6开始,有Servlet 3.0

@WebServlet(urlPatterns = "/demo10")
或者
@WebServlet("/demo10") 

5.常见错误

  • 404 页面找不到
  • 405 请求方式不一致
  • 500 服务器内部错误

6.servlet编码

1.get请求

new String (name.getBytes("iso-8859-1"),"utf-8")
server.xml 中添加 URIEncoding = "utf-8"

2.post请求

request.setCharacterEncoding("utf-8")

7.转发和重定向

转发

request.getRequestDispatcher("page").forward(req, resp)
  • 客户端只发送一次请求
  • 浏览器地址栏没有变化
  • 请求过程中只有一个req和resp
  • 几个servlet共享一个req,resp
  • 对客户端透明,客户端不需要知道用户做了什么操作

重定向

基于刷新会重复请求

response.sendRedirect("page")
  • 浏览器发送2次请求
  • 地址栏变化
  • 不共享数据
  • 跳转任意url

8.servlet三大作用域

request

  • request代表一个请求,每个请求会有一个request
  • request共享数据可以使用setAttribute进行传递(同一个请求不同参数

session

  • 打开浏览器到结束浏览器算一次session

Application

  • 所有用户都可以取到该信息,服务只会创建一个ServletContext对象

9.ServletContext、ServletConfig

  • 不同用户数据共享、使用ServletContext处理。一个web项目只有一个ServletContext。可以实现网站计数器
this.getServletContext()
- context.getAttribute
- context.setAttribute
<context-param>
  <param-name>hhh</param-name>
  <param-value>111</param-value>
</context-param>
- context.getInitParam("hhh") // web.xml的context-parm的值
- context.getRealPath("web.xml") //获取web.xml的绝对路径
- context.getContextPath() //获取web项目上下文路径
  • 方便一个servlet获取自己单独的属性配置
<init-param>
    <param-name>xx</param-name>
    <param-value>11</param-value>
</init-param>

ServletConfig config = this.getServletConfig()
config.getParameter("xx")
posted @ 2020-01-23 18:52  SteveYu  阅读(165)  评论(0编辑  收藏  举报