Spring MVC应用一般包括4个步骤:

(1)配置web.xml,指定业务层对应的spring配置文件,定义DispatcherServlet;

(2)编写处理请求的控制器

(3)编写视图对象,例如jsp

(4)配置springmvc配置文件,使得控制器,视图解析器生效

第一步:web.xml配置:

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns="http://java.sun.com/xml/ns/javaee"  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  id="WebApp_ID" version="2.5">

<display-name>SpringMvc01</display-name>

<context-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>classpath:spring-mvc.xml</param-value>
 </context-param>
 <listener>
 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>

<servlet>

<servlet-name>springmvc</servlet-name>

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

/* <init-param>

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

<param-value>classpath:spring-mvc.xml</param-value>   --业务层对应的配置文件

</init-param>  */

</servlet>

<servlet-mapping>

<servlet-name>springmvc</servlet-name>

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

</servlet-mapping>

</web-app>

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

第二步:编写控制器:

使用一个@Controller可以将一个POJO转化为处理请求的控制器

@Controller

@RequestMapping("/user")

public class UserController{

  @RequestMapping("/register")

  public String register(){

    return "user/register";

  }

}

--register()方法返回的字符串,它代表一个逻辑视图名,将由视图解析器解析为一个具体的试图对象,

第三步:编写视图对象

使用一个register.jsp作为一个视图对象,处理完UserController#register()后,将转到这个界面

第四步:springMVC的配置文件 spring-mvc-xml:

<!-- 使用注解的包,包括子集 -->

<context:component-scan base-package="com.java1234"/>--扫描包下的所有类,使得标注的注解生效,

<!-- 视图解析器 -->

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

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

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

</bean>

<bean id="multipartResolver"         class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<property name="defaultEncoding" value="UTF-8"/>

<property name="maxUploadSize" value="10000000"/>

</bean>

---@RequestMapping()在类定义处指定的URL相当于Web应用的部署路径,而在方法处指定的URL则相对于类定义处指定的URL,如果在类定义处未标注,只是在方法处标注RequestMapping(),此时方法处指定的URL相对于部署路径;

@RequestMapping()除了可以通过URL映射请求外,还可以通过请求方法,请求头参数以及请求参数映射请求;

例如:

@RequestMapping(value="/delete",method=RequestMethod.POST,params="userid")

RequestMapping的value、method、params、headers分别表示请求URL、请求方法、请求参数、及报文头的文件的映射文件、他们之间是与的关系、

处理方法的签名的详细说明:

使用RequestParam绑定请求参数值,java类反射对象默认不记录方法入参的名称,因此需要在方法入参处使用@RequestParam注解指定其对应的参数,

@RequestParam()有以下3个参数:

value:参数名

request:是否必须,默认是true必须,表示请求中必须包含对应的参数名,如果不存在则抛出异常

@CookieValue()绑定请求中的Cookie值

@RequestHeader()绑定请求报文头的属性值

使用命令/表单对象绑定请求参数值,

(1)SpringMVC校验:

配置hibernate校验器(与hibernate毫无关系)

校验器注入到处理器适配器中

在pojo中添加校验规则

捕获校验错误信息

@RequestMapping("/editItemsSubmit")

public String editItemsSubmit(Model model,HttpServletRequest request,Intrger id,

@Validate ItemCustom itemCustom,BindingResult bindingResult) throws Exception(){}

//在需要校验的pojo前边添加@Validated,在需要校验的pojo后边添加BindingResult bindingResult接收校验出错信息

//注意:@Validated和BindingResult bindingResult是配对出现,并且形参顺序是固定的(一前一后)。

通过model.addAttribute(...)绑定传到后台

分组校验:

在pojo中定义校验规则,而pojo是被多个 controller所共用,当不同的controller方法对同一个pojo进行校验,但是每个controller方法需要不同的校验

解决方法:

定义多个校验分组(其实是一个java接口),分组中定义有哪些规则

每个controller方法使用不同的校验分组

(1)定义一个接口不需要任何方法

(2)在pojo中注解里加groups={接口名.class}

(3)在control的方法中指定分组的校验

@Validated(value={ValidGroup1.class})

数据回显:

1、springmvc默认对pojo数据进行回显。

pojo数据传入controller方法后,springmvc自动将pojo数据放到request域,key等于pojo类型(首字母小写)

使用@ModelAttribute指定pojo回显到页面在request中的key

2、@ModelAttribute还可以将方法的返回值传到页面

在商品查询列表页面,通过商品类型查询商品信息。

在controller中定义商品类型查询方法,最终将商品类型传到页面

@ModelAttribute("itemTypes")

页面上就可以得到itemTypes的数据;

3、使用最简单方法使用model,可以不用@ModelAttribute

model.addAttribute(...);

使用最简单方法使用model。

model.addAttribute("id", id);

异常处理

系统遇到异常,在程序中手动抛出,dao抛给service、service给controller、controller抛给前端控制器,前端控制器调用全局异常处理器

springmvc提供一个HandlerExceptionResolver接口

解析出异常类型

如果该 异常类型是系统 自定义的异常,直接取出异常信息,在错误页面展示

如果该 异常类型不是系统 自定义的异常,构造一个自定义的异常类型(信息为“未知错误”)

@Override

public ModelAndView resolveException(HttpServletRequest request,

HttpServletResponse response, Object handler, Exception ex) {

}

RESTful(即Representational State Transfer的缩写)其实是一个开发理念,是对http的很好的诠释。

1、对url进行规范,写RESTful格式的url

非REST的url:http://...../queryItems.action?id=001&type=T01

REST的url风格:http://..../items/001

特点:url简洁,将参数通过url传到服务端

2、http的方法规范

不管是删除、添加、更新。。使用url是一致的,如果进行删除,需要设置http的方法为delete,同理添加。。。

后台controller方法:判断http方法,如果是delete执行删除,如果是post执行添加

3、对http的contentType规范

请求时指定contentType,要json数据,设置成json格式的type。。

@RequestMapping(value="/ itemsView/{id}"):{×××}占位符,请求的URL可以是“/viewItems/1”或“/viewItems/2”,通过在方法中使用@PathVariable获取{×××}中的×××变量。

@PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上。

如果RequestMapping中表示为"/ itemsView /{id}",id和形参名称一致,@PathVariable不用指定名称。

在web.xml配置:

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

拦截器

1.1 拦截定义

定义拦截器,实现HandlerInterceptor接口。接口中提供三个方法。

SpringMvc简单实例的更多相关文章

  1. SpringMVC简单实例(看起来有用)

    SpringMVC简单实例(看起来有用) 参考: SpringMVC 基础教程 简单入门实例 - CSDN博客http://blog.csdn.net/swingpyzf/article/detail ...

  2. springmvc 项目完整示例01 需求与数据库表设计 简单的springmvc应用实例 web项目

    一个简单的用户登录系统 用户有账号密码,登录ip,登录时间 打开登录页面,输入用户名密码 登录日志,可以记录登陆的时间,登陆的ip 成功登陆了的话,就更新用户的最后登入时间和ip,同时记录一条登录记录 ...

  3. SpringMVC笔记——SSM框架搭建简单实例

    落叶枫桥 博客园 首页 新随笔 联系 订阅 管理 SpringMVC笔记——SSM框架搭建简单实例 简介 Spring+SpringMVC+MyBatis框架(SSM)是比较热门的中小型企业级项目开发 ...

  4. SpringMVC笔记——Spring+MyBatis组合开发简单实例

    简介 SSH框架很强大,适合大型项目开发.但学无止境,多学会一门框架组合开发会让自己增值许多. SSM框架小巧精致,适合中小型项目快速开发,对于新手来说也是简单上手的.在SSM框架搭建之前,我们先学习 ...

  5. SpringMVC HelloWorld实例开发及部署

    SpringMVC HelloWorld实例开发及部署 2017-01-24 目录 1 Tomcat及Eclipse Tomcat插件安装配置  1.1 Tomcat的安装  1.2 Eclipse ...

  6. 使用WebUploader客户端批量上传图片,后台使用springMVC接收实例

    使用WebUploader客户端批量上传图片,后台使用springMVC接收实例 我是搞Java后台的,因为最近主管让用webUploader写客户端,但是在网上找了很多,能够复制就能用的并没有几个, ...

  7. 【SpringMVC架构】SpringMVC入门实例,解析工作原理(二)

    上篇博文,我们简单的介绍了什么是SpringMVC.这篇博文.我们搭建一个简单SpringMVC的环境,使用非注解形式实现一个HelloWorld实例,从简单入手,逐步深入. 环境准备 我们须要有主要 ...

  8. Hibernate(二)__简单实例入门

    首先我们进一步理解什么是对象关系映射模型? 它将对数据库中数据的处理转化为对对象的处理.如下图所示: 入门简单实例: hiberante 可以用在 j2se 项目,也可以用在 j2ee (web项目中 ...

  9. 最新 Eclipse IDE下的Spring框架配置及简单实例

    前段时间开始着手学习Spring框架,又是买书又是看视频找教程的,可是鲜有介绍如何配置Spring+Eclipse的方法,现在将我的成功经验分享给大家. 本文的一些源代码来源于码农教程:http:// ...

随机推荐

  1. MVVM模式下实现拖拽

    在文章开始之前先看一看效果图 我们可以拖拽一个"游戏"给ListBox,并且ListBox也能接受拖拽过来的数据, 但是我们不能拖拽一个"游戏类型"给它. 所以 ...

  2. JDK BIO编程

    网络编程的基本模型是Client/Server模型,也就是两个进程之间进行相互通信,其中服务端提供位置信息(绑定的IP地址和监听端口),客户端通过连接操作向服务端监听的地址发起连接请求,通过三次握手建 ...

  3. AngularJS学习之模型

    1.ng-model指令:可以将输入域的值与AngularJS创建的变量绑定,用于绑定应用程序数据到HTML控制器(input,select,textarea)的值: <div ng-app=& ...

  4. 字体和壁纸合并后再更改壁纸--《用delphi开发共享软件》-15.2桌面提示器

    procedure TFrmPlay.mnDeskPicClick(Sender: TObject); Var s:String; i:Integer; begin //s:=Path+'SetPic ...

  5. CSS-布局【1】-图片在div中垂直居中

    方法一:通过增加100%高度行内块居中对齐 <!DOCTYPE html> <html> <head> <meta name="viewport&q ...

  6. 每天一个linux命令--退出<符号

    linux出现如下情况: [calendar@test190 logs]$ [calendar@test190 logs]$ [calendar@test190 logs]$ [calendar@te ...

  7. 【oracle】oracle启动和关闭步骤

    前言: 首先要知道,Oracle数据库的完整启动过程是分步骤完成的,包含以下3个步骤: 启动实例-->加载数据库-->打开数据库 因为Oracle数据库启动过程中不同的阶段可以对数据库进行 ...

  8. 推荐两款PC健康小软件

    一.前言 对于经常需要坐在电脑前工作一整天的人来说,健康问题是不得不关注的.下面推荐我一直在用的两款体积非常小(几百KB)的健康小软件,也许可以在无形中保护你.提醒你. 1. FadeTop 这是一款 ...

  9. HDU 2855 (矩阵快速幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2855 题目大意:求$S(n)=\sum_{k=0}^{n}C_{n}^{k}Fibonacci(k)$ ...

  10. input type=checkbox checked disabled

    input type=checkbox checked disabled 禁用无法提交!