Servlet原理和mapping分析

一---Servlet原理分析图

Servlet是由web服务器调用,web服务器在收到浏览器请求之后,会:

二---Mapping问题

1)一个servlet请求可以指定一个映射路径

<!--servlet的请求路径 -->
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>  <!-- 网址模式-->
  </servlet-mapping>

2)一个servlet请求可以指定多个映射路径

<!--servlet的请求路径 -->
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>  <!-- 网址模式-->
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello1</url-pattern>  <!-- 网址模式-->
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello2</url-pattern>  <!-- 网址模式-->
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello3</url-pattern>  <!-- 网址模式-->
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello4</url-pattern>  <!-- 网址模式-->
  </servlet-mapping>

3)一个servlet请求可以指定通用映射路径(使用通配符*)

<!--servlet的请求路径 -->
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello/*</url-pattern>  <!-- 网址模式-->
  </servlet-mapping>

4)默认请求路径,虽然进的是s1模块,但这时访问的不再是index.jsp.而是HelloServlet

5)指定一些后缀或者前缀等等

<!--servlet的请求路径 
  注意点,*前面不能加项目映射的路径-->
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>*.do</url-pattern>  <!-- 网址模式-->
  </servlet-mapping>

6)修改默认的404页面

public class ErrorServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html"); // 设置响应的文本格式
        resp.setCharacterEncoding("utf-8"); // 设置字符集
        PrintWriter writer = resp.getWriter(); // 构造输出对象
        writer.print("<h1>哥!这次真的找不到了。</h1>"); // 输出内容

    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

注册:

<!-- 404页面 -->
  <!--注册servlet -->
  <servlet>
    <servlet-name>error</servlet-name>
    <servlet-class>com.kuang.servlet.ErrorServlet</servlet-class>
  </servlet>

  <!--servlet的请求路径-->
  <servlet-mapping>
    <servlet-name>error</servlet-name>
    <url-pattern>/*</url-pattern>  <!-- 网址模式-->
  </servlet-mapping>

测试:

 输入/hello试试

6)优先级问题

指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求。

原文地址:https://www.cnblogs.com/YXBLOGXYY/p/14596156.html