文档章节

Spring MVC入门案例(1)

Simon丶Ma
 Simon丶Ma
发布于 2016/04/14 14:55
字数 1424
阅读 5
收藏 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
深圳
程序员
私信 提问
Spring Boot基础教程 ( 五 ) :构建 RESTful API 与单元测试

原文出处:didispace 首先,回顾并详细说明一下在快速入门中使用的、、注解。如果您对Spring MVC不熟悉并且还没有尝试过快速入门案例,建议先看一下快速入门的内容。 :修饰class,用来创建处...

didispace
09/27
0
0
SpringCloud SpringBoot mybatis分布式云架构构建RESTful API

首先,回顾并详细说明一下在快速入门中使用的、、注解。如果您对Spring MVC不熟悉并且还没有尝试过快速入门案例,建议先看一下快速入门的内容。 :修饰class,用来创建处理http请求的对象 :...

itcloud
08/16
0
0
SpringCloud SpringBoot 分布式微服务云架构 构建RESTful API

首先,回顾并详细说明一下在快速入门中使用的、、注解。如果您对Spring MVC不熟悉并且还没有尝试过快速入门案例,建议先看一下快速入门的内容。 :修饰class,用来创建处理http请求的对象 :...

itcloud
07/09
0
0
最新SpringMVC框架搭建入门教程

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

2846613430
2016/04/06
78
0
Java Web学习计划

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

SVD
2016/12/01
55
0

没有更多内容

加载失败,请刷新页面

加载更多

颜色模型与颜色应用---光的特性

电磁频谱 颜色的心理学特征

中国龙-扬科
35分钟前
2
0
android音频及强噪相关

Android AudioRecord和AudioTrack介绍(Android音频收集和播放 麦克风降噪) https://blog.csdn.net/tanningzhong/article/details/72844559 音频采集(AudioRecorder) https://www.jianshu.......

whoisliang
41分钟前
2
0
redis-持久化

RDB rdb持久化是把当前进程数据生成快照保存到磁盘的过程。触发RDB持久化过程分为手动触发和自动触发。 触发机制 bgsave执行流程 rdb优缺点 AOF 记录每次写命令,重启时再重新执行aof文件中的...

grace_233
46分钟前
3
0
电话激活Windows 中文操作系统步骤

已购买微软MAK批量授权,系统又在企业内网中,无法通过连接Internet进行激活,还可以通过电话完成激活。 前期准备 请提前准备好产品密钥,Product Key格式如下:XXXXX-XXXXX-XXXXX-XXXXX-XXX...

tonyfox
48分钟前
4
0
Apache用户认证,域名跳转,访问日志

Apache用户认证 当设置了用户认证后,用户访问网站时,需要输入用户名和密码才能访问。 可以全局设置,也可以为某几个虚拟主机单独配置。 下面以全局配置进行操作示例。 编辑httpd.conf进行配...

野雪球
53分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部