今天对于javaweb进行了复习以及回忆,
在进行javaweb项目中
使用idea进行时,webServlet注解不能正常使用,经讨论,查找资料,发现是路径错误,应该是
/包名/注解名/
的格式,在使用中发生了以上错误并加以改正。
package servlet; import bean.keBean; import repository.KeRep; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; @WebServlet("/student") public class KeSer extends HttpServlet { //调用StudentRepository中的增删改查方法 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //判断前端传来的标记,以此执行相对应的增删改查操作 String method=req.getParameter("method"); if (method==null){ method="findAll"; } switch (method){ case "findAll"://查询所有数据 List<keBean> list = KeRep.findAll();//调用StudentRepository中的findAll()方法 req.setAttribute("list",list);//存入request中 req.getRequestDispatcher("index.jsp").forward(req,resp);//转发到index.jsp中 case "delete"://删除操作 String idStr=req.getParameter("classname"); KeRep.deleteByClass(idStr);//根据id删除 break; case "findById": idStr=req.getParameter("id"); req.setAttribute("student", KeRep.findByClass(idStr)); req.getRequestDispatcher("update.jsp").forward(req,resp); break; case "add": req.getRequestDispatcher("add.jsp").forward(req,resp); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("UTF-8");//防止中文乱码 String method=req.getParameter("method"); switch (method){ case "add"://添加操作 //获取前端传来的数据 String classname = req.getParameter("classname"); String teacher = req.getParameter("teacher"); String address = req.getParameter("address"); String time = req.getParameter("time"); KeRep.add(classname,teacher,address,time);//调用add方法 break; case "update"://更新操作 classname = req.getParameter("classname"); teacher = req.getParameter("teacher"); address = req.getParameter("address"); time = req.getParameter("time"); KeRep.update(classname,teacher,address,time); break; } resp.sendRedirect("/test1/student");//重定向到index.jsp页面 } }
同时发生了异常
javaweb报错Servlet.service() for servlet [servlet.KeSer] in context with path [/test1] threw exception
java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed
at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:483)
这个错误提示意味着在调用response.sendRedirect()方法之前,已经有内容被输出到了response中,这导致了响应数据被提交,已经无法重定向到另一个页面。
在Java Web中,response用于向客户端发送响应数据,使用response.sendRedirect()方法可以将客户端重定向到另一个Web页面。但是,这个方法有一个限制,它必须在响应被提交之前调用。如果你在输出响应之后尝试使用它,将会引发IllegalStateException异常,提示“Cannot call sendRedirect() after the response has been committed”。
解决方法:要遵循如下步骤:
1、检查所有输出操作,确保在调用response.sendRedirect()方法之前没有提交任何响应数据。
2、确认代码中没有设置响应内容的长度或类型(例如使用response.setContentLength() 或 response.setContentType())。因为一旦发送了响应头,就太晚了。
3、在调用sendRedirect()之前把缓冲区内容清空。可以使用response.resetBuffer()方法清空缓冲区,这也可以避免如此错误。
4、在调用sendRedirect()之后,调用return语句以退出函数,以确保不会在之后尝试输出响应数据。
尽可能提早调用sendRedirect()方法,以确保操作顺利完成,同时,确保其他响应操作没有在该方法之前完成即可避免这个问题。
对此我进行了删除,重定向到此网页解决。
标签:05,23,sendRedirect,req,getParameter,2023,import,servlet,response From: https://www.cnblogs.com/JJTyyds/p/17426206.html