最近闲得蛋疼,晚上回家了解了解spring mvc
1.关于spring mvc的配置
spring mvc的入口是一个servlet,在项目描述文件web.xml中配置
<servlet>
<servlet-name>mvcServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>mvcServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
这里url-pattern配置为"/“会响应所有的请求,此处servlet-name为mvcServlet,那么spring会在初始化的时候在/WEB-INF/下面寻找mvcServlet-servlet.xml配置文件,如果寻找不到则抛出异常。
请求进入到DispatcherServlet之后会根据请求的连接将请求传送到对应的控制器进行处理。
2.配置对应的控制器
通过注解的形式来配置对应的控制器,要想使用注解我们在mvcServlet-servlet.xml中加入
<mvc:annotation-driven/>
@Controller
public class HomeController {
@RequestMapping({"/", "/home"})
public String showHomePage(Map<String, Object> model){
model.put("name", "ynb");
return "home";
}
}
spring mvc是基于方法进行设计的,@RequestMapping注解定义了该方法所对应的请求路径,如果请求的路径同该方法注解所定义的路径相同,那么会将request中的请求参数注入到方法对应的参数中,这里跟struts中的action有很大的区别,struts是基于对象进行处理的,每次请求新建一个action实例,并将request中请求参数注入到对象的实例变量中。将需要返回的数据放入到model对象中,以便返回的视图可以进行访问。
3.控制器对于请求返回一个字符串,那么spring mvc是如何通过这个字符串找到对应的返回视图的呢?
在mvcServlet-servlet.xml中配置相应的视图解析器,将返回的逻辑视图名称同对应的视图连接起来,spring mvc提供了很多默认的视图解析器:BeanNameViewResolver,ContentNegotiatingViewResolver,InternalResourceViewResolver....
在mvcServlet-servlet.xml中加入:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
经过视图解析器的处理,逻辑视图名称"home"被对应到/WEB-INF/views/home.jsp。
对于ajax请求,在方法体上面加入注解@ResponseBody,然后直接返回响应文本