zoukankan      html  css  js  c++  java
  • 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")
    
  • 相关阅读:
    Python使用shape计算矩阵的行和列
    python--tile函数
    【Machine Learning in Action --3】决策树ID3算法
    python [1:3]
    python字典访问的三种方法
    python--sorted函数和operator.itemgetter函数
    python--lambda和def函数
    python--sorted函数
    【转载】梦断计院--一个计算机学院学生大学学习生活的回顾与反省
    jquery源码学习-初始(1)
  • 原文地址:https://www.cnblogs.com/littlepage/p/12231061.html
Copyright © 2011-2022 走看看