首页 > 编程语言 > 详细

Spring mvc

时间:2019-03-12 00:38:32      阅读:201      评论:0      收藏:0      [点我收藏+]

SpringMvc简单介绍

Spring MVC是一个基于MVC(Model  view Controller)模式的WEB框架,它解决WEB开发中常见的问题(参数接收、文件上传、表单验证、国际化、等等),使用非常简单,SpringMvc作为Spring中的一个模块,可以与Spring无缝集成。

 

SpringMvcSpring框架为核心,为应用程序中的Web层(表现层)提出的一套优秀的解决方案。

spring-webmvc-4.1.2.RELEASE.jar  SpringMVCjar文件。

spring-web-4.1.2.RELEASE.jar     SpringWeb项目运行的支持。

1.1.1. MVC框架思想-核心控制器(前端控制器)

顾名思义核心控制器用于Web层核心功能的处理以及在所有控制器执行的。所有的WebMvc框架都采用了这种方式。

Struts2中我们使用的是StrutsPrepareAndExecuteFilter作为核心控制器,在SpringMVC中使用的是DispatcherServlet为核心控制器.

DispatcherServlet核心控制器会拦截匹配的请求,把拦截下来的请求,依据相应的规则分发到目标Controller来处理。

 

创建项目确保Spring可用

 

导入jar

 

com.springsource.org.apache.commons.logging-1.1.1.jar(版本三)

 

    spring-beans-4.1.2.RELEASE.jar

 

    spring-context-4.1.2.RELEASE.jar

 

    spring-core-4.1.2.RELEASE.jar

 

    spring-expression-4.1.2.RELEASE.jar

 

    spring aopormjdbctx相关jar根据项目使用自行添加;

 

准备配置文件配置 applicationContext.xml

1.1.1. 加入相关Spring mvc相关jar包。

spring-web-4.1.2.RELEASE.jar           spring web项目的支持。

spring-webmvc-4.1.2.RELEASE.jar       SpringMVC核心包。

 

1.1.1. 配置核心控制器

 

Webmvc框架的心脏就是核心控制器,负责所有请求的公共功能,然后再分发给具体的控制器(我们编写的控制器),完成业务逻辑,响应视图。

 

 

   配置:

<!-- springmvc的核心控制器,拦截所有的请求,负责分发到对应的Controller中的方法 -->

<servlet>

<servlet-name>springmvc</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>springmvc</servlet-name>

<!-- / 拦截所有的请求,拦截Controller的地址

/*拦截所有的请求,会拦截*.jsp类似请求

*.do  *.action 拦截.do   .action结尾的请求

 -->

<url-pattern>/</url-pattern>

</servlet-mapping>

1.1.1. 准备SpringMVC映射文件

 

规范要求

说明

实现Controller接口或子接口。

注意:子接口很多已经过时了。

核心方法为handleRequest(req,resp),处理用户请求

普通的类(常用的哦)

使用一个普通的类作为我们的控制器,每一个方法就是一个处理器,这种方式需要配合注解标签才能使用。

 

       SpringMVCSpring的一个模块,它的配置文件就是Spring的配置差不多,复制一份applicationContext.xml修改为applicationContext-mvc.xml

 

SpringMVC中的控制器有一定规范,要么实现接口,要么使用POJO对象与注解配合使用。

 

 

handleRequest方法的两个参数与我们以前的servletservice方法一样,requestresponse对象,我们可以使用这个两个对象完成一次请求的所有工作,比如你可以使用request接受参数,或者使用response重定向等等,注意方法除了返回值以外还有一个返回值ModelAndView

 

 

 1  SpringMVC的控制器Controller,和Struts2中的action一样。
 2  */
 3 public class HelloController implements Controller{
 4     /**
 5      * 处理请求方法。
 6      * request:封装了请求对象;
 7      * response:封装了这个请求的响应对象
 8      * 返回一个ModelAndView对象:
 9      *    Model:模型 ,封装我们的数据
10      *    View:视图,返回的jsp页面
11      *    ModelAndView对象是springmvc控制器中的一个对象,用于封装数据模型和返回页面视图
12      */
13     public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
14         //获取请求参数
15         System.out.println("HelloController....");
16         //调用service进行业务逻辑处理
17         System.out.println("HelloController 已经进行了业务逻辑处理");
18         //返回jsp页面视图
19         ModelAndView mAndView = new ModelAndView();
20         mAndView.setViewName("/01jsp/01_hello.jsp");
21         return mAndView;
22     }
23 
24 }

 

1)配置

SpringMVC是基于SpringSpring中的核心就是Ioc容器,而Ioc容器中最重要的成员就是<bean>SpringMVC中的控制器也是一个一个<bean>。使用name属性:表示这个Controller的访问路径

 

 1 <!-- springmvc的核心控制器,拦截所有的请求,负责分发到对应的Controller中的方法 -->
 2     <servlet>
 3         <servlet-name>springmvc</servlet-name>
 4         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 5         
 6 <!--         启动springmvc的核心控制器的时候,就初始化加载springmvc的配置文件 -->
 7         <init-param>
 8           <param-name>contextConfigLocation</param-name>
 9           <param-value>classpath:applicationContext-mvc.xml</param-value>
10         </init-param>
11 <!--         DispatcherServlet启动比较耗时,在启动加载文件的时候就进行加载 -->
12         <load-on-startup>1</load-on-startup>
13     </servlet>
14     <servlet-mapping>
15         <servlet-name>springmvc</servlet-name>
16         <!-- / 拦截所有的请求
17         /*拦截所有的请求
18         *.do  *.action 拦截.do   .action结尾的请求
19          -->
20         <url-pattern>/</url-pattern>
21     </servlet-mapping>

 

1.1.1. 入门小结:

  ①:创建一个动态工程,配置tomcat和编译路径

  ②:Spring的环境准备:导入基本的5jar包和一个applicationContext.xml配置文件

  ③:Springmvc的环境的准备:

         Web ,webmvc的两个jar包;

        applicationContext-mvc.xml的配置文件

       Web.xml:配置核心控制器:DispatcherServlet

 ④:Controller的准备:写一个类,实现Controller接口,覆写方法,返回一个视图jsp页面

       同时应把这个Controller配置到applicationContext-mvc.xml,变成一个beanname就是访问的路径

 ⑤:准备一个jsp视图

:启动测试

 

 

1.1. 静态资源文件访问问题

 

 

 

由于我们配置的拦截器规则是”/”,”/”就代表默认控制器,tomcat本身自带有一个默认控制器,这个控制器用于处理静态资源请求,如果我们配置默认控制器,那么tomcat的默认控制器就不生效,导致静态资源无法访问。

 

解决办法:springmvc开启静态资源控制器。(适应于HTML页面视图)

 

<mvc:default-servlet-handler/>

技术分享图片

1.1. 控制器三种实现方式

① 实现Controller接口

② 实现HttpRequestHandler接口

③ 普通类(pojo)和注解 @RequestMapping

 

public class ImplController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        System.out.println("我implements Controller进来了。。。。。");
        return null;
    }
}

 

配置:将这个Controller交给spring管理,并使用name属性配置映射关系(就是这个Controller的访问路径)

 

1 public class HandlerController implements HttpRequestHandler {
2     @Override
3     public void handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
4         System.out.println("进来了implements HttpRequestHandler。。。。");
5     }
6 }

 

配置:将这个Controller交给spring管理,并使用name属性配置映射关系(就是这个Controller的访问路径)

缺点:只能有一个方法,不能实现多个地址的映射

 

 

普通类(pojo)和注解

 

 1 @RequestMapping("/user")
 2 public class UserController {
 3     /**
 4      * 一个Index方法
 5      * @return
 6      */
 7      @RequestMapping("/index")//访问地址:/user/index 
 8      public String index(){
 9          System.out.println("我是一个index。。。。。。。。。。。。");
10          return  "";
11      }
12      /**
13       * 一个list方法
14       * @return
15       */
16      @RequestMapping("/list")//访问地址:/user/list 
17      public void  list(){
18          System.out.println("我是一个list。。。。。。。。。。。。");
19      }
20 
21 }

 

配置:@RequestMapping配置类上和方法上

(只需要配置让spring管理这个bean即可,无需指定路径,因为方法上面通过@RequestMapping指定)

<!-- Controller的实现:方式一:定义一个普通的java-->

<bean  class="cn.itsource.springmvc._02_controller.UserController"> </bean>

需要开启SprigMVC注解支持:

<!-- 开启Springmvc的注解驱动:扫描@RequestMapping等注解 -->

 <mvc:annotation-driven/>

总结

Springmvc中所有控制器,其实在spring中就是一个一个bean

spring管理bean的方法分为两种,第一种是xml,第二种是注解。

Springmvc中控制器建议使用注解方式,是官方推荐的,也外面公司使用方式

 

控制器注解实现方式

 

 1 /**
 2  *        
 3  * Controller的实现:
 4  *   全注解:
 5  *      @Controller的配置:相当于一起的xml中的bean配置
 6  *      @RequestMapping("/department")配置:bean的name的配置
 7  *      
 8  *      注意:需要配置spring注解的扫描路径
 9  *             <!-- 开启Spring的注解的扫描:@Controller @Service @Repository @Component等 -->
10                 <context:component-scan base-package="cn.itsource.springmvc"/>
11  *          开启springmvc注解的扫描:
12  *              <!-- 开启Springmvc的注解驱动:扫描@RequestMapping等注解 -->
13                  <mvc:annotation-driven/>
14  * @author admin
15  *
16  */
17 @Controller//将这个类,交给Spring管理,需要开启注解的扫描路径
18 @RequestMapping("/department")
19 public class DepartmentController {
20     
21     @RequestMapping("/index")
22     public void index(){
23         System.out.println("index...........");
24     }
25     @RequestMapping("/del")
26     public void del(){
27         System.out.println("del.......");
28     }
29 
30 }

 

 

 

 

 

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 4     xmlns:mvc="http://www.springframework.org/schema/mvc"
 5     xmlns:context="http://www.springframework.org/schema/context"
 6     xsi:schemaLocation="
 7     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 8     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
 9     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
10     <!-- 开启springMVC的默认处理控制器 :处理静态资源 -->
11     <mvc:default-servlet-handler />
12     <!-- 开启spring对mvc注解支持功能,能识别@RequestMapping等注解 -->
13     <mvc:annotation-driven />
14     <!-- 开启spring对注解配置支持,默认这个配置是存在的,但是为了规范起见,还是写上:@Controller:controller @Service:service @Repository:dao @Component :其他 -->
15     <context:annotation-config />
16     <!-- 组件扫描路径 -->
17     <context:component-scan base-package="cn.itsource.springmvc" />
18 </beans>

 

  1. 控制器常用操作

struts2一样,控制器除了我们前面重点讲解处理请求并返回视图以外,还需要一些事情,比如接收页面传递参数、绑定数据到页面、返回json数据、文件上传、文件下载等

 

参数接收

 

配置请求编码过滤器

 

参数接收,首先要考虑乱码问题。然而springmvc框架本身没有处理请求编码,但是spring框架为我们提供了一个请求编码过滤器,我们在web.xml配置一个请求编码过滤器。

 

1.1. 参数接收

 

1.1.1. 配置请求编码过滤器

 

参数接收,首先要考虑乱码问题。然而springmvc框架本身没有处理请求编码,但是spring框架为我们提供了一个请求编码过滤器,我们在web.xml配置一个请求编码过滤器。

 

 

 1 <!-- 支持UTF-8编码 -->
 2   <filter>
 3       <filter-name>characterEncoding</filter-name>
 4       <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
 5       <init-param>
 6           <param-name>encoding</param-name>
 7           <param-value>UTF-8</param-value>
 8       </init-param>
 9   </filter>
10   <filter-mapping>
11       <filter-name>characterEncoding</filter-name>
12       <url-pattern>/*</url-pattern>
13   </filter-mapping>

1.1.1. 参数接收方式

① 通过控制器的执行方法参数来接收普通参数

② 通过Domain模型对象来接收

③ 通过传统的HttpServletRequest接收

④ 通过url中的参数接收(restfull风格) @PathVariable("id")转换

 

1.通过控制器的执行方法参数来接收普通参数

技术分享图片

2.通过模型对象来接收(常用)

技术分享图片

3.接收url中参数的请求,接收用户请求参数值

技术分享图片

4.通过传统的HttpServletRequest接收

技术分享图片

1.1. 数据传递

就是Controller往前台(页面)传递数据

① 通过ModelAndView对象传递

② 通过Model对象传递

③ 通过request对象传递

④ 通过返回值传递

 

①通过ModelAndView对象传递

 

/**
	 * 通过一个ModelAndView对象来传递参数
	 * @return
	 */
	@RequestMapping("/demo1")
	public ModelAndView demo1() {
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.addObject("msg", "大家好啊");
		modelAndView.setViewName("/03jsp_contrlloerParamsToView/controllerToView.jsp");
		User user=new User("zs", 13, 11L);
		modelAndView.addObject(user);
		return modelAndView;

 

 

2. 通过Model对象进行数据传递

 

 1 /**
 2      * 通过形参中的一个Model对象来传递参数。
 3      * springMvc自动创建模型对象传入到方法中,我们只需要在这个模型上添加数据就以。
 4      * @param model 封装数据的模型对象
 5      * @return 返回值是一个字符串,表示是返回的视图view
 6      */
 7     @RequestMapping("/demo2")
 8     public String demo2(Model model) {
 9         model.addAttribute("msg", "一点都不好");
10         return "/03jsp_contrlloerParamsToView/controllerToView.jsp";
11     }

 

3.通过request对象进行数据传递

 1 /**
 2      * 使用原始的在request上添加属性
 3      * @param request
 4      * @return 返回值是一个字符串,表示返回的视图view
 5      */
 6     @RequestMapping("/demo3")
 7     public String demo3(HttpServletRequest request) {
 8         request.setAttribute("msg", "我是另一种方式了哦");
 9         return "/03jsp_contrlloerParamsToView/controllerToView.jsp";
10     }

4.通过返回值传递数据

 1 /**
 2      * 返回一个自定义对象:user。
 3      * 返回值就是模型数据。
 4      * springmvc会自动创建一个ModelAndView对象,mav,将uer添加到mav中:mav.addObject("user",user);
 5      * 并且返回视图路径就是访问路径:mav.setViewName("/demo4.jsp");
 6      * @return
 7      */
 8     @RequestMapping("/demo4")
 9     public User demo4() {
10         User user=new User("2",34,34L);
11         return user;
12     }
13 
14 yi

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Spring mvc

原文:https://www.cnblogs.com/wzscom/p/10514152.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!