美文网首页
Servlet-06(路径问题)

Servlet-06(路径问题)

作者: 西谷haul | 来源:发表于2020-05-14 16:51 被阅读0次

    1.路径问题

    (1)什么是路径问题?

    <a href="addUser.jsp"> 
    <form action="add"> 
    response.sendRedirect("login.jsp")
    request.getRequestDispatcher("listUsers.jsp")
    

    (2)什么是相对路径?

    不以"/"开头的路径

    (3)什么是绝对路径?

    以"/"开头的路径

    (4)如何写绝对路径?

    链接、表单提交、重定向从应用名开始写,转发从应用名之后开始写。

    注:不要将应用名直接写在路径里面,而应该使用下面的方法
    来获得实际部署时的应用名。
    String request.getContextPath();
    

    2.容器如何处理请求资源路径?

    比如,在浏览器地址栏输入http://ip:port/day08-2/abc.html

    step1.容器默认认为访问的是一个servlet。

    容器将请求资源路径("/day08-2/abc.html")中的应用名除掉,
    得到"/abc.html",然后查找web.xml配置文件,看<url-pattern>
    有没有与之匹配的servlet。
    
    匹配方式有三种:
        第一种: 精确匹配 
        第二种: 通配符匹配,即使用"*"配置任意的零个或者多个字符,比如
             <url-pattern>/*</url-pattern>
             <url-pattern>/demo/*</url-pattern>
        第三种:后缀匹配,使用"*."开头,后接任意的一个后缀,比如
             <url-pattern>*.do</url-pattern>
             以上配置,会匹配所有以".do"结尾的请求。
             <url-pattern>*.action</url-pattern>
    

    step2.如果找不到对应的servlet,容器会查找对应位置的文件。

        找到了,就返回该文件的内容,找不到,返回404。
    

    3.如何让一个servlet处理多种请求?

    step1. 使用后缀匹配,比如

    <servlet-mapping>
        <servlet-name>someServlet</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    

    step2. 分析请求资源路径,调用对应的分支来处理。

    4.Servlet上下文

    (1)什么是Servlet上下文?

    容器启动之后,会为每一个web应用创建唯一的一个符合ServletContext 接口要求的对象,该对象一般称之为Servlet上下文。

    特点:
        唯一性:一个web应用对应一个Servlet上下文。
        持久性: 只要容器没有关闭,应用没有被卸载,Servlet上下文就会一直存在。
    
    image.png

    (2)如何获得Servlet上下文?

    HttpSession,GenericServlet提供了getServletContext方法来获得 上下文。

    注:
        GenericServlet是HttpServlet的父类
    

    (3)作用1: 绑订数据

    request,session,Servlet上下文都提供了绑订数据相关的方法, 区别如下:

    a.生存时间不一样,在满足使用条件的情况下,优先使用生命周期
    短的(节省内存)。
      request < session < servlet上下文
    
    image.png
    b.可访问的范围不一样。
    
    image.png

    5.利用Servlet上下文读取全局的初始化参数

    step1.配置全局的初始化参数

    <!--配置全局的初始化参数 -->
    <context-param>
        <param-name>company</param-name>
        <param-value>北京达内科技有限公司</param-value>
    </context-param> 
    

    step2.读取

    /*
     * 通过ServletContext提供的方法来
     * 读取全局的初始化参数
     */
    String company = 
            sctx.getInitParameter("company");
    

    相关文章

      网友评论

          本文标题:Servlet-06(路径问题)

          本文链接:https://www.haomeiwen.com/subject/dtxxohtx.html