servlet中的跳转
今天写个发布公告的系统时,写了个Servlet的跳转,发现了几个异常情况:
1、要注意在Jsp页面的Form表单中,要判断得到的数据的情况,
如:String title=request.getParameter("title");
if(title.equals(" ")){} <==============>而不是if(title==""){}
2、出现IllegalStateException异常,还有空指针异常;
3、报错:Cannot forward after response has been committed
( 因为我是在if------else代码里的:所以出现了现在的异常情况。)
处理方法:在request.getRequestDispatcher(errorJsp).forward(request,response);后加个 return;
基于以上的情况,可以用另外一种方式:(以下是我的全部代码)
public class AdminPublishGongGaoServlet extends HttpServlet {
private static String errorJsp="/admin/gonggaoError.jsp";
private static String successJsp="/admin/publishSuccess.jsp";
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
RequestDispatcher rdsp = null;
response.setCharacterEncoding("GBK");
String title=request.getParameter("title");
String content=request.getParameter("content");
String manager=(String)request.getSession().getAttribute("adminUserNa");
if(title.equals("")){
String msg="标题不能为空";
request.setAttribute("GongGaoMsg",msg );
request.getRequestDispatcher(errorJsp).forward(request, response);
rdsp = request.getRequestDispatcher(errorJsp); //这里不先提交
}
if(content.equals("")){
String msg="公告内容不能为空";
request.setAttribute("GongGaoMsg",msg );
rdsp = request.getRequestDispatcher(errorJsp);
}
if(content.length()>500){
String msg="公告内容字数请控制在500个以内!";
request.setAttribute("GongGaoMsg",msg );
rdsp = request.getRequestDispatcher(errorJsp);
}
GongGaoBean gonggao=new GongGaoBean(title,content,manager);
try {
AddGonggaoBPO.addGonggao(gonggao);
String msg="您的公告已经发布成功!";
request.setAttribute("GongGaoMsg",msg);
rdsp = request.getRequestDispatcher(successJsp);
} catch (Exception e) {
String msg="对不起,系统错误。请稍候!";
request.setAttribute("GongGaoMsg",msg);
rdsp = request.getRequestDispatcher(errorJsp);
}finally{
if(rdsp != null){
rdsp.forward(request, response); //这里才提交
}
}
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
但是的话:在最后才提交,会使try里面的代码也执行了。这样不对。
所以代码还只能是这样:
if(title.equals("")){
String msg="标题不能为空";
request.setAttribute("GongGaoMsg",msg );
request.getRequestDispatcher(errorJsp).forward(request, response);
return; //return在这里很重要;
}