springMVC

来源:互联网 发布:申请淘宝网店的步骤 编辑:程序博客网 时间:2024/05/16 16:16
1、掌握springMVC的特点。
spring MVC是一个基于MVC模式的表现层框架,在spring2.5以后新增了注解功能。和同类的MVC表现层框架相比,有如下特点:
1、基于的是servlet/jsp模式
2、控制器不在需要继承其它类,只需要用@Controller注解
3、不需要有formbean之类的对象了,方法参数中需要的页面值,可通过@RequestParam直接从页面请求中获得。
4、控制器方法签名定义灵活。
5、返回页面直接在方法中指定,可以是String,也可以是其它的,比如:ModelAndView或void等。
6、性能也很优秀,性能高于struts2,和struts1相当。

2、springMVC环境的搭建。
导入相关的jar包


注册前端控制器DispatcherServlet。需要指明spring配置文件路径
<servlet>
  <servlet-name>springmvc</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
<init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:app*.xml</param-value>
      </init-param> 
<load-on-startup>1</load-on-startup>
  </servlet>  


<servlet-mapping>
  <servlet-name>springmvc</servlet-name>
  <url-pattern>*.do</url-pattern>
  </servlet-mapping>


默认情况下:DispatcherServlet会寻找WEB-INF下,命名规范为[servlet-name]-servlet.xml文件。也可以通过init-param改变默认配置


在spring 配置文件中,加入
<mvc:annotation-driven/>提供对spring mvc注解、验证支持


<context:component-scan base-package="com.lovo.action"/>扫描指定文件夹中的@Controller类,读取类中的注解。该标签可以加入多个,以读取不同文件夹中的类


3、springMVC的工作流程
在springMVC中存在两种控制器:前端控制器和应用控制器。
前端控制器(DispatcherServlet),负责接收客户端请求,根据请求路径访问应用控制器,负责将页面参数填充javabean,负责转发页面,对标签类进行调用。
应用控制器(用户书写的Action),负责产生业务组件,调用业务组件的方法完成业务,根据结果返回转发的页面对象


工作流程:
当客户端以XX.do请求服务器,服务器使用前端控制器DispatcherServlet接收请求。DispatcherServlet借助HandlerMapping,根据请求的URL路径,定位到具体的Controller。
和应用控制器的具体方法。并将封装好数据的实体对象传入应用控制器方法。由应用控制器方法,完成业务组件的业务方法的调用,然后根据业务方法处理的结果,返回需要转发的页面路径。DispatcherServlet根据路径,完成页面转发。




4、应用控制器的使用。
应用控制器类前加入@Controller,注册为应用控制器,默认为单实例。


 a、    
    @RequestMapping("/reg")
public String mytest() throws Exception{
        ……
       }
    客户端请求路径为/reg.do


  b、  
   @RequestMapping("/test")
    public class UserAction {
      @RequestMapping("reg")
public String mytest() throws Exception{
        ……
       }
     客户端请求路径为/test/reg.do
     








5、Spring MVC方法签名


a、
public String mytest(
@RequestParam(value="name") String userName,接收客户请求参数name赋值给形参userName
int  age ,    如果请求参数名和形参名一致,可以不写@RequestParam
HttpServletRequest request,  请求对象
HttpServletResponse response  响应对象){
}




b、
@RequestMapping("ps/{id}",method=RequestMethod.GET")
public String test(
@PathVariable("id") int myid){


}
<a href="ps/1.do">访问</a>
该请求只能处理GET方式。
利用PathVariable("id")得到路径参数数据




c、
@RequestMapping("/reg")
public String test(
@RequestParam(value="tid",defaultValue="2")int id){


}
页面上提交tid的键值对,将值赋值给id参数。如果页面没有提交tid的键值对,那么默认将defaultValue的值赋值给id。




d、
    @RequestMapping("/reg")
public String mytest(
@ModelAttribute("user")  UserBean bean,将请求参数的值赋给bean对象。同时将bean放置在request中。等价于request.setAttribute("user",bean);
     ){


        return "/index.jsp";表示执行完该方法后,内部转发至index.jsp
         // return "redirect:/index.jsp";重定向到index.jsp
}




6、自定义转换器
Spring类型转换器分为:局部类型转换器和全局类型转换器


全局类型转换器
public class DateConverter implements Converter<String, java.util.Date>{
public Date convert(String arg0) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
date = dateFormat.parse(arg0);


return date;
}


}


applicationContext.xml:
<mvc:annotation-driven conversion-service="tc"/>
<bean id="tc" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
<list>
       <bean class="com.lovo.util.DateConverter"/>
</list>
     </property>
</bean>




7、文件上传
@RequestMapping("/reg")
public String register(HttpServletRequest request,
@RequestParam("head") CommonsMultipartFile mFile) head为表单名
{
String fileName  = mFile.getOriginalFilename();上传文件名
ServletContext context = request.getSession().getServletContext();
String path = context.getRealPath("face")+"/"+fileName;
mFile.transferTo(new File(path)); ;//写入数据
}
在spring配置文件中加入上传组件支持
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
 </bean> 
 
 
8、异常处理
public class MyHandler implements HandlerExceptionResolver{
public ModelAndView resolveException(HttpServletRequest arg0,HttpServletResponse arg1, Object arg2, Exception ex) {
//转向出错页面
              return new ModelAndView("/error.jsp");
}}




9、spring和springMVC整合
需要分成springMVC的配置文件和spring基本配置文件


spring 基本配置文件一般为和持久层框架整合信息
<!-- 扫描指定包中的spring注解类 -->
<context:component-scan base-package="com.lovo.service">
</context:component-scan>




springMVC配置文件一般配置springMVC相关的信息
<context:component-scan base-package="com.lovo.action">
</context:component-scan>






在web容器加载时,在上下文监听器中加载spring基本配置文件。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-base.xml</param-value>spring基本配置文件路径
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>




在注册springMVC前端控制器时,加载springMVC配置文件
<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
  <param-value>classpath:applicationContext-action.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>      
0 0
原创粉丝点击