URL 未与 Spring MVC 映射
URL not getting mapped with Spring MVC
我正在配置一个基本的 Spring MVC 项目,但我不明白为什么 URL 没有被我的控制器捕获。
这是在 web.xml
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
这是 servlet 上下文:
<annotation-driven />
<resources mapping="/resources/**" location="/resources/" />
<beans:bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<context:component-scan base-package="com.lh.mvcex" />
这是家庭控制器
@Controller
public class HomeController {
@RequestMapping(value = { "/", "home", "/home.jsp" }, method = RequestMethod.GET)
public String home_jsp(Locale locale, Model model) {
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,
DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
model.addAttribute("serverTime", formattedDate);
return "home";
}
}
URLs / 和 /home 正确映射到我的 home.jsp 资源,但不是第三个 (home.jsp),这给了我 404。
问题一:为什么?
此外,我想将不利用视图解析器的请求(比方说 /customhome)映射到 return 一个页面,但我希望它映射到 return 普通 html。
问题2:我怎么才能return plain html?
最后,我想映射一个请求(比如 /statichome),该请求 return 是资源文件夹中的一个资源 home.html。
问题3:如何return静态页面?
这个 servlet 映射模式
<url-pattern>/</url-pattern>
是默认的 url 模式。它将匹配任何其他 url-pattern
不匹配的请求。大概您的 Servlet 容器有 servlet-mapping
个
<url-pattern>*.jsp</url-pattern>
因为它的 JSP 处理 servlet。如果所请求的 URL 具有 .jsp
扩展名,这将优先于您的 DispatcherServlet
。
您可以使用 @ResponseBody
和 return 包含 HTML 的 String
。 我不建议这样做。将 Java 与 HTML.
分开
同样使用 @ResponseBody
,您可以 return 一个 Resource
对象来标识您想要序列化到响应主体的资源。
我正在配置一个基本的 Spring MVC 项目,但我不明白为什么 URL 没有被我的控制器捕获。
这是在 web.xml
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
这是 servlet 上下文:
<annotation-driven />
<resources mapping="/resources/**" location="/resources/" />
<beans:bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<context:component-scan base-package="com.lh.mvcex" />
这是家庭控制器
@Controller
public class HomeController {
@RequestMapping(value = { "/", "home", "/home.jsp" }, method = RequestMethod.GET)
public String home_jsp(Locale locale, Model model) {
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,
DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
model.addAttribute("serverTime", formattedDate);
return "home";
}
}
URLs / 和 /home 正确映射到我的 home.jsp 资源,但不是第三个 (home.jsp),这给了我 404。
问题一:为什么?
此外,我想将不利用视图解析器的请求(比方说 /customhome)映射到 return 一个页面,但我希望它映射到 return 普通 html。 问题2:我怎么才能return plain html?
最后,我想映射一个请求(比如 /statichome),该请求 return 是资源文件夹中的一个资源 home.html。 问题3:如何return静态页面?
这个 servlet 映射模式
<url-pattern>/</url-pattern>
是默认的 url 模式。它将匹配任何其他 url-pattern
不匹配的请求。大概您的 Servlet 容器有 servlet-mapping
个
<url-pattern>*.jsp</url-pattern>
因为它的 JSP 处理 servlet。如果所请求的 URL 具有 .jsp
扩展名,这将优先于您的 DispatcherServlet
。
您可以使用 @ResponseBody
和 return 包含 HTML 的 String
。 我不建议这样做。将 Java 与 HTML.
同样使用 @ResponseBody
,您可以 return 一个 Resource
对象来标识您想要序列化到响应主体的资源。