Spring mvc框架tutorial
–
翻译:MoringStar
spring web mvc框架提供了一个model-view-controller框架,在开发web应用的时候可以更加的灵活和松耦合。MVC被分隔成了不同的应用程序切面,在这些元素中提供松散的组合。
- model包含了应用程序的数据,一般情况下由POJO简单java类组成.
- view是数据的路由响应,一般由一html构成
- controller响应用户请求,生成相关的model,同时路由到相关的页面
DispatcherServlet
spring mvc框架围绕着dispatcherServlet设计,dispatcherServlet处理了所有的http请求和响应,spring mvc的dispatcherServlet程序工作流如下面的图表:
下面一连串事件为dispatcherServlet处理Http请求的情况:
- 在接收到一个http request,dispatcherServlet通过HandlerMapping找到对应的controller
- Controller得到http request调用以Get,Post方法为基础的web服务方法,web服务方法会设置model的数据在基础的申明上,并且返回一个试图给dispatcherservlet
- disoatcherServlet通过视图解析找到对应的view
- 当view被释放,dispatcherservlet通过把model的数据给view,最后路由到浏览器.
handlerMapping.,controller,viewResolver是applicationContext的web插件扩展webApplicationContext的一部分.
必须的配置
通过在web.xml文件配置url mapping配置DispatcherServlet去处理request请求,下面是一个简单的DispatcherServlet例子:
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Spring MVC Application</display-name>
<servlet>
<servlet-name>HelloWeb</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HelloWeb</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
</web-app>
web.xml文件保存在web工程/WEB-INF目录下,通过上看的配置初始化了HelloWeb dispatcherServlet,这个框架会是这去夹在application context文件(通常被命名为[servlet-name]-servlet.xml在web-inf目录下),z我们配置一个叫做HelloWeb-servlet.xml.
下一步,通过<Servlet-mapping>
标签配置拦截的url信息,下面配置会拦截所有jsp请求.
如果你不想使用默认的文件名字和目录,可以单独配置路径在web.xml里面,配置如下:
<web-app...>
<!-------- DispatcherServlet definition goes here----->
....
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/HelloWeb-servlet.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
</web-app>
现在,我们来配置基础的helloWeb-servlet.xml文件,在web-inf目录下:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<context:component-scan base-package="com.tutorialspoint" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
下面是配置文件的关键地方
- [servlet-name]-servlet.xml文件被用来创建bean的声明,会覆盖global scope下的任何bean的声明
- <context:com...-scan...>
标签配置springmvc的注解扫描,允许使用香@controller和@requestMapping的注解
- internalResourceViewResolver将声明视图解析请这里解析所有在/web-inf/jsp下文件后缀为jsp的文件.
controller
DispatcherServlet转发request给控制器,去执行特殊的函数方法。@Controller注解表示这个特殊的类是控制器。@RequestMapping注解标识了 url 映射。
@Controller
@RequestMapping("/hello")
public class HelloController{
@RequestMapping(method = RequestMethod.GET)
public String printHello(ModelMap model) {
model.addAttribute("message", "Hello Spring MVC Framework!");
return "hello";
}
}
@Controller注解声明了一个Spring mvc 控制器,@RequesrMapping表示了控制器方法拦截的 /hello路径。@RequestMapping(method=RequestMethod.GET)标识这个pringHtllo()方法是这么controller默认的执行HttpGet请求的方法。也可以声明一个同样的post请求方法在相同的url上.
@Controller
public class HelloController{
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String printHello(ModelMap model) {
model.addAttribute("message", "Hello Spring MVC Framework!");
return "hello";
}
}
springMvc支持许多不同的视图如(jsp,html,pdf,excel worksheets,xml,Velocity tenplates,xslt,json,aton,rss feeds,jasperreports…)
http://www.tutorialspoint.com/spring/spring_web_mvc_framework.htm