SpringMVC学习指南【笔记2】简介、校验器、配置
基于模型-视图-控制器模式(MVC) 视图负责应用的展示;
模型封装了应用的数据和业务逻辑;控制器负责接收用户输入、改变模型、调整视图的显示。
控制器:springmvc和struct1使用servlet作为控制器,struct2使用filter作为控制器。
视图:大部分使用JSP页面作为视图。
模型:POJO(plain old java object),实践中会采用一个javabean来持有模型状态,并将业务逻辑方法哦一个action类中。一个javabean必须拥有一个无参的构造器,通过get/set方法来访问参数,同时支持持久化。
每个http请求都发送给控制器,请求中的uri标志出对应的action,action代表了应用可以执行的一个操作。一个提供了action的java对象称为action对象。一个action类可以支持多个action。
控制器会解析uri并调用相应的action,然后将模型对象放到视图可以访问的区域(以便服务端数据可以展示在浏览器上),最后控制器利用RequestDispatcher跳转到视图JSP页面,在JSP页面中,用表达式以及定制标签显示数据。
实体类实现java.io.Serializable接口,实现serialVersionUID属性,其实例可以安全地将数据保存到HttpSession中。
private static final long serialVersionUID = 748392348L;
校验器
在web应用执行action时,很重要的一个步骤就是进行输入校验。Java社区专门发布了JSR 303 Bean Validation以及JSR 349 Bean Validation1.1版本,将Java世界的输入校验进行标准化。
现在的MVC框架通常同时支持编程式和申明式两种校验方法。
在编程式中,需要通过编码进行用户输入校验,而在申明式中,则需要提供包含校验规则的XML文档或者属性文件。
如果没有用Spring MVC ,那么需要编写一个Dispatcher servlet和控制类。其中Dispatcher servlet必须能够做到如下事情:
1、根据URI调用相应的action;
2、实例化正确的控制器类;
3、根据请求参数值来构造表单bean;
4、调用控制器对象的相应方法;
5、转向到一个视图(JSP页面)。
Spring MVC是一个包含了Dispatcher servlet的MVC框架。它调用控制器方法并转发到视图。所以使用Spring MVC不需要编写Dispatcher servlet,加速开发。
1、Spring MVC中提供了一个Dispatcher Servlet,无需额外开发;
2、Spring MVC中使用基于XML的配置文件,可以编辑,而无需重新编译应用程序;
3、Spring MVC实例化控制器,并根据用户输入来构造bean;
4、Spring MVC可以自动绑定用户输入,并正确地转换数据类型。例如,Spring MVC能自动解析字符串并设置float或者decimal类型的属性;
5、可以校验用户输入,若校验不通过,则重定向回输入表单。(Spring MVC内置了常用的校验器)输入校验是可选的,支持编程方式以及声明;
6、Spring MVC是Spring框架的一部分,可以利用Spring提供的其他能力;
7、Spring MVC支持国际化和本地化,支持根据用户区域显示多国语言;
8、Spring MVC支持多种视图技术,JSP技术、Velocity技术、FreeMarker技术。
Spring MVC中自带了一个开箱即用的Dispatcher Servlet,该servlet的全名是org.springframework.web.servlet.DispatcherServlet。
要使用这个servlet,需要把它配置在部署描述符(web.xml文件),应用servlet和servlet-mapping元素,如下:
<servlet> <servlet-name>springmvc</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <!-- load-on-startup存在,说明在应用程序启动时装载servlet并调用init方法;不存在的话,在该servlet的第一个请求时加载 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
初始化时,会寻找WEB-INF文件下的servletName-servlet.xml文件,这里找的是springmvc-servlet.xml文件。当然也可以更改加载指定路径下的指定文件,用init-param这个标签。
如:
<servlet> <servlet-name>springmvc</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/config/springmvc-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
基于注解的控制器可以同时支持多个请求处理动作,并且无需实现任何接口。
Spring MVC中的视图解析器负责解析视图。可以通过在springmvc的配置文件中定义一个ViewResolver来配置视图解析器。
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean>
配置好前缀和后缀,这样视图解析器就会自动增加前缀和后缀。