当前位置: 代码迷 >> 综合 >> SpringMVC(Spring4)——入门
  详细解决方案

SpringMVC(Spring4)——入门

热度:82   发布时间:2023-12-17 12:30:48.0

1.简介:

Spring为展现层提供的基于MVC设计理念的优秀的Web框架,是目前最主流的的MVC框架之一。

Spring3.0之后超越了Struts2,成为了最优秀的MVC框架。

SpringMVC通过一套MVC注解,让POJO称为处理请求的控制器,而无须实现任何接口。

支持REST风格的URL请求。

采用了松散耦合可插拔组件结构,比其他MVC框架更具拓展性和灵活性。

2.HelloWorld:

步骤:

加入jar包:

– commons-logging-1.1.3.jar

– spring-aop-4.0.0.RELEASE.jar

– spring-beans-4.0.0.RELEASE.jar

– spring-context-4.0.0.RELEASE.jar

– spring-core-4.0.0.RELEASE.jar

– spring-expression-4.0.0.RELEASE.jar– spring-web-4.0.0.RELEASE.jar

– spring-webmvc-4.0.0.RELEASE.jar

在web.xml中配置DispatcherServlet:

DispatcherServlet默认加载/WEB-INF/<servletName-servlet>.xml的Spring配置文件,启动Web层的Spring容器。可以通过contextConfigLocation初始化参数自定义配置文件的位置和名称。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"><!-- 配置 org.springframework.web.filter.HiddenHttpMethodFilter: 可以把 POST 请求转为 DELETE 或 POST 请求 --><filter><filter-name>HiddenHttpMethodFilter</filter-name><filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class></filter><filter-mapping><filter-name>HiddenHttpMethodFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 配置 DispatcherServlet --><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 配置 DispatcherServlet 的一个初始化参数: 配置 SpringMVC 配置文件的位置和名称 --><!-- 实际上也可以不通过 contextConfigLocation 来配置 SpringMVC 的配置文件, 而使用默认的.默认的配置文件为: /WEB-INF/<servlet-name>-servlet.xml--><!--  <init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param>--><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>

加入SpringMVC的配置文件:

<?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.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"><!-- 配置自定扫描的包 --><context:component-scan base-package="com.atguigu.springmvc"></context:component-scan><!-- 配置视图解析器: 如何把 handler 方法返回值解析为实际的物理视图 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"></property><property name="suffix" value=".jsp"></property></bean><!-- 配置视图  BeanNameViewResolver 解析器: 使用视图的名字来解析视图 --><!-- 通过 order 属性来定义视图解析器的优先级, order 值越小优先级越高 --><bean class="org.springframework.web.servlet.view.BeanNameViewResolver"><property name="order" value="100"></property></bean><!-- 配置国际化资源文件 --><bean id="messageSource"class="org.springframework.context.support.ResourceBundleMessageSource"><property name="basename" value="i18n"></property>	</bean><!-- 配置直接转发的页面 --><!-- 可以直接相应转发的页面, 而无需再经过 Handler 的方法.  --><mvc:view-controller path="/success" view-name="success"/><!-- 在实际开发中通常都需配置 mvc:annotation-driven 标签 --><mvc:annotation-driven></mvc:annotation-driven></beans>

编写处理请求的处理器,并标识为处理器:

package com.atguigu.springmvc.handlers;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
public class HelloWorld {/*** 1.使用@RequestMapping注解映射请求的URL* 2.返回值会通过视图解析器解析为实际的物理视图,对于InternalResourceViewResolver会进行如下的解析:* 通过prefix + returnVal + 后缀的方式得到实际的物理视图,然后做转发操作* /WEB-INF/views/success.jsp* * @return*/@RequestMapping("/helloworld")public String hello(){System.out.println("hello world");return "success";}}

编写试图:

package com.atguigu.springmvc.views;import java.util.Date;
import java.util.Map;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Component;
import org.springframework.web.servlet.View;@Component
public class HelloView implements View{@Overridepublic String getContentType() {return "text/html";}@Overridepublic void render(Map<String, ?> model, HttpServletRequest request,HttpServletResponse response) throws Exception {response.getWriter().print("hello view, time: " + new Date());}}

3.使用@RequestMapping:

SpringMVC使用@RequestMapping注解为控制器指定可以处理哪些URL请求,在控制器的类定义及方法定义处都可以标注。

@RequestMapping类定义处:提供初步的请求映射信息。相对于WEB应用的根目录;

方法处:提供进一步的细分映射信息。相对于类定义处的URL。若类定义处未标注@RequestMapping,则方法标记的URL相对于WEB应用的根目录。

DispatcherServlet截获请求后,就通过控制器上的@RequestMapping提供的映射信息确定请求所对应的处理方法。

@RequestMapping("/springmvc")
@Controller
public class SpringMVCTest {private static final String SUCCESS = "success";@RequestMapping("/testRequestMapping")public String testRequestMapping() {System.out.println("testRequestMapping");return SUCCESS;}
}

3.1 映射请求参数,请求方法或请求头:

标准的Http请求报头:

@RequestMapping的value、method、params以及headers分别表示请求URL、请求方法、请求参数及请求头的映射条件。

params和headers支持简单的表达式:

param1:表示请求必须包含param1的请求参数;

!param1:表示请求必须不能包含param1的请求参数;

param1!=value1:表示请求必须包含param1的请求参数,但是值不能未value1;

{"param1=value1","param2"}:表示请求必须包含param1和param2的请求参数且param1的值为value1;

@RequestMapping(value = "/testMethod", method = RequestMethod.POST)public String testMethod() {System.out.println("testMethod");return SUCCESS;
}@RequestMapping(value = "testParamsAndHeaders", params = { "username","age!=10" }, headers = { "Accept-Language=en-US,zh;q=0.8" })public String testParamsAndHeaders() {System.out.println("testParamsAndHeaders");return SUCCESS;
}

@RequestMapping映射请求Ant风格:

资源地址支持3种匹配风格:

?:匹配文件中的一个字符

*:匹配文件中的任意字符

**:匹配多层路径

-/user/*/createUser:

/user/aaa/createUser?/user/bbb/createUser ? URL

–  /user/**/createUser:

/user/createUser?/user/aaa/bbb/createUser ? URL

–  /user/createUser??:

/user/createUseraa?/user/createUserbb ? URL

@RequestMapping("/testAntPath/*/abc")public String testAntPath() {System.out.println("testAntPath");return SUCCESS;
}

4.@PathVariable映射URL绑定的占位符:

带占位符的URL是Spring 3.0新增的功能,该功能在SpringMVC向REST目标挺进发展过程中具有里程碑的意义。

@RequestMapping("/testPathVariable/{id}")public String testPathVariable(@PathVariable("id") Integer id) {System.out.println("testPathVariable: " + id);return SUCCESS;
}

@RequestMapping(value = "/testRest/{id}", method = RequestMethod.PUT)public String testRestPut(@PathVariable Integer id) {System.out.println("testRest Put: " + id);return SUCCESS;}@RequestMapping(value = "/testRest/{id}", method = RequestMethod.DELETE)public String testRestDelete(@PathVariable Integer id) {System.out.println("testRest Delete: " + id);return SUCCESS;}@RequestMapping(value = "/testRest", method = RequestMethod.POST)public String testRest() {System.out.println("testRest POST");return SUCCESS;}@RequestMapping(value = "/testRest/{id}", method = RequestMethod.GET)public String testRest(@PathVariable Integer id) {System.out.println("testRest GET: " + id);return SUCCESS;}

 

  相关解决方案