一、概述
springmvc基于方法开发的。springmvc将url和controller里的方法映射。映射成功后springmvc生成一个Handler对象,对象中只包括了一个method。方法执行结束,形参数据销毁。springmvc的controller开发类似web service开发。
springMVC一般只做三件事情。分发请求、传入参数、返回响应。
二、springMVC流程图
三、实现步骤
1、导入SpringMVC需要的jar包(可百度查询)
2、写配置文件applicationContext-mvc.xml
3、在WEB-INF文件夹下创建名为jsp的文件夹,用来存放jsp视图
4、建立包及Controller(以HelloController为例),Spring MVC可以通过配置文件配置也可以通过注解配置。
代码中的注解就是通过注解配置的写法
applicationContext-mvc.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/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 容器中只要有这个类,你们bean的name就会作为请求映射的接口 -->
<!-- BeanNameUrlHandlerMapping注册 处理器映射器 ; SimpleUrlHandlerMapping注册 处理器-->
<!--
<bean
class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<bean
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/1">helloController</prop>
<prop key="/2">helloController</prop>
<prop key="/3">helloController</prop>
</props>
</property>
</bean>
<bean id="helloController" name="/hello1,/hello2" class="net.seehope.spring.project.web.controller.HelloController"></bean>
-->
<!-- 扫描整个注解,但只处理controller注解 -->
<context:component-scan base-package="net.seehope">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 开启mvc注解支持 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 开启默认静态资源访问 -->
<mvc:default-servlet-handler/>
<!-- json消息转换器 -->
<bean id="jackson2MessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
</bean>
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jackson2MessageConverter"/>
</list>
</property>
</bean>
<!-- jsp视图解析器beetl -->
<!-- init-method 用于在bean初始化时指定执行方法 -->
<bean id="beetlConfig"
class="org.beetl.ext.spring.BeetlGroupUtilConfiguration"
init-method="init">
</bean>
<!-- BeetlSpringViewResolver 这个 bean 会去读取 spring-druid/src/main/resources 下的beetl.properties文件 -->
<bean id="viewResolver"
class="org.beetl.ext.spring.BeetlSpringViewResolver">
<property name="contentType" value="text/html;charset=UTF-8" />
<property name="prefix" value="/WEB-INF/beetl/"></property>
<property name="suffix" value=".html"></property>
</bean>
</beans>
HelloController代码如下:
@Controller
@RequestMapping("/hello")
public class HelloController{
@Autowired
private HttpServletRequest request;
@Autowired
private HttpServletResponse response;
@RequestMapping("/1")
public String hello(ModelMap map,User user,@RequestParam(required = true,name = "name") String username,
String[] hobby) {
Map<String, String[]> parms = request.getParameterMap();
Set<String> parmsKey = parms.keySet();
for (String key : parmsKey) {
System.out.println(key + ":" + Arrays.toString(parms.get(parmsKey)));
}
System.out.println(ReflectionToStringBuilder.toString(user,ToStringStyle.MULTI_LINE_STYLE));
System.out.println(ReflectionToStringBuilder.toString(hobby,ToStringStyle.MULTI_LINE_STYLE));
return "beetl";
}
@RequestMapping("/2")
public ModelAndView demo2() {
System.out.println("进入demo2");
ModelAndView mv = new ModelAndView();
mv.setViewName("/WEB-INF/jsp/index.jsp");
mv.addObject("username","123456");
return mv;
}
@RequestMapping("/3")
@ResponseBody
public List<User> hello3(@RequestBody User user){
List<User> users = new ArrayList<User>();
for (int i = 0; i < 10; i++) {
users.add(user);
}
return users;
}
}
四、部分知识解释
1、@RequestBody和@ResponseBody
@RequestBody:注解实现接收http请求的json数据,将json转换为java对象。
@ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。
2、json消息转换器(MappingJackson2HttpMessageConverter):
前前端传递json数据,后台接收时对象要使@RequestBody,spring MVC会将json格式转化回对象类型,跟@ResponseBody刚好相反。
3、SpringMvc怎么和AJAX相互调用的???
通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。
4、jsp视图解析器beetl(BeetlGroupUtilConfiguration)
视图解析器 对返回的视图名做批量操作 用来解析jsp 跳转到index.jsp,只需写index即可。
web端,服务器能控制web页面跳转,但是在app端,服务器无法控制其跳转(只能返回成功或失败,让移动端自己判断)一般我们都是以ModelAndView返回通过SpringMVC视图解析器,访问资源:WEB-INF/jsp/index.jsp