Servlet原理及Mapping问题的体现

1.1Servlet原理

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

 1.2Mapping问题

我们点击web.xml,如下所示:

 1.一个Servlet可以指定一个映射路径

 <!--Servlet的请求路径-->
    <!--localhost:8080/untitled/hello-->
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

 2.一个Servlet可以指定多个映射路径

 <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</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>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello5</url-pattern>
    </servlet-mapping>

我们运行之后进行查看:

 我们发现,我们选择不同的路径,都是可以进入到这个页面的。

3.一个Servlet可以指定通用映射路径。

我们将通配符*运用到路径里面来进行查看效果:

 <!--Servlet的请求路径-->
    <!--/hello/*代表hello下的任何请求都可以被映射-->
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello/*</url-pattern>
    </servlet-mapping>

之后我们重新运行之后,出现无论hello后面的路径是什么,都可以进入该界面:

只写一个hello也可以进入该界面。

4.默认请求路径

<--默认请求路径-->
<servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

之后我们选择进行重启,如下所示:

我们通过网址可以看到,我们再进index.jsp了,我们没有进入首页。所以尽量不要这样子去写。

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

<!--Servlet的请求路径-->
    <!--可以自定义后缀实现请求映射
    注意点,*前面不能加项目映射的路径,比如/hello/*.rgf会出现报错,但是/hello/ypl.rgf是可以实现的-->
<servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>*.rgf</url-pattern>
    </servlet-mapping>

我们重新启动,进入如下所示:

 6.优先级问题(自定义404)

我们创建一个ErrorServlet:

 之后我们进行编辑该类:

package com.rgf.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

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>404</h1>");
    }

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

里面的setContentType在开发者工具里面找到:

之后,我们编辑web,xml里面的文件:(将该文件添加进去)

 <!--404-->
    <servlet>
        <servlet-name>error</servlet-name>
        <servlet-class>com.rgf.servlet.ErrorServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>error</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

我们运行之后如下所示:

 我们判断看后面加hello最后进入哪个页面:

我们发现hello也属于/*,但是我们进入hello的界面。

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直再追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值