springMVC简单的一些操作
SpringMVC的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet
来设计的,这个Servlet会把请求分发给各个处理器进行处理,由DispatcherServlet来统一调度各种处理器
要使用springMVC主要分为三个步骤:
1.web.xml中配置DispatcherServlet
2.编写Handler类实现Controller接口(使用注解可以不用实现Controller接口),这个就相当于struts2中的action
3.配置映射请求路径
spring-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/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd"> <!-- 开启spring注解,开启扫描自动创建对象 --> <context:annotation-config/> <context:component-scan base-package="ni.jun.yang.controller"/> <!-- 开启验证注解 --> <mvc:annotation-driven validator="validator"></mvc:annotation-driven> <!-- 配置验证资源文件 --> <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property> <property name="validationMessageSource" ref="messageSource" /> </bean> <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="basenames"> <list> <value>/WEB-INF/Validation</value> </list> </property> </bean> </beans>
配置DispatcherServlet:
<servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <!-- 加载springMVC的配置文件 --> <param-value>classpath:spring_mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping>
编写Handler:(使用注解设置映射请求路径,如果不使用注解,那么一个请求需要创建一个Handler类,使用注解只需要给类里面的方法添加相应的映射请求路径注解就可以实现一个请求的处理了@RequestMapping("/addUser"),访问http://xxx/addUser.action就可以进入该方法,action是web.xml配置的
<url-pattern>*.action</url-pattern> 的后缀
)
package ni.jun.yang.controller; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import javax.validation.Valid; import org.springframework.stereotype.Controller; import org.springframework.validation.Errors; import org.springframework.validation.ObjectError; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.SessionAttributes; import org.springframework.web.servlet.ModelAndView; import ni.jun.yang.bean.User; @Controller //@SessionAttributes({"user"}) public class MyHandler { @RequestMapping("/addUser") public ModelAndView add (@Valid User user,Errors errors) { ModelAndView modelAndView = new ModelAndView(); if(!errors.getAllErrors().isEmpty()){ for(ObjectError e:errors.getAllErrors()){ System.out.println(e.getDefaultMessage()); } modelAndView.addObject("errors", errors.getAllErrors()); modelAndView.setViewName("/index.jsp"); }else{ modelAndView.setViewName("/welcome.jsp"); } System.out.println(user.getUserName()); System.out.println(user.getUserPsw()); System.out.println(user.getUserAge()); return modelAndView; } @RequestMapping("/login") public ModelAndView login (@Valid User user,Errors errors) { ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("user", user); if(!errors.getAllErrors().isEmpty()){ for(ObjectError e:errors.getAllErrors()){ System.out.println(e.getDefaultMessage()); } modelAndView.addObject("errors", errors.getAllErrors()); modelAndView.setViewName("/index.jsp"); }else{ modelAndView.setViewName("/welcome.jsp"); } System.out.println(user.getUserName()); System.out.println(user.getUserPsw()); System.out.println(user.getUserAge()); return modelAndView; } @RequestMapping("/login2") public ModelAndView login2 (@Valid User user,Errors errors,HttpServletRequest Request) { ModelAndView modelAndView = new ModelAndView(); HttpSession session = Request.getSession(); // session.setAttribute("user", user); System.out.println(user.getUserName()); System.out.println(user.getUserPsw()); System.out.println(user.getUserAge()); modelAndView.setViewName("/welcome.jsp"); return modelAndView; } }
参数获取:
如果需要获取页面传回来的数据,只需要在方法中设置上相应的参数 例如上面方法中的user 直接将页面的参数封装进user中,
如果是集合或者数组的获取,
例如checkbox 传回来就是一个数组,直接添加相应的数组作为方法参数也会将checkbox 的数据封装进该数组
如果是一个集合,
比如买车票时添加多个乘车人,同时将数据提交到后台,那么传到后台就是一个集合,
封装一个VO类,类下成员变量为一个集合,然后将VO作为参数放在发方法中,参考Mybatis 封装VO类进行多个参数的传递
Handler类下面方法的写法:
handler下面的方法的写法有多种,
一种就是上面的 返回一个视图模型对象ModelAndView,setViewName("/index.jsp")跳转某个页面
返回一个字符串(某个页面)public string XXX( Model model) 参数中必须要有Model
void name方法中需要将 request 和response 作为参数,这个不多说,拿到request 和response 那么就和servlet的操作完全一样了
除了这三种,还有很多种,常用的还是第一种
验证:
上述代码中的errors 相关的 @Valid 这些是引入了hibernate-validator验证框架,前端传回来的数据进行相应的验证
1.开启验证注解:
2.配置验证资源文件,加载properties文件
3.对获取的参数对应的类成员变量使用注解
4.页面响应,发送相应的验证信息和页面的跳转