springMVC和struts一样,都是服务于web层的MVC框架。
亲自动手搭建开发环境:
1. 下载springMVC的jar文件,将需要的jar添加到web项目中。
2. 登录页
<form id="logon" action="user/logon" method="post">
<input type="text" id="userName" name="userName"><br>
<input type="text" id="passWord" name="passWord"><br>
<input type="submit" id="logon" value="登录">
</form>
3. 在web.xml中指定SpringMVC的入口
<!--添加spring3的控制器及映射规则 -->
<servlet>
<servlet-name>/testSpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--核心配置文件spring-servlet.xml的默认位置在web-inf下的,启动DispatcherServlet时会自动加载配置文件,当修改了springMVC默认配置文件位置时,spring提供了一个初始化的配置选项,通过contextConfigLocation来自定义spring-servlet.xml的位置,现在配置文件放在src/config目录下-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:config/spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>/testSpringMVC</servlet-name>
<url-pattern>*</url-pattern>
</servlet-mapping>
4. 核心配置文件
<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: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-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">
<!--使用注解方式需要开启注解并配置注解扫描包 -->
<!-- 注解扫描包 -->
<context:component-scan base-package="com.tgb.*" />
<!-- 开启注解 -->
<mvc:annotation-driven/>
<!--视图解析器,定义springMVC的模板文件 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--模板的路径 -->
<property name="prefix" value="/"></property>
<!--模板的后缀 -->
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
5. Controller的实现
@RequestMapping("/logon.do")
public ModelAndView logon(String userName,String passWord){
String result=null;
if("administrator".equals(userName)&&("administrator").equals(passWord)){
result="success";
}
return new ModelAndView("/success","result",result);
}
//返回string类型
@RequestMapping("/logon2")
public String logon2(String userName,String passWord,HttpServletRequest request ){
String result=success;
request.setAttribute("result", result);
return "/success";
}
//返回void类型
@RequestMapping("/addUser)
public void addUser(String userName,String passWord,HttpServletResponse response) throws IOException{
String result="{\"result\": \"error\"}";
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.write(result);
}
这里用的是annotation注解来完成浏览器和服务器之间的映射关系,这种配置形式避免了在配置文件中定义请求映射关系。当然,也可以向struts一样,采用xml配置形式。不过,使用annotation比xml配置要方便多的。
controller可以采用继承和非继承两种方式,可以实现Controller或者继承MultiActionController类,也可以定义成完全的pojo类。
同struts一样,一个controller中可以处理多个方法,每个方法的返回值可以为void,string,ModelAndView。springMVC的controller支持形参方式接收请求的数据。controller中可以声明HttpServletRequest和HttpServletResponse,返回值和参数也可以通过这两个对象来处理。
之前,我们学习了struts的执行流程,既然springMVC和struts都属于web层的框架,那么,从宏观上来说,他们的逻辑步骤是很相似的,归纳起来就是:
1. 对http请求进行处理,查找相应的controller/Action类及方法
2. 执行业务逻辑
3.返回处理结果
只是,不同的框架在每一步的实现上所采用的实现方式也就是设计思路不同而已。每个框架设计思路不同,对于需要使用者实现的组件的实现方式也是不同的,通过三篇博客中三个登录的实现,我们已经学习了三个框架在使用上的区别,接下来了解一下springMVC的几个核心组件及实现流程:
1. DispatcherServlet :核心控制器,读取配置文件信息,初始化其他组件
2. Controller :完成业务逻辑,指定转向信息
3. HandlerMapping:将请求映射到具体的controller上
4. HandlerAdapter:HandlerMapping根据HandlerAdapter选择需要被执行的方法
4. ViewResolver 视图解析器,根据controller中返回的viewName,结合配置信息,创建出合适类型的view对象