SpringMVC的基本配置与使用

SpringMVC的基本配置与使用
一、
1、导包:除了spring的5个基本jar外加入
spring-web-.jar
spring-webmvc-
.jar

2、Springmvc核心组件:
核心控制器:DispatcherServlet(web.xml当中配置)
控制器: Controller
处理映射器:HandlerMapping
视图解析器:ViewResolver
拦截器: Interceptors

DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,负责职责的分派,且与Spring IoC容器无缝集成,从而可以获得Spring的所有好处。

DispatcherServlet主要用作职责调度,主要职责如下:
a、文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析;
b、通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor拦截器);
c、通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器);
d、通过ViewResolver解析逻辑视图名到具体视图实现;
e、本地化解析;
f、如果执行过程中遇到异常将交给HandlerExceptionResolver来解析。

3、web.xml配置(安装了springtools插件alt+/可以直接提示)

<servlet>
 <servlet-name>hello</servlet-name>
 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>

默认:

servletName-servlet.xml:即hello-servlet.xml,修改方式:
<init-param>
 <param-name>contextConfigLocation</param-name>
 <!-- 多个文件使用通配符: *-servlet.xml -->
 <param-value>/WEB-INF/hello-servlet.xml(classpath:xxx.xml)</param-value>
</init-param>
<servlet-mapping>
        <servlet-name>hello</servlet-name>
        <!-- 直接使用/(不必/*,这样会拦截*.jsp请求) -->
        <url-pattern>/</url-pattern>
</servlet-mapping>

4、MVC配置文件:


<!-- Handler Mapping -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!-- Controller(通过beanName完成url映射,必须加'/') -->
<bean name="/start" class="com.cssl.mvc.StartController"/>

<!-- 视图解析器ViewResolver -->
<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
 <property name="prefix" value="/WEB-INF/jsp/"></property>
 <property name="suffix" value=".jsp"></property>
 <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
</bean>

<!-- 相对UrlBasedViewResolver对jsp和jstl提供了更好的支持,不需要配置viewClass -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 <property name="prefix" value="/WEB-INF/jsp/"></property>
 <property name="suffix" value=".jsp"></property>
</bean>

Spring2.5之前,我们都是通过实现Controller接口或其实现类来定义我们的控制器类。

5、使用注解:配置少 低侵入(无需配置HandlerMapping、ViewResolver)

<context:component-scan base-package="com.cssl"/>
<mvc:annotation-driven/>:

自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter两个bean,是springMVC为Controller分发请求的Bean
视图解析:mav.setViewName(“forward:success.jsp”|“success”);

常用注解:
类上:@Controller | @RestController(4.0+) | @ControllerAdvice
//将所有属性为UsersVo类型和键名是usersVoList的集合存入request的同时存入session作用域
@SessionAttributes(types=UsersVo.class,value|names={“usersVoList”})两者是or关系
//写在类上相当于namespace
@RequestMapping("/parent")
//或者结合方法上注解@RequestMapping(params=“method=方法名”)绑定该类下某个方法来执行
@RequestMapping("/user.do") 表单提交action=user.do?method=reg
如:@RequestMapping(params=“method=reg”)public String reg(String uname){ … }

方法:@RequestMapping(value={"/a","/hello"},method=RequestMethod.GET,params="…")
对于相同value的@RequestMapping可以通过method或params区别调用不同方法
对于无返回值或返回Model的方法默认视图就是这里的value,如@RequestMapping("/hello")就是hello.jsp
@GetMapping("/…")|@PostMapping("/…")(从Spring4.3开始)
不要只写@RequestMapping,将拦截所有请求

  Spring 3.X系列增加了新注解@ResponseBody,@RequestBody      
  @ResponseBody将内容或对象作为HTTP响应正文返回,并调用适合HttpMessageConverter转换对象,写入输出流     
  @ResponseBody绑定返回对象或集合,帮你将其转为Json字符串(默认jackson的2个包struts2中找1.9x,Spring4.0以上版本需要Jackson新版本2.x以上的3个包)
  @ModelAttribute
  @ExceptionHandler

参数:@RequestParam(name|value=“sid”,required=false) int id
@RequestBody将HTTP请求正文转换为Json对象。request header Content-Type格式必须application/json或application/xml
@PathVariable 用于restful风格
@CookieValue(name|value=“id”,required=false) 取cookie值 @CookieValue(name=“JSESSIONID”)
@RequestHeader(name|value=“id”,required=false) 取请求头信息
@ModelAttribute(“user”)通常和@SessionAttributes(“user”)一起使用直接注给方法形参,也可以给模型添加属性(model.addAttribute(user))[两个注解要在同一个类中]
如:
在Controller上指定了@SessionAttributes,所以在@ModelAttribute(“xxx”)注解的参数会直接在@SessionAttributes中查找名为"xxx"的对象,如果没有找到则调用@ModelAttribute(“xxx”)注解的方法返回对象并存入@SessionAttributes

方法返回值:String(视图名),Model,ModelMap,ModelAndView,Set,List,Object,Map…
除了返回String和ModelAndView,逻辑视图名都会和请求URL绑定
ModelAndView: addObject(“uu”,user)
addObject(new User())==addObject(“user”,new User()) 使用类名首字母小写作为键
addObject(new ArrayList)==add
Object(“userList”,new ArrayList)
addObject(“username”)==addObject(“string”,“username”) 类型名首字母小写作为键
如果返回Map、Model、ModelMap到前台,页面直接取键名
如果将对象或集合当作方法返回值前台页面取值规则也同上!

访问到静态的文件:(如jpg,js,css)
如果DispatcherServlet拦截 .action这样的URL,就不存在访问不到静态资源的问题。如果拦截“/”,那么就拦截了所有的请求,即.js,.jpg,.css的访问也就被拦截了

解决方法引入资源:

<mvc:resources location="/static/" mapping="/static/**"/>

(注意’/’)
(静态资源直接映射到对应的文件夹,不被DispatcherServlet处理,3.04新增功能,需要重新设置spring-mvc-3.x.xsd)
或者:

//放行所有static资源
<mvc:default-servlet-handler/>

解决中文乱码过滤器:(POST)
在web.xml中加入

<filter>
 <filter-name>encodingFilter</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>
</filter> 
<filter-mapping>
 <filter-name>encodingFilter</filter-name>
 <url-pattern>/*</url-pattern>
</filter-mapping>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值