5

Spring を使用して JSP をレンダリングしています。私の URL パターンDispatcherServletは「/」です。これにより、welcome-file-list が考慮されないようになっているようです。私は実際にはDispatcherServlet「/」以外のすべてを処理したいと考えています。ただし、ファイル名の拡張子 (*.html、 .do など) はInternalResourceViewResolver避けたいので、. を使用しているため、ディスパッチャー サーブレットの url-pattern を "/ " に設定すると、受け入れすぎます (例:生成されるJSP ページの内部要求はInternalResourceViewResolver、ディスパッチャ サーブレットによってインターセプトされ、/WEB-INF/jsp/about.jsp のマッピングがないため、エラーがスローされます。何か助けていただければ幸いです - 私はSpring初めてです(例:2日;-))

適切なファイルは次のとおりです。

ディレクトリ構造

/war (I'm using AppEngine)
  index.jsp (Simply includes WEB-INF/jsp/index.jsp)
  /WEB-INF
    XML Config files

    /jsp
      index.jsp
      about.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"
version="2.5">

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<!--
    We purposefully do not make this /*. The convention here is to define
    mappings for files that exist, and write a good 404 page for anything
    else. Also, if you say /*, then the dispatcher servlet will intercept
    all requests, and the InternalResourceViewResolver will fail to
    resolve internal resources (e.g. jsp pages) because the dispatcher
    servlet will be intercepting all of the requests, even the internal
    ones
-->
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

</web-app>

dispatcher-servlet.xml

<!-- Search for and import all components in the controllers package -->
<context:component-scan base-package="org.foo.server.controllers" />


<bean name="viewResolver" class="org.springframework.web.servlet.view.XmlViewResolver">
    <property name="order" value="2" />
    <property name="location" value="/WEB-INF/views.xml" />
</bean>

<bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="100000" />
</bean>


<!--
    Given an arbitrary view name, such as 'about, that has been returned
    from a handler (controller), this will simply create
    '/WEB-INF/jsp/about.jsp' and send that to the Dispatcher Servlet.
    Because of the way ViewResolvers are chained (e.g. search until a View
    is found), coupled with the annoyance that this ViewResolver cannot
    determine if a View is found, this *has* to be the last ViewResolver
    considered, so I have set the order very high. See
    http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-viewresolver-chaining
    for more details
-->
<bean id="jspResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass"
        value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />
    <property name="order" value="999" />
</bean>

JSP コントローラー (org.foo.server.controllers" パッケージに含まれるコントローラーの 1 つ)

@Controller
public class WebportalController {
@RequestMapping(value = "/myforms", method = RequestMethod.GET)
public String getMyForms() {
    return "myforms";
}

@RequestMapping(value = "/about", method = RequestMethod.GET)
public String getAbout() {
    return "about";
}
... etc (for now all of the JSP pages are fairly static)
}
4

1 に答える 1

1

私がこれを回避した方法は、dipatcher サーブレットにいくつかのプレフィックスを付け、そのプレフィックスを持つすべてのもの (拡張機能を含む) をそれに転送することです。私の場合、私は使用webappし、その後などのような他の第1レベルのディレクトリがありimagesました。これが、これを機能させるために私が見つけた唯一の方法です(URLの書き換えを除く)。さらに、必要に応じて、URL 書き換えエンジンを使用しwebappて、拡張子のない from リクエストなどを削除することもできます。

于 2011-04-25T13:06:24.997 に答える