springmvc总结

来源:互联网 发布:什么软件可以炒美股 编辑:程序博客网 时间:2024/05/16 04:15

今天来谈谈springmvc的一些总结

(1)springmvc体系结构是什么?

答:springmvc主要围绕一个dispatcherServlet设立,运行的过程是这样:

1.客户发送一个http请求到web服务器,web服务器检查这个报文的请求行,然后得到里面的url,然后将这个url匹配dispatcherServlet的拦截路径里面,如果匹配则dispatcherServlet得到这个url

2.dispatcherServlet调用自身的handlerMapping(一般其实就是defaultAnnotationHandlerMapping),然后找到对应的handler(如果是dahm的话,那么则是将url跟所有的@requestMapping里面的路径做遍历比较,值得得到匹配之后将这个请求发送到对应的处理器)

3.通过handlerAdapter对handler进行封装,然后再以统一的接口调用这个handler去处理请求

4.处理完请求后,返回一个modelAndView对象到dispatcherServlet,里面包含视图的逻辑视图名和模型数据

5.dispatcherServlet得到这个modelAndView对象之后,调用在配置文件中配置好的viewSolver(一般jsp都是调用那个internalViewReslover),然后使用这个viewSolver处理里面的逻辑视图名,得到一个视图对象,再使用这个视图对象去渲染模型数据,最后返回响应

(2)如何配置springmvc?

springmvc默认在/WEB-INF/<servlet-name>-servlet.xml这个配置文件,如果你要自定义自己的配置文件,那么则需要使用init-param去改变指定位置(这里我们可以看出springmvc的web容器其实就是一个Servlet容器,故能到得到默认的request、response、session对象,配置文件如下:

这个是spring配置文件(就是bean的配置文件):

<?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:p="http://www.springframework.org/schema/p"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd                http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd                http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd                http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"><!-- 对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 --><context:component-scan base-package="com.yue.*"/><mvc:annotation-driven/><!-- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"p:prefix = "/WEB-INF/views/"p:suffix = ".jsp"/> --><bean class="org.springframework.web.servlet.view.BeanNameViewResolver" /><bean id="userList" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" p:renderedAttributes="userList" /></beans>
下面这个是web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><!-- 这里是业务层的容器,使用一个loader将启动业务层的容器,因为springmvc看做是web层容器,所以继承业务层容器,可以使用业务层里面的bean --><context-param><param-name>contextConfigLocation</param-name><!-- 这里的classpath指的是ide里面的src目录下面,指的是经过编译部署后放置在classes目录下的文件 --><param-value>classpath:/conf/applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><servlet><servlet-name>baobaotao</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/bao.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>baobaotao</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>
再贴一个controller的代码:

package com.yue.controller;import java.util.ArrayList;import java.util.List;import org.springframework.stereotype.Controller;import org.springframework.ui.ModelMap;import org.springframework.web.bind.annotation.ModelAttribute;import org.springframework.web.bind.annotation.RequestMapping;import com.yue.entity.User;@Controller@RequestMapping("/user")public class UserController {@ModelAttribute("u")public User getUser(){User u = new User();u.setUsername("huang");return u;}@RequestMapping("/register")public String register(User user){System.out.println(user.getUsername());return "hi";}@RequestMapping("/t")public String ff(ModelMap map){List<User> userList = new ArrayList<User>();for(int i = 0;i < 5; i++){User u = new User();u.setUsername("f"+i);userList.add(u);}map.addAttribute("userList",userList);return "userList";}}
(2)springmvc里面的httpMessageConverter是什么?

答:这个hmc负责将请求信息转换为一个对象,也负责将对象转换回响应信息

对这个converterspringmvc有两种实现形式,一种是使用@requestBody,@responseBody,另一种是使用httpEntity(这种暂时不谈)

requestBody:表示将请求体按照字符串的形式填入方法的入参里面,例:

@RequestMapping("/register")//这里需要注意的是因为转过来的string类型数据,所以这里要用string类型,原因是因为调用了stringHttpConverterpublic String register(@RequestBody String user){System.out.println(user);return "hi";}


@Testpublic void test41(){RestTemplate rt = new RestTemplate();MultiValueMap<String,String> f = new LinkedMultiValueMap<String,String>();f.add("username","123");URI s = rt.postForLocation("http://localhost:8080/Spring3.x/user/register", f);System.out.println(s);}


这里使用restTemplate这个模拟发送请求的测试工具进行测试,测试后面将会讲到。

我们可以得到结果是:

username=123

使用<mvc:resources mapping="/resources/**" location="/" />来处理静态资源,这里使用这个标签的时候,静态资源的处理是由springmvc自己处理而不是由web应用服务器处理

将web根目录映射为resources,当在调用根目录下静态资源的时候,使用resources代替就可以了





1 0
原创粉丝点击