controller中的doGet()方法不执行,请帮忙看下

controller中的doGet()方法不执行,请帮忙看下

# 具体遇到的问题
启动tomcat后,浏览器请求被过滤器拦截并通过doFilter()方法转发后,请求没有进入controller中的doGet()方法(我在doGat()方法中写的输出代码在控制台不打印)能帮忙看下是什么问题吗?


此外:eclipse 上的 servers 中的tomcat 我前几天不小心删掉了,又重新安装的。误删之前一个项目启动至少需要6000-8000毫秒,但重新安装后项目启动只需3000毫秒左右,而且现在启动tomcat后,( localhost:8080 )无法进入tomcat的官方。(经测试,之前的项目依旧可以正常限显示)


# 报错信息的截图

# 相关课程内容截图

# 尝试过的解决思路和结果
1,重新建项目后,将粘贴原有的项目文件。。。没效果

2,调整控制器的地址(@WebServlet("/management"))。。。没效果
# 粘贴全部相关代码,切记添加代码注释(请勿截图)

1
============================================<br>过滤器<br>===================<br>package com.imooc.bookmanagement.util;<br><br>import java.io.IOException;<br>import java.util.ArrayList;<br>import java.util.List;<br>import java.util.regex.Matcher;<br>import java.util.regex.Pattern;<br><br>import javax.servlet.Filter;<br>import javax.servlet.FilterChain;<br>import javax.servlet.FilterConfig;<br>import javax.servlet.ServletException;<br>import javax.servlet.ServletRequest;<br>import javax.servlet.ServletResponse;<br>import javax.servlet.annotation.WebFilter;<br>import javax.servlet.http.HttpServletRequest;<br>import javax.servlet.http.HttpServletResponse;<br>import javax.servlet.http.HttpServletResponseWrapper;<br>import javax.servlet.http.HttpSession;<br><br>import org.apache.tomcat.jni.User;<br><br><br>@WebFilter(filterName="loginFilter",urlPatterns="/*")<br>public class LoginFilter implements Filter {<br><br>//   private static final String CURRENT_USER = "current_user";<br><br>     //配置白名单<br>//        protected static List<Pattern> patterns = new ArrayList<Pattern>();<br>//       protected static List<String> patterns = new ArrayList<String>();<br><br>       //静态代码块,在虚拟机加载类的时候就会加载执行,而且只执行一次<br>//      static {<br>//          patterns.add(Pattern.compile("/bookList"));<br>//           patterns.add(Pattern.compile("/css"));<br>//            patterns.add(Pattern.compile("/js"));<br>//         patterns.add("/bookList");<br>//            patterns.add(".css");<br>//         patterns.add(".js");<br>//      }<br><br>   @Override<br>   public void destroy() {<br>     // TODO Auto-generated method stub<br><br>  }<br><br>   @Override<br>   public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)<br>           throws IOException, ServletException {<br>      // TODO Auto-generated method stub<br>      HttpServletRequest req = (HttpServletRequest)request;<br>       HttpServletResponse res = (HttpServletResponse)response;<br>        req.setCharacterEncoding("UTF-8");<br>      res.setContentType("text/html;charset=UTF-8");<br>      System.out.println("过滤器拦截网址:" + req.getRequestURI());<br>//     if(!req.getRequestURI().equals("/bookmanagement/bookList.html")<br>//           && !req.getRequestURI().endsWith(".js")<br>//           && !req.getRequestURI().endsWith(".css")) {<br>//           req.getRequestDispatcher("loginException.html").forward(request, response);<br>//       }<br>//     chain.doFilter(request, response);<br><br><br>//        HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper(res);<br>//<br>//       String url = req.getRequestURI().substring(req.getContextPath().length());<br>//        if (isInclude(url)) {<br>//         //在白名单中的url,放行访问<br>//          chain.doFilter(req, res);<br>//         return;<br>//       }<br>//     if (req.getSession().getAttribute(CURRENT_USER) != null) {<br>//            //若为登录状态 放行访问<br>//         chain.doFilter(req, res);<br>//         return;<br>//       } else {<br>//          //否则默认访问index接口<br>////         wrapper.sendRedirect("WebContent/WEB-INF/loginException.html");<br>//           req.getRequestDispatcher("WebContent/WEB-INF/loginException.html").forward(req,res);<br>//      }<br>          String path = req.getRequestURI();<br>           System.out.println("reqURL----------" + path);<br>          // 如果包含login.jsp证明是登陆就放行<br>            if (path.contains("login") || path.contains("/js/") || path.contains("/image/") || path.contains("/css/")<br>                   || path.contains("message.jsp")|| path.contains("404.jsp")|| path.contains("/images/")) {<br>               chain.doFilter(request, response); // 放行<br>                System.out.println("过滤器执行成功!");<br>             return;<br>         }<br>//         HttpServletResponse res = (HttpServletResponse) response;<br>           HttpSession session = req.getSession();<br>         User user =  (User) session.getAttribute("user");<br>           // 如果session中存在user证明用户登录,可以放行。否则认为未登陆重定向到login.jsp<br>         if (user == null) {<br>             System.out.println(req.getContextPath());<br>               res.sendRedirect(req.getContextPath() + "/jsp/login.jsp");<br>          } else {<br>                System.out.println("user----------"+user);<br>              chain.doFilter(request, response);<br>          }<br>   }<br><br>   @Override<br>   public void init(FilterConfig filterConfig) throws ServletException {<br>       // TODO Auto-generated method stub<br><br>  }<br><br>   //判断当前请求是否在白名单<br>//        private boolean isInclude(String url) {<br>//           for (Pattern pattern : patterns) {<br>//                Matcher matcher = pattern.matcher(url);<br>//               if (matcher.matches()) {<br>////                if(url.contains(pattern)) {<br>//                   return true;<br>//              }<br>//         }<br>//         return false;<br>//     }<br>}<br>==================================================================<br>controller<br>===========================================<br>package com.imooc.bookmanagement.controller;<br><br>import java.io.IOException;<br>import javax.servlet.ServletException;<br>import javax.servlet.annotation.WebServlet;<br>import javax.servlet.http.HttpServlet;<br>import javax.servlet.http.HttpServletRequest;<br>import javax.servlet.http.HttpServletResponse;<br><br>/**<br> * Servlet implementation class BookManagementServletController<br> */<br>@WebServlet("/management")<br>public class BookManagementServletController extends HttpServlet {<br> private static final long serialVersionUID = 1L;<br><br>    /**<br>  * @see HttpServlet#HttpServlet()<br>    */<br> public BookManagementServletController() {<br>      super();<br>        // TODO Auto-generated constructor stub<br> }<br><br>   /**<br>  * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse<br>    *      response)<br>    */<br> protected void doGet(HttpServletRequest request, HttpServletResponse response)<br>          throws ServletException, IOException {<br>      // TODO Auto-generated method stub<br>      request.setCharacterEncoding("UTF-8");<br>      response.setContentType("text/html;charset=UTF-8");<br>     String method = request.getParameter("method");<br>     System.out.println("控制台网址:" + request.getRequestURI());<br>     if (request.getRequestURI().equals("/management/login.jsp")) {<br>          System.out.println("url:");<br>         this.login(request, response);<br>      } else if (method.equals("login")) {<br>            System.out.println("method");<br>           this.login(request, response);<br>      }<br>   }<br><br>   /**<br>  * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse<br>   *      response)<br>    */<br> protected void doPost(HttpServletRequest request, HttpServletResponse response)<br>         throws ServletException, IOException {<br>      // TODO Auto-generated method stub<br>      doGet(request, response);<br>   }<br><br>   // 跳转登录页面的方法<br>    private void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {<br>     request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);<br>  }<br><br>}<br>


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,

1、建议同学先判断queryString是否为null,再判断是否包含"login"。

参考代码如下:

http://img1.sycdn.imooc.com//climg/5f9a24500943615c13550414.jpg

在Controller中添加输出语句,参考代码如下:

http://img1.sycdn.imooc.com//climg/5f9a222a09b9b2af10620517.jpg

重启Tomcat,清理一下浏览器缓存,访问http://localhost:8080/management?method=login ,后台输出 如下:

http://img1.sycdn.imooc.com//climg/5f9a22e909e2cbc106040144.jpg

2、可能是同学的请求路径不正确。

建议同学看一下项目请求路径是什么,如下:

http://img1.sycdn.imooc.com//climg/5f9a24a2092d2dd206350561.jpg

以项目的请求路径为/为例,请求url应该是http://localhost:8080/management?method=login

3、同学可以在代码中添加断点,如下:

http://img1.sycdn.imooc.com//climg/5f9a2391090d9ce513660395.jpg

以debug模式启动Tomcat,看一下代码的执行过程。

如下:

http://img1.sycdn.imooc.com//climg/5f9a23c0095592c706400311.jpg

4、toncat启动时间

Tomcat启动时间和webapps目录里边有几个项目有关。启动时间不一样可能是Tomcat之前里边webapp中有之前发布的项目没有清理干净,也会影响Tomcat启动的速度。

建议同学清理一下Tomcat,如下:

http://img1.sycdn.imooc.com//climg/5f9a3b6509e293ca05820244.jpg

5、Tomcat官方启动不显示

不能进入官方启动页,可能是有的版本的Tomcat没有提供默认的首页欢迎页,所以不显示,这个不影响程序运行。


好帮手慕阿慧 2020-10-28 18:24:42

同学你好,

getRequestURI()方法只能获得不包含参数的请求url。同学可以使用getQueryString()方法获得跟在url后面的参数,判断参数中有没有login。

参考代码如下:

http://img1.sycdn.imooc.com//climg/5f99468a0945cac611840284.jpg

  • 提问者 慕婉清2005302 #1
    你好,doFilter()方法是可以正常执行的,控制器中的doGet()方法应该没有执行,我放在doGet()方法中的输出语句,在控制台根本没有打印任何内容 控制台输出结果如下: ============================== 十月 28, 2020 7:01:03 下午 org.apache.catalina.startup.Catalina start 信息: Server startup in 2833 ms 过滤器拦截网址:/management/ reqURL----------/management/ getQueryString()URL----------method=login 过滤器执行成功! ====================================
    2020-10-28 19:16:12
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师
插入代码