例子:

a.jsp中:
   <form action="NewsServlet?add=addnews" method="post">
  <input type="submit" value="aa">
  </form>

NewsServlet.java中

@Override
 public void doPost(HttpServletRequest req,HttpServletResponse resp)
 throws IOException,ServletException
 {
 
  resp.setContentType("text/html;charset=gbk");//设置页面响应 
  String action=req.getParameter("action");   接收b.jsp中的参数

 String add=req.getParameter("add");  接收a.jsp中的参数

if(add.equals("addnews"))

{

  resp.getWriter().print("addxxxxxxxxxxxxxxxxxxxx");

}
  if(action.equals("del"))
  {
   String id=req.getParameter("id");
   conn.del(id);
   forward("newsedit.jsp",req,resp);
  }

 }
 当访问a.jsp 中表单时 本应该跳转到servlet执行打印addxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

错误提示:出现空指针异常。

错误原因:当通过a.jsp访问servlet时接收了一个参数String add=req.getParameter("add"); 

而b.jsp中没有接收到参数 但是后面的判断中有 if(action.equals("del"))  因为没有初始化 所以会报空指针异常

解决办法1:每个servlet对应同一种处理逻辑 (即每个页面一个servlet)---这样不好servlet类较多

解决办法2: 每个jsp中传参数的时候多添加个相同参数(如action)再添加其他参数(如需要)  然后再servlet中的每个if语句中都先判断action 看是哪一个执行逻辑

如下: 

a.jsp中:
   <form action="NewsServlet?action=addnews" method="post">
  <input type="submit" value="aa">
  </form>

NewsServlet.java中

@Override
 public void doPost(HttpServletRequest req,HttpServletResponse resp)
 throws IOException,ServletException
 {
 
  resp.setContentType("text/html;charset=gbk");//设置页面响应 
  String action=req.getParameter("action"); //处理页面请求  获得参数
     
  if(action.equals("del"))
  {
   String id=req.getParameter("id");
   conn.del(id);
   forward("newsedit.jsp",req,resp);
  }else if(action.equals("addnews"))
  {
   resp.getWriter().print("addxxxxxxxxxxxxxxxx");
  }
 }
 

posted on 2013-05-18 00:50  小影~~~  阅读(851)  评论(0编辑  收藏  举报