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>
正在回答
同学你好,
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没有提供默认的首页欢迎页,所以不显示,这个不影响程序运行。
- 参与学习 人
- 提交作业 9402 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧