对于Servlet原理以及Mapping的五种映射和404页面的详解
Posted 上进小菜猪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对于Servlet原理以及Mapping的五种映射和404页面的详解相关的知识,希望对你有一定的参考价值。
@[toc]
一.Servlet原理
1,浏览器向web容器发送Http请求,我们这里用的web容器为tomcat。
2.我们在Servlet里的protected void doGet(HttpServletRequest req, HttpServletResponse resp)
里写了请求和响应的方法,这里调用Servlet的Serice方法。
3.访问我们自己写的实现类,重写这些方法。
- 接受并处理请求。
- 给出响应的信息。
4.响应信息发出后,响应个客户端。
Servlet原理图如下:
二.Mapping运用
Mapping有好几种用法如下:
- servlet可以映射一个路径
- servlet可以映射多个路径
- servlet可以映射公共路径
- servlet可以映射默认路径
- servlet可以映射前缀路径
2.1 servlet映射一个路径
url-pattern为路径,servlet-name为对应上面的<servlet><servlet-name>hello</servlet-name><br/><servlet-class>com.gowork.servlet.helloservlet</servlet-class> </servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
servlet映射一个路径访问效果如下:
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映射多个路径测试效果如下:
可以看到,我们在url指向zhu和zhang,也还是会映射到servlet名称为hello的接口,输出
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接口的。
效果图:
2.4 servlet可以映射默认路径
映射默认路径顾名思义就是设置一个默认路径,无论我们访问上面url都是映射到对应的接口上,这种方式非常的不推荐,直接写死了。
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
servlet可以映射默认路径效果图如下:
2.5 servlet可以映射前缀路径
映射前缀路径顾名思义就是如果我们的后缀没问题的话,前面写任意的url都是正确的。
如下代码:
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>*.zhu</url-pattern>
</servlet-mapping>
映射前缀路径效果图如下,一看就可以明白。
注意:在*号前不能加路径,否则报错。
四.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访问:
是从上到下的顺序,所以先映射到了hello就正常的输出了:
如果不是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>
效果图如下:
注意:
指定了固定的url的优先级要大于映射默认路径。
以上是关于对于Servlet原理以及Mapping的五种映射和404页面的详解的主要内容,如果未能解决你的问题,请参考以下文章