我正在阅读一本教程书,用J2EE开发一个CRUD Web应用程序,现在它开始使用HttServlet
。可能是这本书不是很新,或者我真的不知道怎么做。
我有我的控制器类,如下所示:
public class Controller extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
RequestDispatcher dispatcher = null;
Action action = null;
if (request.getServletPath().equals("/Insert.do")) {
action = new InsertAction();
} else if (request.getServletPath().equals("/Delete.do")) {
action = new DeleteAction();
.....
} else {
action = new FilterShowAction();
}
dispatcher = request.getRequestDispatcher(action.execute(request, response));
dispatcher.forward(request, response);
}
}
本教程让我为每个不同的CRUD动作,表单和更多东西创建一个新的不同类。
这是Action
类:
public abstract class Action {
public abstract String execute(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException;
}
但是当我输入localhost:8080/myapp/Controller/SomeAction.do
时,我收到错误404.只有当我键入localhost:8080/myapp/Controller
时,我才会得到其他内容:执行doGet
方法中的最后一个else块;无论如何,我得到了NullPointerException
。
我不知道如何正确地做这件事,而且这本书没有提供更多信息。我无法在其他任何地方找到解决方案。
另外,我没有说明.do
扩展名是什么。这本书刚刚提出它并让你将它包含在你的代码中,而不解释它是什么。我也没有在互联网上找到任何信息。
非常感谢任何帮助。
修改
的web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>Controller</servlet-name>
<display-name>Controller</display-name>
<servlet-class>mypackage.Controller</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Controller</servlet-name>
<url-pattern>Controller</url-pattern>
</servlet-mapping>
<error-page>
<exception-type>java.lang.RuntimeException</exception-type>
<location>/Error.jsp</location>
</error-page>
</web-app>