当前位置: 首页 > 知识库问答 >
问题:

考虑web.xml的Spring MVC配置

罗学林
2023-03-14

我是Spring MVC的新手,想知道实际的流是如何工作的。

我发现很少有Spring MVC的例子,通常每个例子都有额外的重定向ie在web.xml中,welcome-file标记会将控件发送到某个jsp文件,该文件基本上会重定向到与某个域映射的登录表单(例如)。

我遵循的是这个链接中的示例,http://www.dzone.com/tutorials/java/spring/spring-simple-form-controller-1.html

web.xml

<servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.htm</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>redirect.jsp</welcome-file>
    </welcome-file-list>

重定向.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<% response.sendRedirect("userRegistration.htm"); %>

因此,为了避免这种重定向,我改变了我的映射,情况1

<servlet-mapping>
        <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>/*</url-pattern>
</servlet-mapping>
<bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
        <value>WEB-INF/jsp/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
</bean>

<bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
    <props>
        <prop key="/">show</prop>
    </props>
</property>
</bean>

<bean id="show" class="com.jft.common.controller.HelloWorldController">
public HelloWorldController(){
    setCommandClass(Contact.class);
    setCommandName("customerForm");
    setFormView("index");
}
No mapping found for HTTP request with URI [/HelloWorldMVC/WEB-INF/jsp/index.jsp] in DispatcherServlet with name 'mvc-dispatcher'

现在,如果我添加了额外的重定向,并对我的文件进行了如下修改

案例2

web.xml

<welcome-file-list>
    <welcome-file>redirect.jsp</welcome-file>
</welcome-file-list>

重定向.jsp

<% response.sendRedirect("register.html"); %> in redirect

并将我的dispatcher servlet xml文件创建为

<bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
        <value>WEB-INF/jsp/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
</bean>

<bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
    <props>
        <prop key="/register.html">show</prop>
    </props>
</property>
</bean>

<bean id="show" class="com.jft.common.controller.HelloWorldController">

前面的情况是,在再次找到formView名称之后,它会在dispatcher servlet内部找到/helloworldmvc/web-inf/jsp/index.jsp的映射。

在情况1中,我得到的是,

对于dispatcher servlet,我将url模式保留为/*,因此第一个请求将为“localhost:8080/helloworldmvc/”;将被截取,我有一个show的映射,它进入controller并得到页面ie“index”,在应用前缀和后缀之后,它会出现“/helloworldmvc/web-inf/jsp/index.jsp”,现在它又在搜索这个请求的映射,我的问题是为什么它又在搜索?当我通过重定向方式时,这不会发生。

共有1个答案

左翰海
2023-03-14

添加“index.jsp”的映射

<bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
    <props>
        <prop key="/index.jsp">show</prop>
    </props>
</property>
</bean>

在web.xml中,您定义了dispatcher servlet

<servlet-mapping>
        <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>/*</url-pattern>
</servlet-mapping>

这意味着将每个请求发送到spring dispatcher servlet
,而在SimpleURLMapping中(它帮助dispatcher servlet找出映射),您应该提供特定的映射,而不是映射/,即映射所有请求。

 类似资料:
  • 我创建了一个前端vue。以springboot微服务作为后端的js。我正在尝试从前端vue调用后端(在本地网络的另一台pc 192.168.0.10:9090上运行)。js开发服务器(运行localhost:8080)。 我配置了vue.config.js官网链接: 测试2:结果与 测试3:与测试结果相同 我的商店。js 测试2: 我没有成功使用我在vue.config.js.声明的代理 问题:所

  • 假设我的索引有两个文档: “Foo Bar” “Bar Foo” 当我对“bar foo”进行常规匹配查询时,两个文档都正确匹配,但它们获得了相等的相关性分数。然而,我希望单词的顺序在评分时是有意义的。换句话说,我希望“Bar Foo”有更高的分数。 因此,我尝试将match查询放在bool查询的must子句中,并包含一个match_prach(具有相同的查询字符串)作为shoul子句。在我使用“

  • 我对整个Spring的生态系统都是陌生的。我一直在学习一些教程,能够创建一个Spring Boot应用程序并执行crud操作。然后我开始把这个项目改成mybatis的标准。 我已经尝试了许多其他类似问题的答案,但到目前为止没有一个是有效的。 下面是问题陈述: 实现类实现为: 我的Mapper类如下所示: 我的Mapper.xml课是: 最后是我的控制器类: 我得到的错误是: 描述: com.cru

  • 我试图在Spring Boot中创建一个简单的REST服务。在我使用CrudRepository之前,一切都很好。现在我得到了这个错误- ***应用程序启动失败 描述: 公司中的现场er。Spring靴。io。受雇者EmployeeService需要“company”类型的bean。Spring靴。io。受雇者找不到EmployeeRepo“”。 措施: 考虑定义一个“company”类型的bea

  • 我正在做SpringBoot项目,并遵循一些测试SpringBoot的说明。 当我尝试将mysql DB与项目连接时,服务找不到映射器。 我不知道为什么它找不到映射器... 这是服务代码和 这是映射程序代码 下面的错误是 我将发布我的包裹设置的图片。。。