老师你好,我在跳转到message-list.jsp 的时候出错了

老师你好,我在跳转到message-list.jsp 的时候出错了

如题,MessageListServlet代码为:


package com.imooc.jdbc.servlet;

import com.imooc.jdbc.bean.Message;
import com.imooc.jdbc.service.MessageService;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

public class MessageListServlet extends HttpServlet {
   private MessageService messageService;

   @Override
   public void init(ServletConfig config) throws ServletException {
       super.init(config);
       messageService = new MessageService();
   }

   @Override
   protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       super.service(request, response);
//        获得当前页码
       int page = 1;
       String pageStr = request.getParameter("page");
           if (( pageStr != null) &&!(pageStr.equals(""))) {
               page = Integer.parseInt(pageStr);
       }
//        每页显示五条记录
       List<Message> messages = messageService.getMessages(page, 5);
       int count = messageService.countMessage();
       int last = (count % 5 == 0) ? (count / 5) : (count / 5 + 1);
       request.setAttribute("page",page);
       request.setAttribute("messages",messages);
       request.setAttribute("last",last);
       request.getRequestDispatcher("/WEB-INF/views/biz/message_list.jsp").forward(request,response);

   }

   @Override
   public void destroy() {
       super.destroy();
       messageService = null;
   }

}

xml配置为:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
        version="4.0">
   <welcome-file-list>
       <welcome-file>/index.jsp</welcome-file>
   </welcome-file-list>
   <servlet>
       <servlet-name>MessageListServlet</servlet-name>
       <servlet-class>com.imooc.jdbc.servlet.MessageListServlet</servlet-class>
   </servlet>
   <servlet-mapping>
       <servlet-name>MessageListServlet</servlet-name>
       <url-pattern>/message</url-pattern>
   </servlet-mapping>
   
   <error-page>
       <error-code>404</error-code>
       <location>/WEB-INF/views/error/404.jsp</location>
   </error-page>
   <error-page>
       <error-code>500</error-code>
       <location>/WEB-INF/views/error/500.jsp</location>
   </error-page>
</web-app>


执行的时候在MessageListServletHong 的请求转发的那条语句出错

报错信息为:

 java.lang.IllegalStateException: Cannot forward after response has been committed

at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:323)

at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)

at com.imooc.jdbc.servlet.MessageListServlet.service(MessageListServlet.java:36)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)

at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:651)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)

at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:412)

at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)

at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:754)

at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1385)

at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.lang.Thread.run(Thread.java:748)


正在回答

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

2回答

对于是否加/,你可以这么理解,加上/代表绝对路径,也就是工程名/WEB-INF/views/biz/message_list.jsp;不加/代表相对路径,会直接到当前项目去寻找WEB-INF/views/biz/message_list.jsp这个文件,所以正常情况下两者都是可以的。

好帮手慕珊 2018-11-04 12:03:07

你好!这个问题一般出现在,执行完重定向后又执行了转发操作,建议在重定向和转发操作的后面加上return,然后再试试。祝学习愉快!

  • 提问者 李成大独秀 #1
    试过了,没用,不过后面我把转发语句的目的地址前面的/删了,问题解决了,不知道为什么: request.getRequestDispatcher("WEB-INF/views/biz/message_list.jsp").forward(request,response); 在之前我在WEB-INF前面有一个'/',我试了好多办法都不行,时候我把'/'删了就好了,老师能否给我详细的讲解一下是为什么?
    2018-11-04 14:24:31
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
Java数据库开发与实战应用2018版
  • 参与学习           人
  • 提交作业       277    份
  • 解答问题       4297    个

Java数据库开发的必备技能,从流行的MySQL数据库开始,到Java原生的数据库管理接口JDBC的使用,再到常用的数据持久化框架MyBatis,让你向Java工程师的目标又迈进了一步!

了解课程
请稍等 ...
微信客服

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

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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