1

Maven + spring + hibernate を使用して xml-free ファイル webapp を構築し、Minimal Tomcat 7 埋め込みの例から始めました

アプリケーション構造:

webapp
  |_src/main/java
  |  |_com.myapp.test
  |    |_Main.java
  |    |_HelloController.java
  |    |_MvcConfig.java
  |_src/main/resources
  |  |_hello.jsp
  |_src/test/java
  |_src/test/resources

HelloController.java

@Controller
@RequestMapping("/welcome")
public class HelloController {
@RequestMapping(method = RequestMethod.GET)
public String printWelcome(ModelMap model) {
    model.addAttribute("message", "Spring 3 MVC Hello World");
    return "hello";
}

MvcConfig.java

@Configuration
@EnableWebMvc
public class MvcConfig {
    @Bean
    public InternalResourceViewResolver configureInternalResourceViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
}

スプリング機能を追加しようとしている間Main.java

Tomcat tomcat = new Tomcat();
tomcat.setPort(9090);
File base = new File("");
System.out.println(base.getAbsolutePath());
Context rootCtx = tomcat.addContext("", base.getAbsolutePath());            
AnnotationConfigWebApplicationContext aactx = new AnnotationConfigWebApplicationContext();
aactx.scan("com.myapp");
aactx.register(MvcConfig.class);
DispatcherServlet dispatcher = new DispatcherServlet(ctx);
Tomcat.addServlet(rootCtx, "SpringMVC", dispatcher);
rootCtx.addServletMapping("/*", "SpringMVC");
tomcat.start();

localhost:9090/welcome.jsp次に、組み込みサーバーをチェックアウトするときにこのエラーが発生しました

Jun 04, 2013 4:34:39 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/hello.jsp] in DispatcherServlet with name 'SpringMVC'
Jun 04, 2013 5:00:38 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/favicon.ico] in DispatcherServlet with name 'SpringMVC'

このエラーが発生した理由と解決方法を教えてください。

前もって感謝します!

4

3 に答える 3

0

「/」に設定したサフィックスは相対的な「WEB-INF」であると確信しています。webapp/src/main/webapp/WEB-INF/ を作成して、そこに hello.jsp を配置してみてください。

于 2013-06-04T14:45:02.160 に答える
0

始める前に、@RobBarreca が指摘する調整を行ってください。ctx ではなく aactx である必要があります。

組み込み Tomcat (7.0) で Spring を実行する場合、addContext と addWebapp の 2 つのオプションがあります。後者は実際に開始するための推奨される方法ですが、 addContext はより高度であり、制御ルートが必要です。addContext を使用しても問題ありませんが、指定する必要がある構成情報が他にもありますそして、この回答では addContext に焦点を当てます。

上記の 1 つの部分だけが欠けていますが、それは JSP ファイルに使用されるサーブレット クラスですか? おそらくwelcome.jspというファイルがあり、正しい場所にあると思います。ただし、上記のコードは、コントローラーを正しく処理する方法のみを示しています。

JSP ファイルを処理するために追加する必要があるコードは次のとおりです。

Wrapper jspServlet = rootCtx.createWrapper();
jspServlet.setName("jsp");
jspServlet.setServletClass("org.apache.jasper.servlet.JspServlet");
jspServlet.addInitParameter("fork", "false");
jspServlet.addInitParameter("xpoweredBy", "false");
jspServlet.setLoadOnStartup(2);
rootCtx.addChild(jspServlet);
rootCtx.addServletMapping("*.jsp", "jsp");

実際には、2 番目のことが必要です。それは、SpringMVC のサーブレット マッピングを変更することです。そのはず

rootCtx.addServletMapping("/", "SpringMVC");

スターを付けた場合、新しい JspServlet サーブレット クラスが追加されたとしても、それができない jsp を処理しようとする可能性があります。

これで問題なく動作しますが、実際に提供するコンテンツによっては、MvcConfig.java でビュー クラスを指定することで、さらに改善する必要があります。たとえば、次のようにすると、jstl コンテンツを処理できるようになります。

resolver.setViewClass(JstlView.class);

しかし、View Class の設定が望ましいケースは他にもたくさんあります。

于 2014-04-16T16:06:14.947 に答える
0

変更するとどうなりますか

File base = new File("");

File base = new File("src/main/resources");
于 2013-07-18T00:25:22.637 に答える