SpringMVC是什么

  SpringMVC是目前最好的实现MVC设计模式的框架,是Spring框架的一个分支产品,以SpringIOC容器为基础,并利用容器的特性来简化它的配置。SpringMVC相当于Spring的一个子模块,可以很好的和Spring结合起来进行开发,是JavaWeb开发者必须要掌握的框架。实现了MVC设计模式,MVC设计模式是一种常用的软件架构方式:以Controller(控制层),Model(模型层),View(视图层)三个模块分离的形式来组织代码。

SpringMVC的执行顺序

1、 用户发送请求至前端控制器DispatcherServlet

2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。

3、 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

4、 DispatcherServlet通过HandlerAdapter处理器适配器调用处理器

5、 执行处理器(Controller,也叫后端控制器)。

6、 Controller执行完成返回ModelAndView

7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet

8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器

9、 ViewReslover解析后返回具体View

10、 DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。

11、 DispatcherServlet响应用户

代码编写

1、配置web.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  6. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  7. <display-name></display-name>
  8. <welcome-file-list>
  9. <welcome-file>index.jsp</welcome-file>
  10. </welcome-file-list>
  11.  
  12. <servlet>
  13. <servlet-name>springmvc</servlet-name>
  14. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  15. <init-param>
  16. <param-name>contextConfigLocation</param-name>
  17. <!-- 指定springmvc.xml的路径 -->
  18. <param-value>classpath:springmvc.xml</param-value>
  19. </init-param>
  20. </servlet>
  21. <servlet-mapping>
  22. <servlet-name>springmvc</servlet-name>
  23. <url-pattern>/</url-pattern>
  24. </servlet-mapping>
  25.  
  26. </web-app>

3、配置springmvc.xml文件

  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <beansxmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xmlns:mvc="http://www.springframework.org/schema/mvc"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
  7. http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
  8. http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
  9. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
  10. <!-- 配置自动扫描 -->
  11. <context:component-scanbase-package="cn.test.springmvc.controller"/>
  12.    <!-- 配置视图解析器 -->
  13. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  14. <!-- 前缀 -->
  15. <property name="prefix" value="/"></property>
  16. <!-- 后缀 -->
  17. <property name="suffix" value=".jsp"></property>
  18. </bean>
  19.  
  20. </beans>

3、编写测试类

  1. @Controller
  2. publicclass ItemController {
  3.  
  4. @RequestMapping("/itemList")
  5. public ModelAndView itemList() throws Exception {
  6.  
  7. List<Items>itemList = new ArrayList<>();
  8.  
  9. //商品列表
  10. Items items_1 = new Items();
  11. items_1.setName("联想笔记本_3");
  12. items_1.setPrice(6000f);
  13. items_1.setDetail("ThinkPad T430 联想笔记本电脑!");
  14.  
  15. Items items_2 = new Items();
  16. items_2.setName("苹果手机");
  17. items_2.setPrice(5000f);
  18. items_2.setDetail("iphone6苹果手机!");
  19.  
  20. itemList.add(items_1);
  21. itemList.add(items_2);
  22. //创建modelandView对象
  23. ModelAndView modelAndView = new ModelAndView();
  24. //添加model
  25. modelAndView.addObject("itemList", itemList);
  26. //添加视图
  27. modelAndView.setViewName("/WEB-INF/jsp/itemList.jsp");
  28. // modelAndView.setViewName("itemsList");
  29. returnmodelAndView;
  30. }
  31.  
  32. }

SpringMVC的注解

一、@RequestMapping

SpringMVC通过@RequestMapping注解将URL请求与业务方法进行进行映射。

参数:

1.value:指定URL请求的实际地址,是@RequestMapping的默认值。

2.method:指定请求的method类型, GET、POST、PUT、DELETE等。

3.params:指定request中必须包含某些参数值,否则无法调用该方法。

  1. @RequestMapping(value="paramsTest",params={"name","id=10"})
  2. public String paramsTest(){
  3. System.out.println("paramsTest");
  4. return "index";
  5. }

二、参数绑定:

params是对URL请求的参数进行限制,不满足条件的URL无法到达业务方法,这个特性并不是我们开发中常用的,我们需要用到的是在业务方法中获取URL的参数,实现这一步很简单。

1.在业务方法定义时声明参数列表。

2.给参数列表添加@RequestParam注解。

  1. @RequestMapping(value="paramsBind")
  2. public String paramsBind(@RequestParam("name") String name,@RequestParam("id") int id){
  3. System.out.println(name);
  4. int num = id+10;
  5. System.out.println(num);
  6. return "index";
  7. }

三、映射Cookie:

SpringMVC通过映射可以直接在业务方法中获取Cookie的值。

  1. @RequestMapping("/cookieTest")
  2. public String getCookie(@CookieValue(value="JSESSIONID") String sessionId){
  3. System.out.println(sessionId);
  4. return "index";
  5. }

使用pojo绑定参数

SpringMVC会根据请求参数名和pojo属性名进行自动匹配,自动为该对象填充属性值。并且支持级联属性。

1.创建实体类Address,User并进行级联设置。

  1. public class Address {
  2. private int id;
  3. private String name;
  4. public int getId() {
  5. return id;
  6. }
  7. public void setId(int id) {
  8. this.id = id;
  9. }
  10. public String getName() {
  11. return name;
  12. }
  13. public void setName(String name) {
  14. this.name = name;
  15. }
  16.  
  17. }
  1. public class User {
  2. private int id;
  3. private String name;
  4. private Address address;
  5.  
  6. public Address getAddress() {
  7. return address;
  8. }
  9. public void setAddress(Address address) {
  10. this.address = address;
  11. }
  12. public int getId() {
  13. return id;
  14. }
  15. public void setId(int id) {
  16. this.id = id;
  17. }
  18. public String getName() {
  19. return name;
  20. }
  21. public void setName(String name) {
  22. this.name = name;
  23. }
  24.  
  25. }

2.创建addUser.jsp。

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <form action="addUser" method="post">
  11. 编号:<input type="text" name="id"/><br/>
  12. 姓名:<input type="text" name="name"/><br/>
  13. 地址:<input type="text" name="address.name"/><br/>
  14. <input type="submit" value="提交"/>
  15. </form>
  16. </body>
  17. </html>

3.业务方法。

  1. @RequestMapping("/addUser")
  2. public String getPOJO(User user){
  3. System.out.println(user);
  4. return "index";
  5. }

重定向和转发

  1. //重定向
  2. @RequestMapping("redirectTest")
  3. public String redirectTest(){
  4. return "redirect:/index.jsp";
  5. }
  6.  
  7. //转发
  8. @RequestMapping("forwardTest")
  9. public String forwardTest(){
  10. return "forward:/index.jsp";
  11. }

SpringMVC(一) 简单代码编写,注解,重定向与转发的更多相关文章

  1. SpringMVC 配置 & 初识 & 注解 &重定向与转发

    初识 在web.xml 中注册DispatcherServlet <servlet> <servlet-name>springmvc</servlet-name> ...

  2. 使用Spring注解来简化ssh框架的代码编写

     目的:主要是通过使用Spring注解的方式来简化ssh框架的代码编写. 首先:我们浏览一下原始的applicationContext.xml文件中的部分配置. <bean id="m ...

  3. 初识Java程序,编写简单代码?

    Dear All: 初识Java程序,编写简单代码? 首先小编在这里说下我们今天编写Java程序使用的是 eclipse 开发工具! 1.下载eclipse 官网地址:http://www.eclip ...

  4. 【lombok】使用lombok注解,在代码编写过程中可以调用到get/set方法,但是在编译的时候无法通过,提示找不到get/set方法

    错误如题:使用lombok注解,在代码编写过程中可以调用到get/set方法,但是在编译的时候无法通过,提示找不到get/set方法 报错如下: 解决方法: 1.首先查看你的lombok插件是否下载安 ...

  5. 【转载】springMVC表单校验+全注解

    在这篇文章中,我们将学习如何使用Spring表单标签, 表单验证使用 JSR303 的验证注解,hibernate-validators,提供了使用MessageSource和访问静态资源(如CSS, ...

  6. 关于什么是SpringMVC,和SpringMVC基于xml配置、注解配置、纯注解配置

    首先我们先要了解一下,什么是SpringMVC? SpringMVC是Spring框架内置的MVC的实现.SpringMVC就是一个Spring内置的MVC子框架,也就是说SpringMVC的相关包都 ...

  7. springMVC之一(页面<--->控制器 互相传值,转发和重定向)

    #页面--->控制器1.request:不建议使用2.使用属性传值(建议使用)@RequestParam("name") String username3.使用Bean对象传 ...

  8. SpringMVC系列(九)自定义视图、重定向、转发

    一.自定义视图 1. 自定义一个视图HelloView.java,使用@Component注解交给Spring IOC容器处理 package com.study.springmvc.views; i ...

  9. SpringMVC源码解读 - RequestMapping注解实现解读 - RequestCondition体系

    一般我们开发时,使用最多的还是@RequestMapping注解方式. @RequestMapping(value = "/", param = "role=guest& ...

随机推荐

  1. Linux中文件上传使用rz

    1.首先,要是服务器不支持rz命令的话,需要安装执行 sudo yum -y install lrzsz 2.再输入rz -be命令,选择需要上传的本地文件 sudo rz 从服务端发送文件到客户端: ...

  2. 关于jquery文件上传插件 uploadify 3.1的使用

    要使用uplaodify3.1,自然要下载相应的包,下载地址http://www.uploadify.com/download/,这里有两种包,一个是基于flash,免费的,一个是基于html5,需要 ...

  3. EntityFramework使用及优化

    1. 简介 ORM框架:Object Relation Mapping,用操作对象的方式来操作数据库 其它框架:Dapper.NHibernate,首推EF,微软官方的. EF底层还是ADO.NET实 ...

  4. Sumblime Text3中使用vue-cli创建vue项目,代码不高亮,解决

    问题如下:在Sumblime Text3中打开vue-cli常见的项目,代码一片灰色 解决如下: 第一步:下载文件Vue components  链接 GitHub - vuejs/vue-synta ...

  5. JavaScript基础知识-正则表达式

    正则表达式 作用:定义一个特定的验证字符串内容规则的表达式 注:正则表达式并不是JavaScript独有的:JavaScript支持正则表达式 var a = { };  // 定义一个空对象     ...

  6. IIS的安装与配置详细图解教程

    IIS是Internet Information Services(互联网信息服务)的简称,是有微软公司提供的基于在windows操作系统环境下运行的互联网服务.此处将介绍如何安装配置IIS来构架自己 ...

  7. IE8不支持响应式设计解决方法

    下载并引入 respond.js 即可 为了针对IE8应用这段脚本,需要针对IE8的条件注释 <!--[if lt IE 9]> --- <! [endif]--> 为了不让并 ...

  8. CREATE TABLE 语句后的 ON [PRIMARY] 起什么作用

    CREATE   TABLE   [dbo].[table1]   ( [gh]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NOT   NULL ...

  9. Unity 指定区域随机实例化预制体Prefab 代码

    using UnityEngine; public class NewBehaviourScript : MonoBehaviour { public GameObject prefab; void ...

  10. failed to push some refs to 'git@github.com:RocsSun/mytest.git

    Git推送到GitHub仓库失败 使用Git将文件推送至GitHub的远程仓库时,报错failed to push some refs to 'git@github.com:RocsSun/mytes ...