目录
一、Servlet原理
1.客户端发送http请求(request)到web容器,之后web容器会产生两个对象Request和Response。
2.调用Servlet的service(ServletRequest,ServletResponse )方法,将请求的信息对象Request作为参数传入。
3.我们自己写的servlet类重写的doGet或者doPost方法就是接收传入的请求信息并处理,之后再将响应的信息交给Response。
4.web容器通过读取Response对象获取响应信息再响应给客户端
二、Servlet映射路径mapping的理解
1.一个Servlet指定一个映射路径
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/helloServlet</url-pattern>
</servlet-mapping>
2.一个Servlet还可以指定多个映射地址
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/helloServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/helloServlet1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/helloServlet2</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/helloServlet3</url-pattern>
</servlet-mapping>
3.一个Servlet还可以指定通用映射路径
①:
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/helloServlet/*</url-pattern>
</servlet-mapping>
/*表示为/后面加任何地址都行
②:
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
此时运行TomCat不会打开默认的index.jsp页面,而是访问servlet程序(少用这种情况)。并且之后可以输入任何地址都会访问servlet程序。
4.可以指定映射路径的后缀
①:
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>*.flj</url-pattern>
</servlet-mapping>
注意:这里不能是/*.flj,不然会报错
三、用mapping通用地址简单处理404
1.创建ErrorServlet类重写方法
public class ErrorServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//以html响应给客户端
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
PrintWriter writer = resp.getWriter();
writer.println("<h1>404<h1>");
}
}
2.在web.xml中使用通配符/*注册Servlet
<!--注册servlet-->
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.kuang.servlet.HelloServlet</servlet-class>
</servlet>
<!--servlet的映射路径-->
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/helloServlet</url-pattern>
</servlet-mapping>
<!--注册ErrorServlet-->
<servlet>
<servlet-name>ErrorServlet</servlet-name>
<servlet-class>com.kuang.servlet.ErroeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ErrorServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
注意:制定了固有的映射路径优先级最高,因此我们访问/helloServlet时不会访问ErrorServlet程序,而若是访问其他没有设置的映射地址则会访问ErrorServlet,不再是默认的404报错页面。