`
squall140
  • 浏览: 140489 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Spring 3.x MVC 入门1

 
阅读更多

文章转自http://www.cnblogs.com/zhaoyang/archive/2012/01/07/2315425.html

建立一个web project,并导入spring 3.x的jar包

配置web.xml

根据上面的spring mvc流程图,我们知道DispatcherServlet是spring mvc 的一个前端控制器,所以我们当然要去配置它,以便于将请求转给DispatcherServlet处理

 

  <servlet>

    <servlet-name>dispatcher</servlet-name>

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

    <init-param>

        <param-name>contextConfigLocation</param-name>

<!-- 如果配置文件位于classpath下,可以这么写: classpath:dispatcher.xml -->

        <param-value>/WEB-INF/dispatcher.xml</param-value>

    </init-param>

    <load-on-startup>1</load-on-startup>

  </servlet>

 

  <servlet-mapping>

    <servlet-name>dispatcher</servlet-name>

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

  </servlet-mapping>

 

注:由于DispatcherServlet在初始化的过程中需要一个配置文件来生产文件中的各种bean,并生成 WebApplicationContext对象,保存到ServletContext中(如果DispatcherServlet有多个,那么每一个 DispatcherServlet都对应一个WebApplicationContext),我们可以在Servlet的init-param中配置配 置文件的路径,当然如果我们没有配置Init-Param,它会默认到WEB-INF的文件夹中找[servletname]-servlet.xml文 件,例如上面如果我们没有配置,则会去寻找dispatcher-servlet.xml这个配置文件。(在init-param中我们可以指定多个配置 文件,用逗号分隔也可以使用通配符*)

配置上文中我们指定的所需的dispatcher.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:p="http://www.springframework.org/schema/p"

    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-3.0.xsd

    http://www.springframework.org/schema/context

    http://www.springframework.org/schema/context/spring-context-3.0.xsd

    http://www.springframework.org/schema/mvc

    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd" >

 

    <context:component-scan base-package="com.controls" />

   

    <mvc:annotation-driven />

   

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >

       <property name="prefix" value="/WEB-INF/views/" ></property>

       <property name="suffix" value=".jsp" ></property>

       <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" ></property>

    </bean>

   

</beans>

 

配置文件说明:

<context:component-scan base-package="com.controls" />

由于我们使用了基于注解的Controller,所以这里指定了需要被扫描的包路径,如果有多个可以使用逗号分隔

 

<mvc:annotation-driven />

上面的spring mvc流程图中我们知道DispatcherServlet接管请求后,会由HandlerMapping来执行映射,所以我们需要注册 HanlderMapping,比如上面的标签会自动注册比如DefaultAnnotationHandlerMapping(执行请求到 Controller的映射)和AnnotationMethodHandlerAdapter(调用controller中的方法)这样的bean,当 然这个标签还提供了其他的一些支持(更多介绍请参照spring官方文档第455页)。

 

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >

       <property name="prefix" value="/WEB-INF/views/" ></property>

       <property name="suffix" value=".jsp" ></property>

       <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" ></property>

</bean>

上面spring mvc流程图的最后controller处理完毕后会交给一个ViewResolver进行处理,大体上是解析视图逻辑名并经过一定的处理获取一个视图, 这里的意思是设置视图用jsp来处理(比如我们设置viewClass为JstlView)来进行处理,就是以forward的形式转发给jsp,这个地 址是:/WEB-INF/views/[controller返回值].jsp ,当然视图解析器可以定义多个,(视图解析器不会处理ModelAndView中已经设置了View的请求,因为已经有View来处理了,那当然就不需要 它来解析到真正的视图View啦)

编写Controller控制器

这里我们使用例子的形式来说明

 

实现一个控制器类

@Controller

@RequestMapping("/user")

public class UserControl {

}

只要给类加上Controller的注解,并放在被扫描的包中,那么这个类就是一个控制器了,RequestMapping表明匹配的路径,可以写 在类或者类的方法上,如果类上面有RequestMapping注解,那么其下面的方法就是相对于类上面注解地址的一个相对路径

 

 

定义一个接管请求的方法

方法名:无任何要求

--------------------------------------------------------------

参数:(顺序以及个数无任何要求)

HttpServletRequest

HttpServletResponse

PrintWriter             相当于HttpResponse.getWriter()获得的对象

Map                       其实是获得了ModelAndView中的Model

BindingResult           绑定数据的处理结果

HttpSession             如果使用此参数,需要注意如果是第一次访问还没有session的话会报错

@PathVariable           用于接收路径变量

@RequestParam         相当于调用request.getParameter(“name”)方法

@CookieValue           获取cookie的值

@RequestHeader        获取header中的值

实体对象              会根据请求的参数名,注入到这个对象对于得属性中,必须提供set方法

等等等等等

--------------------------------------------------------------

返回值:

void                 

返回值是void,如果接收了PrintWriter 或者  HttpServletResponse 参数,那么返回的ModelAndView就是null,也就是直接将输出流输出到客户端,如果方法没有接收输出参数,后面会默认生成一个视图名

 

String                视图逻辑名

 

ModelAndView        是一个视图逻辑名+Map的封装类

其他任意类型         存入ModelAndView中的Model

--------------------------------------------------------------

 

不管我们的返回类型是什么,返回值会通过处理,最终返回一个ModelAndView或者null

例1:给方法定义一个请求映射并使用路径变量

    @RequestMapping("/id/{userid}/name/{username}")

    public String queryUser(@PathVariable("userid") long userID

           , @PathVariable("username") String userName

           , Map<String, User> model) {

      

       User user = new User();

       user.setUserID(userID);

       user.setUserName(userName);

      

       model.put("userInfo", user);

      

       return "Home";

    }

 

@RequestMapping定义路由映射,其中{userid} {username} 是PathVariable(路径变量)

这样我们只需访问 http://localhost:8080/SpringMVC/user/id/10001/name/liudehua 就能进入上面的方法

RequestMapping还可以使用通配符,如: /test/*/name/{name}

例2:接受请求参数

@RequestMapping("/save")

    public String save(@RequestParam("userName") String userName

           ,@RequestParam("Age") int age) {

      

       System.out .println(userName);

       System.out .println(age);

      

       return "Home";

    }

 

 

例3:请求参数直接注入到Model

@RequestMapping("/save")

    public String save(User user) {

      

       System.out .println(user.getUserID());

       System.out .println(user.getUserName());

      

       return "Home";

    }

 

例4:转发与重定向

转发:   (相当于 request.getRequestDispatcher(“”).forward(request, response))

return “forward:/user/test”;

 

重定向: (相当于response.redirect(“”))

return “redirect:/user/test”

return “redirect:http://www.google.com.hk”;

 

例5:根据HttpMethod来过滤请求

@RequestMapping(value="", method=RequestMethod.POST )

    public String Test(//…) {

       //…

}

 

 

例6:根据参数来进行过滤

@RequestMapping(params="hello=world", method={RequestMethod.GET, RequestMethod.POST})  

public String helloworld() {

}  

必须有个hello的参数并且名称为world,而且只能是get或post请求才会进入此方法

分享到:
评论

相关推荐

    Spring.3.x企业应用开发实战(完整版).part2

     《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...

    Spring3.x企业应用开发实战(完整版) part1

     《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...

    《精通Spring2.X企业应用开发详解》16-19章

    ======================================================================== &lt;br&gt;第1篇 概述 第1章 Spring概述 第2章 快速入门 第2篇 Spring核心技术 第3章 IoC容器概述 第4章 在IoC容器中...

    《精通Spring2.X企业应用开发详解》20-23

    ======================================================================== &lt;br&gt;第1篇 概述 第1章 Spring概述 第2章 快速入门 第2篇 Spring核心技术 第3章 IoC容器概述 第4章 在IoC容器中...

    spring-3.x-web-app-template:Spring 3.0 MVC 应用程序入门模板

    spring-3.x-web-app-template Spring 3.x MVC 应用程序入门模板 运行应用程序 gradle jettyRun 打开浏览器

    《精通Spring2.X企业应用开发详解》随书源码1-15章

    ======================================================================== &lt;br&gt;第1篇 概述 第1章 Spring概述 第2章 快速入门 第2篇 Spring核心技术 第3章 IoC容器概述 第4章 在IoC容器中...

    Spring mvc参考文档

    3.Spring 3.x企业应用开发实战 4.spring+MVC中文教程pdf 5.Spring2.5.中文帮助文档 6.SpringGuide 7.SpringMVC配置文件 8.Spring从入门到精通 9.spring详细注解 10.精通Spring(清晰书页版) 11.使用注解方式配置的...

    spring boot 项目代码,直接启动本人编写的,里面包含PPT下载地址

    第二部分 点睛Spring MVC 4.x 第4 章 Spring MVC 基础 .... .......................... 72 第三部分 实战Spring Boot 第5 章 Spring Boot 基础 .... ......................... 122 第6 章 Spring Boot 核心 .... ....

    JavaEE开发的颠覆者 Spring Boot实战,多个地址免费下载,

    第二部分 点睛Spring MVC 4.x 第4 章 Spring MVC 基础 .... .......................... 72 第三部分 实战Spring Boot 第5 章 Spring Boot 基础 .... ......................... 122 第6 章 Spring Boot 核心 .... ....

    JavaEE开发的颠覆者+Spring+Boot实战++完整版

    出版社名称: 电子工业出版社 作者: 汪云飞 书名: JavaEE开发的颠覆者 Spring Boot实战 ISBN编号: 9787121282089 第一部分 点睛Spring 4.x 第1 章 Spring 基础 ..........................................2 1.1 ...

    springboot参考指南

    23.6.1. 加载YAML ii. 23.6.2. 在Spring环境中使用YAML暴露属性 iii. 23.6.3. Multi-profile YAML文档 iv. 23.6.4. YAML缺点 vii. 23.7. 类型安全的配置属性 i. 23.7.1. 第三方配置 ii. 23.7.2. 松散的绑定...

    Spring攻略(第二版 中文高清版).part1

    6.3 将Spring与Struts 1.x集成 220 6.3.1 问题 220 6.3.2 解决方案 220 6.3.3 工作原理 220 6.4 将Spring与JSF集成 226 6.4.1 问题 226 6.4.2 解决方案 226 6.4.3 工作原理 227 6.5 将Spring与DWR...

    spring security 参考手册中文版

    29.5.1 ActiveDirectoryLdapAuthenticationProvider 228 活动目录错误代码 229 30. JSP标签库 230 30.1声明Taglib 230 30.2授权标签 230 30.2.1禁用测试的标签授权 231 30.3认证标签 232 30.4 accesscontrollist标签...

    spring学习代码

    spring2.x学习代码,有很多例子,入门的hello例子,到AOP到MVC都有。

    springMVC:springMVC 从入门到放弃,spring mvc已经是弟弟级别了,在spring boot 和spring cloud 面前显得那么力不从心

    SpringMVC Java Web Maven项目 目录 Introduction 本意是打算从最基础,最简单的springMVC项目走起,先是最简单的,然后在最简单的基础上,继续一步步的添加,逐渐...IntelliJ IDEA 2017.1 x64 漫漫人生路 About Me

    Spring攻略(第二版 中文高清版).part2

    6.3 将Spring与Struts 1.x集成 220 6.3.1 问题 220 6.3.2 解决方案 220 6.3.3 工作原理 220 6.4 将Spring与JSF集成 226 6.4.1 问题 226 6.4.2 解决方案 226 6.4.3 工作原理 227 6.5 将Spring与DWR...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part3

    在当今Java EE 开发中,Spring 框架是当之无愧的王者。而Spring Boot 是Spring 主推的基于“习惯优于配置”的原则,让你能够快速搭建应用的框架,从而...A.1 基于JHipster 的代码生成 485 A.2 常用应用属性配置列表 488

    JavaEE开发的颠覆者SpringBoot实战[完整版].part2

    在当今Java EE 开发中,Spring 框架是当之无愧的王者。而Spring Boot 是Spring 主推的基于“习惯优于配置”的原则,让你能够快速搭建应用的框架,从而...A.1 基于JHipster 的代码生成 485 A.2 常用应用属性配置列表 488

    JavaEE开发的颠覆者SpringBoot实战[完整版].part1

    在当今Java EE 开发中,Spring 框架是当之无愧的王者。而Spring Boot 是Spring 主推的基于“习惯优于配置”的原则,让你能够快速搭建应用的框架,从而...A.1 基于JHipster 的代码生成 485 A.2 常用应用属性配置列表 488

Global site tag (gtag.js) - Google Analytics