Java 以HttpServlet作为唯一入口点服务JSP

Java 以HttpServlet作为唯一入口点服务JSP,java,jsp,servlets,Java,Jsp,Servlets,我有一个带有JSP的JavaEE站点,它是用MVC架构建立的。我让servlet指向一个模型对象,我选择了一个servlet,NewspaperServlet,作为HTTP请求的唯一入口点。从那里,我根据需要调用其他servlet。我希望有RESTful URL,所以services up/index.jsp、services/article.jsp和id为1的article对象,等等 我对路径的处理很好,但当实际服务JSP页面时,我会将自己重定向回代码中,因为我尝试检索,比如说,/index.

我有一个带有JSP的JavaEE站点,它是用MVC架构建立的。我让servlet指向一个模型对象,我选择了一个servlet,NewspaperServlet,作为HTTP请求的唯一入口点。从那里,我根据需要调用其他servlet。我希望有RESTful URL,所以services up/index.jsp、services/article.jsp和id为1的article对象,等等

我对路径的处理很好,但当实际服务JSP页面时,我会将自己重定向回代码中,因为我尝试检索,比如说,/index.JSP,并且因为我的代码是唯一的入口点,它会调用我的代码,寻找如何服务/index.JSP!我应该求助于打开文件并输出内容,还是有更明智的方法

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
id="WebApp_ID" version="2.5">
  <display-name>wsd-newspaper</display-name>
  <welcome-file-list>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>


  <servlet>
  <servlet-name>JSP Web Service</servlet-name>
  <servlet-class>
   merus.newspaper.NewspaperServlet
  </servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>

 <servlet-mapping>
  <servlet-name>JSP Web Service</servlet-name>
  <url-pattern>/*</url-pattern>
 </servlet-mapping>

</web-app>
注意:由于我需要使用的模型的特殊性,我要非常小心,不要加载两次。NewspaperServlet创建并初始化其他servlet,因此它也可以是加载模型的唯一类


控制器与servlet是分开的。控制器旨在提供一个web服务,这将需要web.xml中的另一个端点。我不希望有一个端点,因为我需要RESTful url。

将您的url模式更改为

<url-pattern>/</url-pattern>

这将在您的
/

之前匹配,我在这里找不到您引用的JSP处理示例;我看到的绝大多数示例都假设,如果您直接向JSP文件发送请求,它会自动处理,而我不会这样做,因为根据MVC,除了通过控制器之外,我不希望请求进入视图。第12章解释了映射的类型及其检查顺序。您会注意到它在执行扩展映射(
*.wtv
)之前会检查路径映射(
/*
)。如果您使用的是Tomcat,您可以在根
web.xml
中找到注册的
JspServlet
。对于其他容器,它们可能也有一个,您只需找到它。
<url-pattern>/</url-pattern>
<url-pattern>*.jsp</url-pattern>