1

对于Servlet原理以及Mapping的五种映射和404页面的详解

 1 year ago
source link: https://blog.51cto.com/u_15568258/5614174
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Table of Contents

一.Servlet原理

1,浏览器向web容器发送Http请求,我们这里用的web容器为tomcat。
2.我们在Servlet里的protected void doGet(HttpServletRequest req, HttpServletResponse resp)里写了请求和响应的方法,这里调用Servlet的Serice方法。
3.访问我们自己写的实现类,重写这些方法。

  • 接受并处理请求。
  • 给出响应的信息。
    4.响应信息发出后,响应个客户端。
    Servlet原理图如下:
    对于Servlet原理以及Mapping的五种映射和404页面的详解_java

二.Mapping运用

Mapping有好几种用法如下:

  • servlet可以映射一个路径
  • servlet可以映射多个路径
  • servlet可以映射公共路径
  • servlet可以映射默认路径
  • servlet可以映射前缀路径

2.1 servlet映射一个路径

url-pattern为路径,servlet-name为对应上面的<servlet><servlet-name>hello</servlet-name> <servlet-class>com.gowork.servlet.helloservlet</servlet-class> </servlet>

 <servlet-mapping>
     <servlet-name>hello</servlet-name>
     <url-pattern>/hello</url-pattern>
 </servlet-mapping>

servlet映射一个路径访问效果如下:

对于Servlet原理以及Mapping的五种映射和404页面的详解_java_02

2.2 servlet映射多个路径

这次我们在hello后添加了zhu和zhang,映射的servlet-name还是hello,所以调用的还是之前的那个函数。

<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/zhu</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/zhang</url-pattern>
</servlet-mapping>

PS:记得重新启动服务器!
servlet映射多个路径测试效果如下:

对于Servlet原理以及Mapping的五种映射和404页面的详解_插入图片_03

可以看到,我们在url指向zhu和zhang,也还是会映射到servlet名称为hello的接口,输出

Hello,Servlet Shangjin small vegetable pig

2.3 servlet映射公共路径

servlet映射公共路径的标志是通配符*

<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/zhu/*</url-pattern>
</servlet-mapping>

servlet映射公共路径现在是如上代码,那么先说一下,现在我们写了/zhu/*就代表着
/zhu可以正常映射,/zhu/1可以正常映射,只要/zhu正确,后面加什么url都是可以正确的映射到hello接口的。

效果图:

对于Servlet原理以及Mapping的五种映射和404页面的详解_java_04

2.4 servlet可以映射默认路径

映射默认路径顾名思义就是设置一个默认路径,无论我们访问上面url都是映射到对应的接口上,这种方式非常的不推荐,直接写死了。

    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

servlet可以映射默认路径效果图如下:

对于Servlet原理以及Mapping的五种映射和404页面的详解_java_05

2.5 servlet可以映射前缀路径

映射前缀路径顾名思义就是如果我们的后缀没问题的话,前面写任意的url都是正确的。
如下代码:

    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>*.zhu</url-pattern>
    </servlet-mapping>

映射前缀路径效果图如下,一看就可以明白。

对于Servlet原理以及Mapping的五种映射和404页面的详解_xml_06

注意:在*号前不能加路径,否则报错。

四.Servlet404页面

1.我们首先创建一个类:

Errorservlet

2.然后继承HttpServlet。

public class Errorservlet extends HttpServlet

3.重写doGet和doPost

    @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("404");
    }

4.注册error页面

这里先放一下,之前的hello页面:

<!--   hello -->
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.gowork.servlet.helloservlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

写一个error,使用映射默认路径,这里存在一个优先级。
比如说我们在url访问:

 http://localhost:8080/javweb/hello

是从上到下的顺序,所以先映射到了hello就正常的输出了:

Hello,Servlet Shangjin small vegetable pig

如果不是hello的url就走下面的error映射默认路径,出现404。

<!--  error-->
    <servlet>
        <servlet-name>error</servlet-name>
        <servlet-class>com.gowork.servlet.Errorservlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>error</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

效果图如下:

对于Servlet原理以及Mapping的五种映射和404页面的详解_xml_07

注意:
指定了固定的url的优先级要大于映射默认路径。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK