[英]Spring MVC and Spring WS dispatcher servlet configuration in one web application
[英]Spring MVC Java based configuration - Not detecting servlet dispatcher
我正在編寫一個Spring MVC Web應用程序。 我正在嘗試使用基於Java的配置來配置Spring,但是Spring無法在不添加其他XML配置的情況下檢測到我的控制器。
我的前端控制器類如下所示:
package no.magnus.controller;
public class FrontController extends
AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] {MvcConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return null;
}
@Override
protected String[] getServletMappings() {
return new String[] {"/"};
}
}
我的MVC配置類:
package no.magnus.config;
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"no.magnus"})
public class MvcConfig implements WebMvcConfigurer {
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver vr = new InternalResourceViewResolver();
vr.setSuffix(".jsp");
return vr;
}
}
一個簡單的家庭控制器:
package no.magnus.controller;
@Controller
public class HomeController {
@RequestMapping("/home")
public ModelAndView index() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("index");
return modelAndView;
}
}
嘗試訪問URL http:// localhost:8080 / home,我收到404錯誤。 如果我將基於XML的配置添加到web.xml以及xml servlet配置中,則會檢測到主控制器並返回index.jsp。
子集web.xml:
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
dispatcher-servlet.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ctx="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<ctx:annotation-config/>
<ctx:component-scan base-package="no.magnus"/>
</beans>
http:// localhost:8080 / home index.jsp成功返回!
我的期望是Spring MVC將能夠從Java代碼檢測Spring MVC配置,從而使上述XML配置變得多余。 請澄清一下我的理解是否正確。 '
謝謝!
編輯1:應用克里斯建議的代碼更改。 目前有新期刊。 僅使用Java配置仍不會返回index.jsp。
├───java
│ └───no
│ └───magnus
│ ├───config
│ │ MvcConfig.java
│ │
│ └───controller
│ FrontController.java
│ HomeController.java
│
└───webapp
│ result.jsp
│
└───WEB-INF
│ web.xml
│
└───jsp
index.jsp
http:// localhost:8080 / home不會調用HomeController
的index()
Method(/ home-Mapping)-在發布的url中, home
是您的應用程序的名稱,您需要映射以"/"
進行索引。 jsp。
請將您的FrontController
更改為:
package no.magnus.config;
public class FrontController extends
AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
// from
// return new Class[] {MvcConfig.class};
// to
return null;
}
@Override
protected Class<?>[] getServletConfigClasses() {
// from
// return null;
// to
return new Class[] {MvcConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[] {"/"};
}
}
您的MvcConfig應該如下所示:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@EnableWebMvc
@Configuration
// to also scan subpackages for components
@ComponentScan("no.magnus.**")
public class MvcConfig
implements
WebMvcConfigurer {
@Override
public void configureDefaultServletHandling(final DefaultServletHandlerConfigurer configurer) {
configurer.enable();
WebMvcConfigurer.super.configureDefaultServletHandling(configurer);
}
@Override
public void configureViewResolvers(final ViewResolverRegistry registry) {
registry.viewResolver(this.jspViewResolver());
WebMvcConfigurer.super.configureViewResolvers(registry);
}
@Bean
public InternalResourceViewResolver jspViewResolver() {
final InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setOrder(1);
// jsp-location!!! - please change it to where your jsp's are located
viewResolver.setPrefix("/WEB-INF/jsp/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
}
並且您的HomeController
應該如下所示:
package no.magnus.controller;
@Controller("HomeController")
public class HomeController {
// for the very first start
// RequestMapping can be replaced with GetMapping
@GetMapping("/")
public ModelAndView index() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("index");
return modelAndView;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.