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

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

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


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


# 报错信息的截图

# 相关课程内容截图

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

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

============================================
过滤器
===================
package com.imooc.bookmanagement.util;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import javax.servlet.http.HttpSession;

import org.apache.tomcat.jni.User;


@WebFilter(filterName="loginFilter",urlPatterns="/*")
public class LoginFilter implements Filter {

// private static final String CURRENT_USER = "current_user";

//配置白名单
// protected static List<Pattern> patterns = new ArrayList<Pattern>();
// protected static List<String> patterns = new ArrayList<String>();

//静态代码块,在虚拟机加载类的时候就会加载执行,而且只执行一次
// static {
// patterns.add(Pattern.compile("/bookList"));
// patterns.add(Pattern.compile("/css"));
// patterns.add(Pattern.compile("/js"));
// patterns.add("/bookList");
// patterns.add(".css");
// patterns.add(".js");
// }

@Override
public void destroy() {
// TODO Auto-generated method stub

}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
req.setCharacterEncoding("UTF-8");
res.setContentType("text/html;charset=UTF-8");
System.out.println("过滤器拦截网址:" + req.getRequestURI());
// if(!req.getRequestURI().equals("/bookmanagement/bookList.html")
// && !req.getRequestURI().endsWith(".js")
// && !req.getRequestURI().endsWith(".css")) {
// req.getRequestDispatcher("loginException.html").forward(request, response);
// }
// chain.doFilter(request, response);


// HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper(res);
//
// String url = req.getRequestURI().substring(req.getContextPath().length());
// if (isInclude(url)) {
// //在白名单中的url,放行访问
// chain.doFilter(req, res);
// return;
// }
// if (req.getSession().getAttribute(CURRENT_USER) != null) {
// //若为登录状态 放行访问
// chain.doFilter(req, res);
// return;
// } else {
// //否则默认访问index接口
//// wrapper.sendRedirect("WebContent/WEB-INF/loginException.html");
// req.getRequestDispatcher("WebContent/WEB-INF/loginException.html").forward(req,res);
// }
String path = req.getRequestURI();
System.out.println("reqURL----------" + path);
// 如果包含login.jsp证明是登陆就放行
if (path.contains("login") || path.contains("/js/") || path.contains("/image/") || path.contains("/css/")
|| path.contains("message.jsp")|| path.contains("404.jsp")|| path.contains("/images/")) {
chain.doFilter(request, response); // 放行
System.out.println("过滤器执行成功!");
return;
}
// HttpServletResponse res = (HttpServletResponse) response;
HttpSession session = req.getSession();
User user = (User) session.getAttribute("user");
// 如果session中存在user证明用户登录,可以放行。否则认为未登陆重定向到login.jsp
if (user == null) {
System.out.println(req.getContextPath());
res.sendRedirect(req.getContextPath() + "/jsp/login.jsp");
} else {
System.out.println("user----------"+user);
chain.doFilter(request, response);
}
}

@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub

}

//判断当前请求是否在白名单
// private boolean isInclude(String url) {
// for (Pattern pattern : patterns) {
// Matcher matcher = pattern.matcher(url);
// if (matcher.matches()) {
//// if(url.contains(pattern)) {
// return true;
// }
// }
// return false;
// }
}
==================================================================
controller
===========================================
package com.imooc.bookmanagement.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* Servlet implementation class BookManagementServletController
*/
@WebServlet("/management")
public class BookManagementServletController extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public BookManagementServletController() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String method = request.getParameter("method");
System.out.println("控制台网址:" + request.getRequestURI());
if (request.getRequestURI().equals("/management/login.jsp")) {
System.out.println("url:");
this.login(request, response);
} else if (method.equals("login")) {
System.out.println("method");
this.login(request, response);
}
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}

// 跳转登录页面的方法
private void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
}

}


正在回答

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

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
您的移动学习伙伴

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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