文档章节

Spring MVC入门案例(1)

Simon丶Ma
 Simon丶Ma
发布于 2016/04/14 14:55
字数 1424
阅读 5
收藏 0
点赞 1
评论 0

开始Spring MVC

建立一个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请求才会进入此方法

 

 

 

© 著作权归作者所有

共有 人打赏支持
Simon丶Ma
粉丝 4
博文 134
码字总数 299850
作品 0
深圳
程序员
最新SpringMVC框架搭建入门教程

Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。 Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。 Spring MVC的易用性、功能强大等优点已经被越来越多的...

2846613430 ⋅ 2016/04/06 ⋅ 0

Java Web学习计划

--- 本月为入门阶段,从零开始,一步一步的做出一个实用的网站。 深入学习Java语言,初步掌握前端技术,使用JSP和MySQL完成一个简单的网站 第1周 Java高级编程学习目标:
1.深入了解JDK环境...

SVD ⋅ 2016/12/01 ⋅ 0

springmvc学习笔记(1)-框架原理和入门配置

springmvc学习笔记(1)-框架原理和入门配置 标签: springmvc [TOC] 本文主要介绍springmvc的框架原理,并通过一个入门程序展示环境搭建,配置以及部署调试。 springmvc是spring框架的一个模块...

brianway ⋅ 2016/03/08 ⋅ 0

Spring 的学习资料汇总

1.Spring框架快速入门之简介(http://blog.chinaunix.net/uid-12306154-id-1747386.html?bsh_bid=266894719) 2.Spring简单入门实例(http://blog.csdn.net/oscar999/article/details/9122415)......

IT追寻者 ⋅ 2016/07/17 ⋅ 0

SpringMVC入门demo

为什么要学习SpringMVC呢? Spring框架号称是JavaEE应用的一站式解决方案,Spring本身有提供了一个设计优良的MVC框架,SpringMVC。由于Spring框架拥有极高的市场占有率,因此越来越多的Sprin...

武小猪 ⋅ 2017/04/15 ⋅ 0

SpringMVC 中的Controller返回JSON数据

SpringMVC中的Controller返回JSON问题 ①配置JSON解析器 ②使用注解@ResponseBody返回的是json,没有使用该注解,则会进行页面跳转。 方案一

IamOkay ⋅ 2014/11/21 ⋅ 0

Spring Boot 2.0 WebFlux 上手系列课程:快速入门(一)

02:WebFlux 快速入门实践 ## Spring Boot 2.0 spring.io 官网有句醒目的话是: BUILD ANYTHING WITH SPRING BOOT Spring Boot (Boot 顾名思义,是引导的意思)框架是用于简化 Spring 应用从...

泥沙砖瓦浆木匠 ⋅ 04/15 ⋅ 0

手把手教你搭建SpringMVC——最小化配置

为什么需要Spring MVC 最开始接触网页的时候,是纯的html/css页面,那个时候还是用Dreamweaver来绘制页面。 随着网站开发的深入,开始学习servlet开发,记得最痛苦的就是servlet返回网页的内...

青夜之衫 ⋅ 2017/12/05 ⋅ 0

Spring MVC 到 Spring BOOT的简化之路

背景 从Servlet技术到Spring和Spring MVC,开发Web应用变得越来越简捷。但是Spring和Spring MVC的众多配置有时却让人望而却步,相信有过Spring MVC开发经验的朋友能深刻体会到这一痛苦。因为...

临江仙卜算子 ⋅ 05/09 ⋅ 0

spring MVC入门示例(hello world demo)

Spring MVC介绍 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应...

闵开慧 ⋅ 2014/07/29 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Sqoop

1.Sqoop: 《=》 SQL to Hadoop 背景 1)场景:数据在RDBMS中,我们如何使用Hive或者Hadoop来进行数据分析呢? 1) RDBMS ==> Hadoop(广义) 2) Hadoop ==> RDBMS 2)原来可以通过MapReduce I...

GordonNemo ⋅ 27分钟前 ⋅ 0

全量构建和增量构建的区别

1.全量构建每次更新时都需要更新整个数据集,增量构建只对需要更新的时间范围进行更新,所以计算量会较小。 2.全量构建查询时不需要合并不同Segment,增量构建查询时需要合并不同Segment的结...

无精疯 ⋅ 38分钟前 ⋅ 0

如何将S/4HANA系统存储的图片文件用Java程序保存到本地

我在S/4HANA的事务码MM02里为Material维护图片文件作为附件: 通过如下简单的ABAP代码即可将图片文件的二进制内容读取出来: REPORT zgos_api.DATA ls_appl_object TYPE gos_s_obj.DA...

JerryWang_SAP ⋅ 56分钟前 ⋅ 0

云计算的选择悖论如何对待?

导读 人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云...

问题终结者 ⋅ 今天 ⋅ 0

637. Average of Levels in Binary Tree - LeetCode

Question 637. Average of Levels in Binary Tree Solution 思路:定义一个map,层数作为key,value保存每层的元素个数和所有元素的和,遍历这个树,把map里面填值,遍历结束后,再遍历这个map,把每...

yysue ⋅ 今天 ⋅ 0

IDEA配置和使用

版本控制 svn IDEA版本控制工具不能使用 VCS-->Enable Version Control Integration File-->Settings-->Plugins 搜索Subversion,勾选SVN和Git插件 删除.idea文件夹重新生成项目 安装SVN客户......

bithup ⋅ 今天 ⋅ 0

PE格式第三讲扩展,VA,RVA,FA的概念

作者:IBinary 出处:http://www.cnblogs.com/iBinary/ 版权所有,欢迎保留原文链接进行转载:) 一丶VA概念 VA (virtual Address) 虚拟地址的意思 ,比如随便打开一个PE,找下它的虚拟地址 这边...

simpower ⋅ 今天 ⋅ 0

180623-SpringBoot之logback配置文件

SpringBoot配置logback 项目的日志配置属于比较常见的case了,之前接触和使用的都是Spring结合xml的方式,引入几个依赖,然后写个 logback.xml 配置文件即可,那么在SpringBoot中可以怎么做?...

小灰灰Blog ⋅ 今天 ⋅ 0

冒泡排序

原理:比较两个相邻的元素,将值大的元素交换至右端。 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第...

人觉非常君 ⋅ 今天 ⋅ 0

Vagrant setup

安装软件 brew cask install virtualboxbrew cask install vagrant 创建project mkdir -p mst/vmcd mst/vmvagrant init hashicorp/precise64vagrant up hashicorp/precise64是一个box......

遥借东风 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部