SpringMVC 与表单提交(post/put/delete的用法)

为了迎合Restful风格,提供的接口可能会包含:put、delete提交方式。在springmvc中实现表单以put、delete方式提交时,需要使用HiddenHttpMethodFilter过滤器。该过滤器的实现原理,默认在form表单内部定义一个hidden隐藏的标签,默认需要标签名为:_method,hidden标签的value为put或delete;过滤器会接收_method的hidden标签的value,如果发现存在_method的标签,并且value为put或delete时,会重新包装一个请求,请求类型会设置为_method标签的value值。进而实现将post方式提交表单转化为Delete或Put请求。

实现form post表当以put或delete方式提交的步骤包含以下:

idea下创建一个pom.xml工程:

SpringMVC(十四):SpringMVC 与表单提交(post/put/delete的用法);form属性设置encrypt='mutilpart/form-data'时,如何正确配置web.xml才能以put方式提交表单

 创建完后,工程结构如下:

SpringMVC(十四):SpringMVC 与表单提交(post/put/delete的用法);form属性设置encrypt='mutilpart/form-data'时,如何正确配置web.xml才能以put方式提交表单

设置web.xml配置如下:

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>springmvcdemo</display-name>
    <welcome-file-list>
        <welcome-file>/index</welcome-file>
    </welcome-file-list>

    <!--结束后端数据输出到前端乱码问题-->
    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
        <!--可以通过配置覆盖默认'_method'值 -->
        <init-param>
            <param-name>methodParam</param-name>
            <param-value>_method</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <servlet>
        <servlet-name>myAppServletName</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/applicationContext.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>myAppServletName</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

此时在WEB-INF下还需要新建一个applicationContext.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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--扫描所有的 spring包下的文件;-->
    <!--当然需要在spring配置文件里面配置一下自动扫描范围
    <context:component-scan base-package="*"/>
    *代表你想要扫描的那些包的目录所在位置。Spring 在容器初始化时将自动扫描 base-package 指定的包及其子包下的所有的.class文件,
    所有标注了 @Repository 的类都将被注册为 Spring Bean。
    -->
    <context:component-scan base-package="com.dx.test"/>
    <!--新增加的两个配置,这个是解决406问题的关键-->
    <!--mvc注解驱动(可代替注解适配器与注解映射器的配置),默认加载很多参数绑定方法(实际开发时使用)-->
    <context:annotation-config/>
    <mvc:annotation-driven/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/> <property name="contentType" value="text/html;charset=UTF-8" /> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> </bean> <!--自己后加的,该BeanPostProcessor将自动对标注@Autowired的bean进行注入--> <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"></bean> <bean id="restTemplate" class="org.springframework.web.client.RestTemplate"> <property name="messageConverters"> <list> <!--<ref bean="stringHttpMessageConverter"/>--> <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/> <bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/> <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"/> <bean class="org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter"/> <!-- <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/> --> </list> </property> </bean> </beans>

配置pom.xml引入依赖如下:

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 
  3 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5     <modelVersion>4.0.0</modelVersion>
  6 
  7     <groupId>com.dx.test</groupId>
  8     <artifactId>demo</artifactId>
  9     <version>1.0-SNAPSHOT</version>
 10     <packaging>war</packaging>
 11 
 12     <name>demo Maven Webapp</name>
 13     <!-- FIXME change it to the project's website -->
 14     <url>http://www.example.com</url>
 15 
 16     <properties>
 17         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 18         <maven.compiler.source>1.8</maven.compiler.source>
 19         <maven.compiler.target>1.8</maven.compiler.target>
 20         <!--Spring版本号-->
 21         <spring.version>5.2.0.RELEASE</spring.version>
 22         <!--jstl标签库-->
 23         <jstl.version>1.2</jstl.version>
 24         <standard.version>1.1.2</standard.version>
 25     </properties>
 26 
 27     <dependencies>
 28         <!-- servlet相关
 29         <dependency>
 30             <groupId>javax.servlet</groupId>
 31             <artifactId>servlet-api</artifactId>
 32             <version>2.5</version>
 33             <scope>provided</scope>
 34         </dependency>
 35          -->
 36         <dependency>
 37             <groupId>javax.servlet</groupId>
 38             <artifactId>javax.servlet-api</artifactId>
 39             <version>3.0.1</version>
 40             <scope>provided</scope>
 41         </dependency>
 42 
 43         <!--form 设置为enctype="multipart/form-data",多文件上传,在applicationContext.xml中配置了bean multipartResolver时,需要依赖该包。-->
 44         <dependency>
 45             <groupId>commons-fileupload</groupId>
 46             <artifactId>commons-fileupload</artifactId>
 47             <version>1.4</version>
 48         </dependency>
 49 
 50         <dependency>
 51             <groupId>commons-io</groupId>
 52             <artifactId>commons-io</artifactId>
 53             <version>2.5</version>
 54         </dependency>
 55 
 56         <!--spring单元测试依赖-->
 57         <dependency>
 58             <groupId>org.springframework</groupId>
 59             <artifactId>spring-test</artifactId>
 60             <version>${spring.version}</version>
 61             <scope>test</scope>
 62         </dependency>
 63 
 64         <!--springMVC核心包-->
 65         <dependency>
 66             <groupId>org.springframework</groupId>
 67             <artifactId>spring-webmvc</artifactId>
 68             <version>${spring.version}</version>
 69         </dependency>
 70 
 71         <!--spring核心包-->
 72         <dependency>
 73             <groupId>org.springframework</groupId>
 74             <artifactId>spring-core</artifactId>
 75             <version>${spring.version}</version>
 76         </dependency>
 77 
 78         <dependency>
 79             <groupId>org.springframework</groupId>
 80             <artifactId>spring-beans</artifactId>
 81             <version>${spring.version}</version>
 82         </dependency>
 83 
 84         <dependency>
 85             <groupId>org.springframework</groupId>
 86             <artifactId>spring-context</artifactId>
 87             <version>${spring.version}</version>
 88         </dependency>
 89 
 90         <dependency>
 91             <groupId>org.springframework</groupId>
 92             <artifactId>spring-context-support</artifactId>
 93             <version>${spring.version}</version>
 94         </dependency>
 95 
 96         <dependency>
 97             <groupId>org.springframework</groupId>
 98             <artifactId>spring-aop</artifactId>
 99             <version>${spring.version}</version>
100         </dependency>
101 
102         <dependency>
103             <groupId>org.springframework</groupId>
104             <artifactId>spring-aspects</artifactId>
105             <version>${spring.version}</version>
106         </dependency>
107 
108         <dependency>
109             <groupId>org.springframework</groupId>
110             <artifactId>spring-tx</artifactId>
111             <version>${spring.version}</version>
112         </dependency>
113 
114         <dependency>
115             <groupId>org.springframework</groupId>
116             <artifactId>spring-web</artifactId>
117             <version>${spring.version}</version>
118         </dependency>
119 
120         <dependency>
121             <groupId>org.springframework</groupId>
122             <artifactId>spring-jdbc</artifactId>
123             <version>${spring.version}</version>
124         </dependency>
125 
126         <!--AOP begin-->
127         <dependency>
128             <groupId>org.aspectj</groupId>
129             <artifactId>aspectjrt</artifactId>
130             <version>1.8.13</version>
131         </dependency>
132 
133         <dependency>
134             <groupId>org.aspectj</groupId>
135             <artifactId>aspectjrt</artifactId>
136             <version>1.8.13</version>
137         </dependency>
138 
139         <dependency>
140             <groupId>cglib</groupId>
141             <artifactId>cglib</artifactId>
142             <version>3.2.5</version>
143         </dependency>
144         <!--AOP end-->
145 
146         <!--json依赖-->
147         <dependency>
148             <groupId>org.codehaus.jackson</groupId>
149             <artifactId>jackson-core-asl</artifactId>
150             <version>1.5.2</version>
151         </dependency>
152         <dependency>
153             <groupId>org.codehaus.jackson</groupId>
154             <artifactId>jackson-mapper-asl</artifactId>
155             <version>1.5.2</version>
156         </dependency>
157 
158         <!--jstl库-->
159         <dependency>
160             <groupId>javax.servlet</groupId>
161             <artifactId>jstl</artifactId>
162             <version>${jstl.version}</version>
163             <scope>runtime</scope>
164         </dependency>
165         <dependency>
166             <groupId>taglibs</groupId>
167             <artifactId>standard</artifactId>
168             <version>${standard.version}</version>
169         </dependency>
170 
171         <dependency>
172             <groupId>junit</groupId>
173             <artifactId>junit</artifactId>
174             <version>4.11</version>
175             <scope>test</scope>
176         </dependency>
177     </dependencies>
178 
179     <build>
180         <finalName>demo</finalName>
181         <plugins>
182             <!-- 配置Tomcat插件 -->
183             <plugin>
184                 <groupId>org.apache.tomcat.maven</groupId>
185                 <artifactId>tomcat7-maven-plugin</artifactId>
186                 <version>2.2</version>
187                 <configuration>
188                     <port>9090</port>
189                     <path>/</path>
190                     <uriEncoding>UTF-8</uriEncoding>
191                     <server>tomcat7</server>
192                 </configuration>
193             </plugin>
194         </plugins>
195         <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
196             <plugins>
197                 <plugin>
198                     <artifactId>maven-clean-plugin</artifactId>
199                     <version>3.1.0</version>
200                 </plugin>
201                 <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
202                 <plugin>
203                     <artifactId>maven-resources-plugin</artifactId>
204                     <version>3.0.2</version>
205                 </plugin>
206                 <plugin>
207                     <artifactId>maven-compiler-plugin</artifactId>
208                     <version>3.8.0</version>
209                 </plugin>
210                 <plugin>
211                     <artifactId>maven-surefire-plugin</artifactId>
212                     <version>2.22.1</version>
213                 </plugin>
214                 <plugin>
215                     <artifactId>maven-war-plugin</artifactId>
216                     <version>3.2.2</version>
217                 </plugin>
218                 <plugin>
219                     <artifactId>maven-install-plugin</artifactId>
220                     <version>2.5.2</version>
221                 </plugin>
222                 <plugin>
223                     <artifactId>maven-deploy-plugin</artifactId>
224                     <version>2.8.2</version>
225                 </plugin>
226             </plugins>
227         </pluginManagement>
228     </build>
229 </project>
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-29
  • 2022-12-23
  • 2022-12-23
  • 2021-12-21
猜你喜欢
  • 2022-12-23
  • 2022-03-03
  • 2021-11-19
  • 2021-11-19
  • 2021-04-20
  • 2021-06-25
相关资源
相似解决方案