Java从两个源调用一个servlet

Java从两个源调用一个servlet,java,jsp,servlets,Java,Jsp,Servlets,我正在制作一个带有用户配置文件的Java web应用程序。 我有一个profileServlet,它负责呈现两个页面:profile.jsp和editProfile.jsp 调用profileServlet的第一个源是页面顶部的菜单链接,如下所示: 第二个源是profile.jsp中的编辑按钮: 现在在profileServlet中,根据要重定向到profile.jsp或editProfile.jsp的参数值。代码如下: ifrequest.getParameterparam.equalsp

我正在制作一个带有用户配置文件的Java web应用程序。 我有一个profileServlet,它负责呈现两个页面:profile.jsp和editProfile.jsp 调用profileServlet的第一个源是页面顶部的菜单链接,如下所示:

第二个源是profile.jsp中的编辑按钮:

现在在profileServlet中,根据要重定向到profile.jsp或editProfile.jsp的参数值。代码如下: ifrequest.getParameterparam.equalsprofile{ response.sendRedirectprofile.jsp; }else if request.getParameterparam.equalseditProf{ response.sendRedirecteditProfile.jsp; }

但我一直得到java.lang.NullPointerException。 你能帮忙吗

堆栈跟踪:

24.04.2014 11:44:30 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [profilePage.profileServlet] in context with path [/LinkedIn] threw exception
java.lang.NullPointerException
    at profilePage.profileServlet.doGet(profileServlet.java:126)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
您的请求参数param可能为null,您可以像下面这样做,或者在使用变量之前进行适当的null检查

if ("profile".equals(request.getParameter("param")) {
    response.sendRedirect("profile.jsp");
} else if ("editProf".equals(request.getParameter("param")) {
    response.sendRedirect("editProfile.jsp");
}
此外,确保代码放在各自的doGet/doPost处理程序中,或者两者都有一个处理程序

例如:


提交表单时应该使用post请求,并且有两种不同的处理程序方法。
GET返回空表单,POST处理提交的表单。

最好添加空检查。看起来您无法获取param


您能提供stacktrace吗?@qazerty23在这里发布您的完整堆栈跟踪。请稍等。@qazerty23 profileServlet.java:126是此行ifrequest.getParameterparam。equalsprofile@AniketThakur Wat这个请求!=null请求对象永远不会为null。匆忙打字。为request.getParameterparam添加空检查。编辑了答案。应用完这段代码后,我停下来获取错误,重定向到profile.jsp工作正常。然而,当我尝试调用editProfile.jsp时,我只得到1@epochd避免表单操作属性中的查询参数param,而将其作为隐藏表单输入是否也有意义?@Shiraaz.M,就可维护性而言,这是一个更好的选择,是的,但这没有什么区别,直到只得到1:@epoch,这是什么原因?当我将方法从GET改为POST时,它终于起作用了。谢谢@epoch
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    handleGetAndPost(request, response);
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
    handleGetAndPost(request, response);
}

private void handleGetAndPost(HttpServletRequest request, HttpServletResponse response) {
   if ("profile".equals(request.getParameter("param")) {
       response.sendRedirect("profile.jsp");
   } else if ("editProf".equals(request.getParameter("param")) {
       response.sendRedirect("editProfile.jsp");
   } 
}
    if (request.getParameter("param") != null && request.getParameter("param").equals("profile")) {
        response.sendRedirect("profile.jsp");
    } else if (request.getParameter("param") != null && request.getParameter("param").equals("editProf")) {
        response.sendRedirect("editProfile.jsp");
    }