Servlet原理
Servlet是由Web服务器调用,web服务器在收到浏览器请求之后,会:
我们自己编写的实现类,重写这些方法
- 接收并处理请求
- 给出响应的信息
- 一个Servlet 可以指定一个映射路径:
<!-- servlet 请求路径--> <!-- 请求路径:localhost:8080/hello --> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
- 一个Servlet 可以指定多个映射路径:
<!-- servlet 请求路径--> <!-- 请求路径:localhost:8080/hello --> <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 可以通用映射路径:
<!-- servlet 请求路径--> <!-- 请求路径:localhost:8080/hello --> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello/*</url-pattern> </servlet-mapping>
- 指定一些后缀或前缀等等.......
<!-- 可以自定义后缀实现请求映射 注意点:<url-pattern> 中,* 前面不能加项目的映射路径 如:/*.xiaoxu 会报错--> <!-- 请求路径:localhost:8080/hello.xiaoxu --> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>*.xiaoxu</url-pattern> </servlet-mapping>
重写404页面
- 先创建一个ErrorHttp普通类继承 HttpServlet 类,
- 随后Override(重写)doGet()、doPost () 方法,
- 再到 web.xml 文件中 注册Servlet 、设置Servlet 请求路径:
package com.xu.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 ErrorHttp extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); //设置连接类型为html resp.setCharacterEncoding("utf-8"); //设置页面的编码格式为utf-8 PrintWriter writer = resp.getWriter();//调用getWriter()方法 writer.print("<h1>重写的 404 页面<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.xu.servlet.ErrorHttp</servlet-class> </servlet> <!-- 设置Servlet 的请求路径 --> <!-- 访问请求路径:http://localhost:8081/hello/ * --> <servlet-mapping> <servlet-name>error</servlet-name> <url-pattern>/hello/*</url-pattern> </servlet-mapping>
优先级问题
指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求;