04springMVC结构,mvc模式,spring-mvc流程,spring-mvc的第一个例子,三种handlerMapping,几种控制器,springmvc基于注解的开发,文件上传,拦截器,s
1.
Spring-mvc介绍
1.1市面上流行的框架
Struts2(比较多)
Springmvc(比较多而且属于上升的趋势)
Struts1(即将被淘汰)
其他
1.2 spring-mvc结构
DispatcherServlet:中央控制器,把请求给转发到具体的控制类
Controller:具体处理请求的控制器(配置文件方式需要配置,注解方式不用配置)
handlerMapping:映射处理器,负责映射中央处理器转发给controller时的映射策略
ModelAndView:服务层返回的数据和视图层的封装类(无论是配置文件还是注解都不需要配置)
ViewResolver & View:视图解析器,解析具体的视图
Interceptors
:拦截器,负责拦截我们定义的请求然后做处理工作(无论是配置文件方式还是注解都需要先创建再配置)红色的是需要自己创建,黑色的需要配置。
1.4spring-mvc流程
2.spring-mvc的第一个例子
1.
创建一个web工程
2.
导入依赖包
3.创建springmvc的配置文件
配置中央控制
创建springmvc的核心配置文件
文件的命名规则:中央控制器(servlet的名称)的名称+“-servlet.xml”
默认位置:WEB-INF下
配置:controller和视图解析器
4.
创建controller
3 .三种handlerMapping
1. BeanNameUrlHandlerMapping
(默认)
<!--
按着controller的name来映射寻找controller,默认存在
-->
<bean
class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
2.SimpleUrlHandlerMapping
<!--
使用简单url来映射
-->
<bean
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property
name="mappings">
<props>
<prop
key="/hello1.do">myController</prop>
</props>
</property>
</bean>
3.ControllerClassNameHandlerMapping
<!--
控制类的类名控制器,访问时类名首字母需要小写 -->
<bean
class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"></bean>
4.几种控制器
ParameterizableViewController(参数控制器)
<bean
name="/toIndex.do"
class="org.springframework.web.servlet.mvc.ParameterizableViewController">
<!--
配置你所要跳转到视图的名称 -->
<property
name="viewName"value="index"></property>
</bean>
- AbstractCommandController(命令控制器)
- FormController(表单控制器)
只支持post请求方式
表单控制器有简单的验证功能
如果提交失败返回表单页面,如果提交成功就跳转到成功页面
有收集表单数据的功能
日期类型转换
5 springmvc基于注解的开发
5.1注解第一个例子
创建web项目
在springmvc的配置文件中指定注解驱动,配置扫描器
@controller:标识当前类是控制层的一个具体的实现
@requestMapping:放在方法上面用来指定某个方法的路径,当它放在类上的时候相当于命名空间需要组合方法上的requestmapping来访问。
5.2注解方式参数
1.在方法中可以自己随意去定义方法的参数,如果方法的参数的名称与传入参数的name匹配就会自动接收,别且转换我们所定义的数据类型。如果参数列表里定义了自定义的类springmvc会给我们把匹配的参数手机起来并且组装成对象。
2. requestMapping里面的method的类型必须要与前台form的类型一致
3.
重定向:
6.
文件上传
引入jar包
-
配置视图解析器
写上传逻辑
/**
* model层的处理使用map
* desc:
* author:任亮
* mail:renliangjava@163.com
* @throws Exception
*/
@RequestMapping(value="/personForUpload.do",method=RequestMethod.POST)
public String personForUpload(HttpServletRequest
request,Person person, Map<String,Object> map) throws
Exception{
//第一步转化request
MultipartHttpServletRequest mr = (MultipartHttpServletRequest)request;
//获得上传的文件mr.getFile(String
fileName),fileName是<input type="file" name="pic"><br>中pic
CommonsMultipartFile cf = (CommonsMultipartFile) mr.getFile("pic");
byte[] fb =
cf.getBytes();
String fileName = "";
//设置时间戳格式
SimpleDateFormat af = new SimpleDateFormat("yyyyMMddhhmmssSSS");
//获得时间戳的字符串
fileName = af.format(new Date());
//加三位随机数
Random random = new Random();
for(int
i = 0; i < 3; i++){
fileName = fileName + random.nextInt(10);
}
String path =request.getSession().getServletContext().getRealPath("/");
OutputStream out = new FileOutputStream(path+"/img/"+fileName+".jpg");
out.write(fb);
out.flush();
out.close();
map.put("person", person);
return
"success";
}
7.
拦截器
8.
Ssm整合
参见代码
<?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"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID"
version="2.5">
<!--
springmvc中央的转发器 -->
<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:springmvc-servlet.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:beans.xml</param-value>
</context-param>
</web-app>
<?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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-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/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<!--
注解扫描器 -->
<context:component-scan
base-package="cn.itcast"/>
<bean
id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property
name="driverClassName"value="com.mysql.jdbc.Driver"></property>
<property
name="url"value="jdbc:mysql://127.0.0.1:3306/springmvc"></property>
<property
name="username"value="root"></property>
<property
name="password"value="root"></property>
</bean>
<bean
id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property
name="dataSource"ref="dataSource"></property>
<property
name="mappingDirectoryLocations">
<value>classpath:cn/itcast/hbm</value>
</property>
<property
name="hibernateProperties">
<props>
<prop
key="hibernate.Dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop
key="hibernate.show_sql">true</prop>
<prop
key="hibernate.hbm2ddl">update</prop>
</props>
</property>
</bean>
<bean
id="txManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property
name="sessionFactory"ref="sessionFactory"></property>
</bean>
<tx:advice
id="txAdvice"transaction-manager="txManager">
<tx:attributes>
<tx:method
name="save*"propagation="REQUIRED"/>
<tx:method
name="update*"propagation="REQUIRED"/>
<tx:method
name="get*"propagation="NEVER"
read-only="true"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:advisor
advice-ref="txAdvice"pointcut="execution(*
cn.itcast.service..*.*(..))"/>
</aop:config>
</beans>
04springMVC结构,mvc模式,spring-mvc流程,spring-mvc的第一个例子,三种handlerMapping,几种控制器,springmvc基于注解的开发,文件上传,拦截器,s的更多相关文章
- 基于Spring3 MVC实现基于form表单文件上传
http://blog.csdn.net/jia20003/article/details/8474374/
- Spring MVC 学习总结(五)——校验与文件上传
Spring MVC不仅是在架构上改变了项目,使代码变得可复用.可维护与可扩展,其实在功能上也加强了不少. 验证与文件上传是许多项目中不可缺少的一部分.在项目中验证非常重要,首先是安全性考虑,如防止注 ...
- spring mvc利用MultipartResolver解析Multipart/form-data进行文件上传
之前的表单数据都是文本数据,现记录:利用MultipartResolver进行文件上传. ①首先,需引入commons-fileUpload和commons-io jar包,pom.xml文件的坐标: ...
- Spring 文件上传MultipartFile 执行流程分析
在了解Spring 文件上传执行流程之前,我们必须知道两点: 1.Spring 文件上传是基于common-fileUpload 组件的,所以,文件上传必须引入此包 2.Spring 文件上传需要在X ...
- spring之文件上传
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- spring boot文件上传、下载
主题:Spring boot 文件上传(多文件上传)[从零开始学Spring Boot]http://www.iteye.com/topic/1143595 Spring MVC实现文件下载http: ...
- Spring Boot2(十四):单文件上传/下载,文件批量上传
文件上传和下载在项目中经常用到,这里主要学习SpringBoot完成单个文件上传/下载,批量文件上传的场景应用.结合mysql数据库.jpa数据层操作.thymeleaf页面模板. 一.准备 添加ma ...
- spring实现文件上传(图片解析)
合抱之木,生于毫末,千里之行,始于足下,要想了解spring的文件上传功能,首先要知道spring是通过流的方式将文件进行解析,然后上传.那么是不是所有需要用的文件上传的地方都要写一遍文件解析器呢? ...
- Liferay7 BPM门户开发之45: 集成Activiti文件上传部署流程BPMN模型
开发文件上传,部署流程模板. 首先,开发jsp页面,deploy.jsp <%@ include file="/init.jsp" %> <h3>${RET ...
随机推荐
- 2015 多校联赛 ——HDU5319(模拟)
Painter Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Su ...
- [矩形并-扫描线-线段树]Picture
最近在补数学和几何,没啥好写的,因为已经决定每天至少写一篇了,今天随便拿个题水水. 题目大意:给你N个边平行于坐标轴的矩形,求它们并的周长.(N<=5000) 思路:这个数据范围瞎暴力就过了,但 ...
- 【hihoCoder 1419】重复旋律4
Description 小 Hi 平时的一大兴趣爱好就是演奏钢琴. 我们知道一个音乐旋律被表示为长度为 N的数构成的数列. 小 Hi 在练习过很多曲子以后发现很多作品中的旋律有重复的部分. 我们把一段 ...
- 【Codeforces Round #430 (Div. 2) A C D三个题】
·不论难度,A,C,D自己都有收获! [A. Kirill And The Game] ·全是英文题,述大意: 给出两组区间端点:l,r,x,y和一个k.(都是正整数,保证区间不为空),询问是否 ...
- Gradle学习之基础篇
一.gradle基础概念 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具.Gradle抛弃了基于各种繁琐的XML,使用一种基于Groovy的特定领域语言( ...
- dev gridcontrol 无法编辑 解决方案
1.确认表格打开编辑 gridView1.OptionsBehavior.Editable = True 2.确认列打开编辑 gridView1.Columns("Name").O ...
- TeamForge使用指南
1.什么是TeamForge 可以把TeamForge简单的理解为另外一种github 2.TeamForge的地址 与Project有关,一般会有明确的Link 3.TeamForge登录 用户名和 ...
- Java锁机制了解一下
前言 回顾前面: 多线程三分钟就可以入个门了! Thread源码剖析 多线程基础必要知识点!看了学习多线程事半功倍 只有光头才能变强! 本文章主要讲的是Java多线程加锁机制,有两种: Synchro ...
- 用js实现排列组合
在leetcode上看到一个题,代码实现排列组合的. 记得大学上课时候,就用c写过,现在用js试试,顺便看看耗时. 先看看3的阶乘: function permute(temArr,testArr){ ...
- PHP MySQL 插入数据
PHP MySQL 插入数据 使用 MySQLi 和 PDO 向 MySQL 插入数据 在创建完数据库和表后,我们可以向表中添加数据. 以下为一些语法规则: PHP 中 SQL 查询语句必须使用引号 ...