SpringMVC基于模型-视图-控制器(MVC)模式实现,可以构建松耦合的web应用程序。

1、SpringMVC的请求过程

1)请求离开浏览器,并携带用户所请求的内容

2)DispatcherServlet角色为调度员(前端控制器)。查询一个或多个处理器映射确定处理请求的控制器

3)将请求发给选中的控制器业务处理

4)控制器处理完成后,将业务数据封装为模型,并指定一个逻辑视图名,一起返回给DispatcherServlet

5)DispatcherServlet将逻辑视图名匹配一个特定视图实现

6)使用模型数据渲染出指定的视图

7)返给前端展示

2、springMVC工程配置

web.xml

<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <!--<context-param>-->
<!--<param-name>contextConfigLocation</param-name>-->
<!--<param-value>classpath:applicationContext.xml</param-value>-->
<!--</context-param>-->
<!--<listener>-->
<!--<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>-->
<!--</listener>--> <servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springMvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping> </web-app>

springMvc.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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 扫描控制器 -->
<context:component-scan base-package="com.cn.controller"></context:component-scan>
<!-- 处理器映射 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean> </beans>

3、控制器

 接受参数的方式

  • 查询参数
  • 表单参数
  • 路径变量

控制器

package com.cn.controller;

import com.cn.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import javax.validation.Valid; @Controller
public class HelloController { @RequestMapping("/home")
public String home(){
System.out.println("执行home");
return "home"; //返回一个字符串,即逻辑视图名
} @RequestMapping("/home2")
public String home2(){
System.out.println("执行home2");
return "redirect:home3"; //含有redirect的字符串,表示重定向到另一个处理器;
//如果含有forward的字符串,表示转向到另一个处理器
} @RequestMapping("/home3")
public String home3(){
System.out.println("输出home");
return "home3";
} @RequestMapping("/show3") //表单参数,,@Valid注解与添加了校验注解的User配合使用
public String showPerson3(@Valid User user, Errors errors){//Errors参数必须紧跟@Valid的参数
if (errors.hasErrors()){//校验是否有校验未通过的参数
System.out.println("表单元素校验不通过");
return "fail";
}
System.out.println("用户信息:"+user);
return "success";
} @RequestMapping("/{name}/{age}") //路径参数 http://localhost:8080/tt/123 输出:名称:tt 年龄:123;;
public String showPerson2(@PathVariable(value = "name") String name,
@PathVariable(value = "age") String age){
System.out.println("名称:"+name+" 年龄:"+age);
return "success";
} @RequestMapping("/show") //查询参数 http://localhost:8080/show?name=pp&age=99 输出:名称:pp 年龄:99;;
public String showPerson(@RequestParam(value = "name", defaultValue = "laowang") String name,
@RequestParam(value = "age", defaultValue = "100") String age){
System.out.println("名称:"+name+" 年龄:"+age);
return "success";
} }

POJO

package com.cn.pojo;

import com.sun.istack.internal.NotNull;

import javax.validation.constraints.Size;

public class User {
  //表单参数校验
@NotNull
@Size(min = 6,max = 10)
private String firstName;
@NotNull
@Size(min = 6,max = 10)
private String lastName;
@NotNull
@Size(min = 6,max = 10)
private String name;
@NotNull
@Size(min = 6,max = 10)
private String passwd; public String getFirstName() {
return firstName;
} public void setFirstName(String firstName) {
this.firstName = firstName;
} public String getLastName() { return lastName;
} public void setLastName(String lastName) {
this.lastName = lastName;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPasswd() {
return passwd;
} public void setPasswd(String passwd) {
this.passwd = passwd;
} @Override
public String toString() {
return "User{" +
"firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
", name='" + name + '\'' +
", passwd='" + passwd + '\'' +
'}';
}
}

4、视图解析器

  • 在控制器中返回的字符串(不包含redirect、forward)表示逻辑视图名,而不会调用具体的视图实现。spring的视图解析器能够决定使用哪种视图实现去渲染模型。SpringMvc定义了一个ViewResolver 接口,返回为View对象
public interface ViewResolver {
View resolveViewName(String var1, Locale var2) throws Exception;
}

View接口定义,其中render方法接受模型、request、response参数,并将模型数据渲染到response中

public interface View {
String RESPONSE_STATUS_ATTRIBUTE = View.class.getName() + ".responseStatus";
String PATH_VARIABLES = View.class.getName() + ".pathVariables";
String SELECTED_CONTENT_TYPE = View.class.getName() + ".selectedContentType"; String getContentType(); void render(Map<String, ?> var1, HttpServletRequest var2, HttpServletResponse var3) throws Exception;
}
  • 视图解析器的实现

Spring提供了ViewResolver 多个内置的实现,比如InternalResourceViewResolver、TilesViewResolver...其中InternalResourceViewResolver(最简单、最常用的视图解析器)将视图解析为Web应用的内部资源(一般为jsp)

  • 创建JSP视图

Spring支持两种JSP视图的方式---使用InternalResourceViewResolver

方式1:在页面中使用JSP标准标签库(JSTL),InternalResourceViewResolver能够将视图名解析为JstlView形式的JSP文件

方式2:使用Spring提供的JSP标签库(两个:一个用于表单到模型的绑定;另一个提供了通用工具类特性)

a、配置适用于JSP的视图解析器

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>

  控制器中返回的字符串与该配置中的前后缀拼接成完成的文件路径,控制器中返回的字符串如果包含了斜线,则可以区分出了不同的目录。该配置会将逻辑视图名解析为InternalResourceView实例。

如过JSP中使用JSTL标签来处理内容,则希望视图解析器将视图解析为JstlView实例。仅仅添加一行配置文件即可:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>

b、Spring的JSP的标签库

...

spring-构建mvc工程的更多相关文章

  1. Spring Boot——2分钟构建spring web mvc REST风格HelloWorld

    之前有一篇<5分钟构建spring web mvc REST风格HelloWorld>介绍了普通方式开发spring web mvc web service.接下来看看使用spring b ...

  2. 使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务

    原文地址:http://www.ibm.com/developerworks/cn/web/wa-restful/ 简介: Spring,构建 Java™ 平台和 Enterprise Edition ...

  3. [转]Spring Boot——2分钟构建spring web mvc REST风格HelloWorld

    Spring Boot——2分钟构建spring web mvc REST风格HelloWorld http://projects.spring.io/spring-boot/ http://spri ...

  4. 使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程(十五)

    在之前的所有Spring Boot和Spring Cloud相关博文中,都会涉及Spring Boot工程的创建.而创建的方式多种多样,我们可以通过Maven来手工构建或是通过脚手架等方式快速搭建,也 ...

  5. 使用方法拦截机制在不修改原逻辑基础上为 spring MVC 工程添加 Redis 缓存

    首先,相关文件:链接: https://pan.baidu.com/s/1H-D2M4RfXWnKzNLmsbqiQQ 密码: 5dzk 文件说明: redis-2.4.5-win32-win64.z ...

  6. 使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程

    在之前的所有Spring Boot和Spring Cloud相关博文中,都会涉及Spring Boot工程的创建.而创建的方式多种多样,我们可以通过Maven来手工构建或是通过脚手架等方式快速搭建,也 ...

  7. Spring Boot教程(十五)使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程

    在之前的所有Spring Boot和Spring Cloud相关博文中,都会涉及Spring Boot工程的创建.而创建的方式多种多样,我们可以通过Maven来手工构建或是通过脚手架等方式快速搭建,也 ...

  8. Spring 4 MVC+Hibernate 4+MySQL+Maven使用注解集成实例

    Spring 4 MVC+Hibernate 4+MySQL+Maven使用注解集成实例 转自:通过注解的方式集成Spring 4 MVC+Hibernate 4+MySQL+Maven,开发项目样例 ...

  9. Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->Spring Framework中的spring web MVC模块

    spring framework中的spring web MVC模块 1.概述 spring web mvc是spring框架中的一个模块 spring web mvc实现了web的MVC架构模式,可 ...

  10. 使用XFire+Spring构建Web Service(一)——helloWorld篇

    转自:http://www.blogjava.net/amigoxie/archive/2007/09/26/148207.html原文出处:http://tech.it168.com/j/2007- ...

随机推荐

  1. PHP 调用web service接口(.net开发的接口)

    实例代码1: try { $this->soapClientObj = new SoapClient(self::URL . '?wsdl', array('connection_timeout ...

  2. Mysql 优化配置2

    服务器物理硬件的优化 来源社区,个人作为收集 在挑选硬件服务器时,我们应该从下面几个方面着重对MySQL服务器的硬件配置进行优化,也就是说将项目中的资金着重投入到如下几处: 1.磁盘寻道能力(磁盘I/ ...

  3. Studying TCP's Congestion Window using NS

    Studying TCP's Congestion Window using NS How to obtain TCP's CWND value The most important value th ...

  4. UIButton中的**EdgeInsets是做什么用的?

    UIButton中的**EdgeInsets是做什么用的? UIEdgeInsetsMake Creates an edge inset for a button or view.An inset i ...

  5. /usr/lib64/python2.6/site-packages/cryptography/__init__.py:26: DeprecationWarning: Python 2.6 is no longer supported by the Python core team

    升级python2.6到2.7后,执行ansible后一直显示警告,如标题所示. 因为安装ansible,使用的是yum的方式,而yum使用的是python2.6,所以ansible安装环境为pyth ...

  6. HDU ACM 2895-Edit distance

    Edit distance Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total ...

  7. Spring-aop实现切面的四种方式 (2)

    AOP实现方式一 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http ...

  8. vscode:配置git

    1.下载git,并找到安装git的文件位置,并找到git文件夹下面的Bin文件夹    2.配置环境变量 位置:右击‘计算机’->属性->高级系统设置->环境变量 最后点击确定即可 ...

  9. JavaScript的DOM_获取和操作层次节点

    一.层次节点的概述 节点的层次结构可以划分为:父节点与子节点.兄弟节点这两种.当我们获取其中一个元素节点的时候,就可以使用层次节点属性来获取它相关层次的节点. 二.childNodes 属性 chil ...

  10. pexpect 初坑

    通过一个很坑的任务,最近认识了一个新坑: pexpect .其实基本的用法并不难,不过,我还是跟以前一样,把几个基本函数的坑蹚了个遍.有感而发,记录一下. 首先简单的介绍一下这个坑,哦不对,这个库.这 ...