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 对象来标识您想要序列化到响应主体的资源。