例子:
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");
}
}