0

問題は次のとおりです。私は自分の見解として顧客を返しています。私のviewresolverによると、WEB-INF/pages/customer.htmlにマップする必要があります。代わりに、ディスパッチャ サーブレットを通過し、顧客の html を見つけることができません。それが与えるエラーは次のとおりです。

これは私のコントローラーです

@Controller
public class CustomerController implements BeanFactoryAware {

    private Customers customers;


    /*public String getCustomer(@RequestParam String name) {

        //ApplicationContext context = new FileSystemXmlApplicationContext("/WEB-INF/springapp-servlet.xml");
        //Customers customers = get
        System.out.println("In Controller");
        return "customer";
    }*/

    @RequestMapping(value="/form")  
    public String getCustomer(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {


            System.out.println("In Customer Controller");
            return "customer";
    }

    @Override
    public void setBeanFactory(BeanFactory context) throws BeansException {
        // TODO Auto-generated method stub
        customers = (Customers)context.getBean("customers");

        //System.out.println(customers);

    }

}

これは私のweb.xmlです

http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<display-name>Spring Web MVC Application</display-name>

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

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/mvc-dispatcher-servlet.xml,/WEB-INF/beans.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

これは私のdispatcher.xmlです


<bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
        <value>/WEB-INF/pages/</value>
    </property>
    <property name="suffix">
        <value>.html</value>
    </property>
</bean>
4

3 に答える 3

0

最終的に呼び出しは次のように RequestDispatcher に送られるため、これは機能しません。

RequestDispatcher dispatcher = httpRequest.getRequestDispatcher("/WEB-INF/pages/test.html");
dispatcher.forward(httpRequest, httpRequest);

この時点で、コンテナは DispatcherServlet がリクエストを再び処理することを期待します(/*パスのため)。それがjspページの場合、コンテナにはマッピングが*.jspあり、それを処理する方法を知っています。

あなたの修正は、あなたのリソースをあなたのWebリソースに関連する場所に配置することです(maven構造の場合はsrc/main/webapp/resources/、このコンテンツのハンドラーを設定します:

<mvc:resources location="/resources/" mapping="/resources/**" />

これで、コントローラーから次のように返すことができます。

return "forward:/resources/mypage.html";

また、「顧客」Bean でルックアップを行っていることがわかります。それを行う必要はなく、代わりに Spring がそれを注入することを期待します。

@Controller
public class CustomerController{

    @Autowired private Customers customers;
于 2012-08-04T14:19:26.810 に答える
0

サーブレット マッピングを次のように変更してみてください。

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
于 2012-08-04T12:53:23.573 に答える
0

サーブレットは、「/*」に一致する URL パターンのすべての呼び出しをインターセプトしますが、Spring コントローラーのいずれかで指定されたマッピングを見つけることができません。

私はかつて同様の問題に直面しましたが、これをどのように克服したかは、すべてのスプリング コールの特定のパターンに従うことでした。例えば、

<url-pattern>*.htm</url-pattern>

これがお役に立てば幸いです。

于 2012-08-04T14:00:51.417 に答える