7

Google、stackoverflow、および数日間見ることができるすべてのフォーラムを精査しましたが、キーボードが頭突きの標的になる危険性が非常に高くなっています。

XML を使用しないセットアップで非常に小さな Spring 3.1 MVC を実行しています。問題は、起動すると見えることです。

INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/start.action],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.web.servlet.ModelAndView com.xxxxxx.info.HomeController.start(javax.servlet.http.HttpServletRequest)
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/*],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.web.servlet.ModelAndView com.xxxxxx.info.HomeController.home(java.util.Locale,org.springframework.ui.Model)

それでも、これらの URL のいずれかにアクセスしようとすると、コントローラー内のログ ステートメントが起動し、すぐに取得されます。

INFO : com.xxxxxx.info.HomeController - Welcome home! the client locale is en_US
WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/WEB-INF/jsps/home.jsp] in DispatcherServlet with name 'dispatcher'

ここに私のソースファイルがあります。

初期化子 -

public class Initializer implements WebApplicationInitializer {

    public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigWebApplicationContext mvcContext = new AnnotationConfigWebApplicationContext();
        mvcContext.register(MvcConfig.class);

        ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(mvcContext));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/*");
    }
}

MvcConfig -

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.xxxxxx.info")    
public class MvcConfig {
    @Bean
    public InternalResourceViewResolver configureInternalResourceViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/jsps/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
}

コントローラ -

@Controller
public class HomeController {

    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);

    /** Simply selects the home view to render by returning its name. */
    @RequestMapping(value = "/*")
    public ModelAndView home(Locale locale, Model model) {
        logger.info("Welcome home! the client locale is " + locale.toString());

        Date date = new Date();
        DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
        String formattedDate = dateFormat.format(date);

        model.addAttribute("serverTime", formattedDate);
        return new ModelAndView( "home", model.asMap() );
    }

    @RequestMapping( value = "/start.action")
    public ModelAndView start(HttpServletRequest request) {
        logger.info("Starting!");
        return new ModelAndView( "start", null );
    }
}

私が提案した多くの投稿がそれを完全に壊しているように見えるので、ディスパッチャーマッピングを「/」に変更します。「/」を使用してサーバーを再起動すると、Spring から何も報告されず、何もマップされず、Tomcat の起動ログだけで、他には何も機能しません。

私のファイル構造は -

| com.xxxxxx.info
    - Initializer.java
    - MvcConfig.java
    - HomeController.java
| src
    | main
        | webapp
            | WEB-INF
                | jsps
                    - home.jsp
                    - start.jsp

したがって、コントローラーを正しくヒットしたように見えますが、ビュー名を取得しても正しい場所に解決されません。ここで何が欠けていますか、これは私が見落としていた単純なもののようです...

4

2 に答える 2

2

\*あなたはあなたとあなたの両方に派遣しDispatcherServletていますHomeController

dispatcher.addMapping("/*");

@RequestMapping(value = "/*")
    public ModelAndView home(Locale locale, Model model)

そして、それが問題を引き起こしていると思います。コントローラーのマッピングを次のように変更します

@RequestMapping(value = "/home")
    public ModelAndView home(Locale locale, Model model)

それが役に立てば幸い。

于 2012-11-14T13:20:03.383 に答える
2

jsp は DispatcherServlet によってレンダリングされていると思いますが、同様の質問で説明されています

と の両方で、より具体的なマッピングを使用することを検討する必要がHomeControllerありWebApplicationInitializerます。

于 2012-11-14T13:06:57.813 に答える