servlet:一次请求多次响应的问题

  今天遇到一个问题,客户端发起请求,得到服务端响应是重定向次数过多,尝试清除Cookie。

                

  Servlet代 1 import java.io.IOException;

 2
 3 import javax.servlet.ServletException;
 4 import javax.servlet.http.HttpServlet;
 5 import javax.servlet.http.HttpServletRequest;
 6 import javax.servlet.http.HttpServletResponse;
 7 
 8 public class LoginServlet extends HttpServlet {
 9     @Override
10     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
11         req.setCharacterEncoding("utf-8");
12         resp.setContentType("text/html;charset=utf-8");
13         resp.sendRedirect("/servlet/login.jsp");14     }
15 }

  web.xml配置如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 
 3         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 4         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee                       
 5                             http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">  
 6   <servlet>
 7           <servlet-name>loginServlet</servlet-name>
 8           <servlet-class>com.xzp.servlet.LoginServlet</servlet-class>
 9           <load-on-startup>1</load-on-startup>
10   </servlet>
11   <servlet-mapping>
12           <servlet-name>loginServlet</servlet-name>
13           <url-pattern>/*</url-pattern>
14   </servlet-mapping>
15   16 </web-app>

    原因:          

      <url-pattern>/*</url-pattern>中的/*指的是:loginServlet的所有请求都会被捕捉,过滤。当LoginServlet业务逻辑处理结束时,会重定向resp.sendRedirect("/servlet/login.jsp");这时客户端会再次请求LoginServlet,LoginServlet捕捉到请求重新执行,相当于回调了doGet()方法,最终导致重定向次数太多。

 

posted @ 2019-05-10 21:04  无虑的小猪  阅读(1503)  评论(0)    收藏  举报