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);
}
}
正在回答
同学你好,
1、建议同学先判断queryString是否为null,再判断是否包含"login"。
参考代码如下:

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

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

2、可能是同学的请求路径不正确。
建议同学看一下项目请求路径是什么,如下:

以项目的请求路径为/为例,请求url应该是http://localhost:8080/management?method=login
3、同学可以在代码中添加断点,如下:

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

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

5、Tomcat官方启动不显示
不能进入官方启动页,可能是有的版本的Tomcat没有提供默认的首页欢迎页,所以不显示,这个不影响程序运行。
- 参与学习 人
- 提交作业 9410 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程

恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星