Spring MVC 基础笔记
spring mvc功能:
以Controller为中心完成对系统流程的控制管理
从请求中搜集数据
对传入的参数进行验证
将结果返回给视图
针对不同的视图提供不同的解决方案
针对jsp视图技术提供标签库
拦截器
上传文件
spring-mvc结构
1.DispatcherServlet:(需要自己配置)
中央控制器,把请求给转发到具体的控制类
2.Controller:(需要自己创建)
具体处理请求的控制器
3.handlerMapping:(需要自己配置)
映射处理器,负责映射中央处理器转发给controller时的映射策略
4.ModelAndView:(需要自己创建)
服务层返回的数据和视图层的封装类
5.ViewResolver & View:(需要自己配置)
视图解析器,解析具体的视图
6.Interceptors :(需要自己创建)
拦截器,负责拦截我们定义的请求然后做处理工作
具体执行流程图参见 url(spring-mvc流程图.png)
SpringMVC相关类库(导包)
com.springsource.javax.servlet.jsp.jstl-1.1.2.jar
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.apache.commons.logging-1.1.1.jar
com.springsource.org.apache.taglibs.standard-1.1.2.jar
org.springframework.aop-3.0.0.RELEASE.jar
org.springframework.asm-3.0.0.RELEASE.jar
org.springframework.beans-3.0.0.RELEASE.jar
org.springframework.context.support-3.0.0.RELEASE.jar
org.springframework.context-3.0.0.RELEASE.jar
org.springframework.core-3.0.0.RELEASE.jar
org.springframework.expression-3.0.0.RELEASE.jar
org.springframework.web.servlet-3.0.0.RELEASE.jar
org.springframework.web-3.0.0.RELEASE.jar
配置 web.xml
在web-app标签内配置:
<!-- 中央转发(控制)器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- 不要配置/*,否则404,但是可以配置 / -->
<url-pattern>*.do</url-pattern>
</servlet-mapping>
创建springmvc的核心配置文件(springmvc-servlet.xml) (非注解模式未详细说明)
文件的命名规则:中央控制器(servlet的名称)的名称+“-servlet.xml”
默认位置:WEB-INF下
配置:controller和视图解析器
controller控制器
也可以直接在配置文件中配置(但此方式不常使用,不再介绍,通常都使用注解开发,直接开启注解即可)
<!-- 指定使用注解的包,该包及其以下的所有内容均会被扫描 -->
<context:component-scan base-package="com.rl.controller"/>
<!-- mvc注解的驱动但是如果context:component-scan存在mvc:annotation就没有必要配 -->
<!-- <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>
controller
controller的配置
@controller:标识当前类是控制层的一个具体的实现
@requestMapping:放在方法上面用来指定某个方法的路径,当它放在类上的时候相当于命名空间需要组合方法上的requestmapping来访问
该内容可以指定,但是默认为value的值,通常value的值与方法名称保持一致
返回字符串的含义,指的是ModelAndView中viewName,也就是要跳转的页面
数据交互
(本处解释不详细,可直接参见代码 url(Myeclipse源码:springmvc_2))
在方法中可以自己随意去定义方法的参数,如果方法的参数的名称与传入参数的name匹配就会自动接收,并且转换我们所定义的数据类型。
如果参数列表里定义了自定义的类springmvc会给我们把匹配的参数组合起来并且组装成对象。
requestMapping里面的method的类型必须要与前台form的类型一致
@RequestMapping 中可以定义请求方式,如果指定某种请求方式那就必须要以这种请求方式来访问
要配置别的属性时,value就不能省略了
通过request直接获取传递过来的参数
零散的接受单个数据:在参数列表中直接定义要接收的参数和参数的类型
Date数据的传递时需要,绑定时间类型的属性编辑器,然后可以自定义时间的格式
接收多选框中的数据
通过request直接获取传递过来的参数
直接在参数列表中定义数组
实体类的接收:
在参数列表中直接定义要接收的实体类,请求中传递的参数名要和实体类中的set方法后的字符串匹配,否则无法注入
只要有请求到达就会按着参数列表中的实体类来创建对象
因为所有的参数的接收都是在参数列表中,并不是成员变量,每次请求,传递的参数都是一个新的实例,不会产生并发问题
往页面回写数据
设置方法返回值类型是ModelAndView
返回值类型是String,在参数列表中直接来定义一个Map,这个map不是用来接收参数的,而是用来把参数写到页面上去的
返回值类型是String代表viewName,参数列表使用Model用来把数据写到页面上(此方法较为常用,建议使用此方法)
通过ajax访问springmvc
(toAjax.jsp),引入jquery,添加
$(function(){
$("#mybutton").click(function(){
var mytext = $("#mytext").val();
$.ajax({
url:"test/ajax1.do",
type:"post",
data:{
name:mytext
},
success:function(responseText){
alert(responseText);
},
error:function(){
alert("system error");
}
});
});
});
在控制器中,通过ajax访问springmvc,返回值的类型为void,有两种方式
使用HttpServletResponse往页面写数据
在参数列表中直接定义PrintWriter为我们往页面上写数据
重定向:
直接在返回值中添加"redirect:",如果"redirect:"后面不加"/"代表在当前的controller里面来执行方法,如果加上"/"代表退到根目录下去访问方法""
文件上传
引入jar包
com.springsource.org.apache.commons.fileupload-1.2.0.jar
com.springsource.org.apache.commons.io-1.4.0.jar
配置相应的视图解析器(springmvc-servlet.xml)
<!-- 上传文件复杂表单中文件解析视图 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 以字节为单位 -->
<property name="maxUploadSize" value="1024000"></property>
</bean>
form表单(fileform.jsp):
<form action="upload/upload.do" method="post" enctype="multipart/form-data">
头像:<input type="file" name="pic">
<input type="submit" value="提交"><br>
</form>
enctype="multipart/form-data"用于POST方式的文件上传,这个属性管理的是表单的MIME编码。
文件上传中的controller的配置(TestUploadController.java)
@RequestMapping("/upload.do")
public String upload(HttpServletRequest request) throws Exception{
//强制转换request
MultipartHttpServletRequest mr = (MultipartHttpServletRequest) request;
//获得到文件
CommonsMultipartFile cmf = (CommonsMultipartFile) mr.getFile("pic");
//获得文件的字节数组
byte[] fbyte = cmf.getBytes();
String fileName = "";
//设置时间戳格式
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSSS");
//获得时间戳的字符串
fileName = format.format(new Date());
//加三位随机数
Random random = new Random();
for(int i = 0; i < 3; i++){
fileName = fileName + random.nextInt(10);
}
//获得原始文件名
String oriFileName = cmf.getOriginalFilename();
//获得文件的后缀名
String suffix = oriFileName.substring(oriFileName.lastIndexOf("."));
//获得发布后的根路径
String realPath = request.getSession().getServletContext().getRealPath("/");
OutputStream out = new FileOutputStream(new File(realPath+"/upload/"+fileName+suffix));
out.write(fbyte);
out.flush();
out.close();
return "success";
}
@RequestMapping("/toFileForm.do")
public String toFileForm(){
return "fileform";
}
拦截器
最终拦截
后置拦截
前置拦截
Spring MVC 基础笔记的更多相关文章
- Spring MVC 学习笔记一 HelloWorld
Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...
- Spring MVC 基础
Spring MVC 基础 1.Web MVC基础 MVC的本质是表现层模式,我们以视图模型为中心,将视图和控制器分离出来.就如同分层模式一样,我们以业务逻辑为中心,把表现层和数据访问层代码分离出来是 ...
- 第63节:Java中的Spring MVC简介笔记
前言 感谢! 承蒙关照~ Java中的Spring MVC简介笔记 MVC简介 Spring MVC 基本概念 Spring MVC 项目搭建 maven 使用Spring MVC进行开发 实现数据绑 ...
- Spring MVC 学习笔记12 —— SpringMVC+Hibernate开发(1)依赖包搭建
Spring MVC 学习笔记12 -- SpringMVC+Hibernate开发(1)依赖包搭建 用Hibernate帮助建立SpringMVC与数据库之间的联系,通过配置DAO层,Service ...
- Spring MVC 学习笔记11 —— 后端返回json格式数据
Spring MVC 学习笔记11 -- 后端返回json格式数据 我们常常听说json数据,首先,什么是json数据,总结起来,有以下几点: 1. JSON的全称是"JavaScript ...
- Spring MVC 学习笔记10 —— 实现简单的用户管理(4.3)用户登录显示全局异常信息
</pre>Spring MVC 学习笔记10 -- 实现简单的用户管理(4.3)用户登录--显示全局异常信息<p></p><p></p>& ...
- Spring MVC 学习笔记9 —— 实现简单的用户管理(4)用户登录显示局部异常信息
Spring MVC 学习笔记9 -- 实现简单的用户管理(4.2)用户登录--显示局部异常信息 第二部分:显示局部异常信息,而不是500错误页 1. 写一个方法,把UserException传进来. ...
- Spring MVC 学习笔记8 —— 实现简单的用户管理(4)用户登录
Spring MVC 学习笔记8 -- 实现简单的用户管理(4)用户登录 增删改查,login 1. login.jsp,写在外面,及跟WEB-INF同一级目录,如:ls Webcontent; &g ...
- Spring MVC 学习笔记2 - 利用Spring Tool Suite创建一个web 项目
Spring MVC 学习笔记2 - 利用Spring Tool Suite创建一个web 项目 Spring Tool Suite 是一个带有全套的Spring相关支持功能的Eclipse插件包. ...
随机推荐
- windows 连接Linux
服务器:阿里云 ecs 从 Windows 环境远程登录 Linux 实例 远程登录软件的用法大同小异.本文档以 Putty 为例,介绍如何远程登录实例.Putty 操作简单.免费.免安装, 下载地址 ...
- ABP Zero 导航菜单之角色权限
本文的项目是官网生成,项目名称为XX,WEB为MVC,以Users权限模块为例解说文章. 1.定义PermissionNames PermissionNames是一个静态类,它在/XX.Core/Au ...
- Java中的集合框架(中)
Map和HashMap Map接口 1.Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value 2.Map中的键值对以Entry类型的对 ...
- windows c++程序移植到linux的要点
这段时间得到一份源码,是Windows下的,调试了一把,可以正常运行,可是没有Linux版本,而实际的应用场景是要在Linux服务器上面运行 所以涉及到Windows下c++程序的移植,有同事竭力推荐 ...
- jQuery选择器ID、CLASS、标签获取对象值、属性、设置css样式
jQuery是继prototype之后又一个优秀的Javascrīpt框架.它是轻量级的js库(压缩后只有21k) , 它兼容CSS3,还兼容各种浏览器 (IE 6.0+, FF 1.5+, Safa ...
- HDU 2438 Turn the corner(三分查找)
托一个学弟的福,学了一下他的最简便三分写法,然后找了一道三分的题验证了下,AC了一题,写法确实方便,还是我太弱了,漫漫AC路!各路大神,以后你们有啥好的简便写法可以在博客下方留个言或私信我,谢谢了! ...
- Link-Cut-Trees
填坑,填坑,填坑…… 开篇镇人品……下文的比喻仅供娱乐…… 为了迎接JSZX校内互测,我临时填坑学了LCT…… 怎么说呢……我也是懵懵懂懂地看了N篇博客,对着标程敲上一发代码,然后才慢慢理解.这里推荐 ...
- UESTC 1599 wtmsb【优先队列+排序】
题目链接:UESTC 1599 wtmsb 题意:给你一组数,每一次取出两个最小的数,将这两个数的和放入这组数中,直到这组数只剩下一个,求最后剩下那个数的大小! 分析:比赛的时候首先我就看到这道题数据 ...
- [国嵌笔记][007][Linux网络配置]
Vmware网络设置 1.bridged(桥接模式) 如果网络中能提供多个IP地址,则使用桥接方式.虚拟机与主机的IP地址彼此独立. 2.NAT(网络地址转换模式) 如果只能提供一个IP地址,则使用N ...
- [国嵌攻略][091][TCP网络程序设计]
server.c #include <sys/socket.h> #include <netinet/in.h> #include <strings.h> #inc ...