【】Spring概念css
Spring是基於JavaEE的企業級應用各層對象的管理框架。html
【】Spring功能前端
管理各層對象的建立,銷燬和依賴。能與各個流行框架集成,完成系統功能。java
【】Spring組成mysql
1. IoC核心模塊(Core Container容器): 管理Spring的Bean對象。jquery
(1) IoC Core容器:管理Bean的機構。(2) IoC Bean:被管理的對象。web
(3) Context: IoC容器的API:接口,類。(4) Spring EL語言:訪問Bean的機制。正則表達式
2.切面模塊: 將各個層對象的各個spring
方法方法中的共同代碼封裝爲切面類,再織入到代碼原來的位置。sql
(1)切面類(Aspect)
(2)切面實現機制:Spring內置機制,AspectJ實現機制。
3.數據訪問模塊:與各類持久層框架集成
集中管理各個持久層對象的建立。
(1)ORM模塊:與Hibernate,JPA, Toplink等集成。(2)JDBC模塊:封裝JDBC操做。
(3)OXM模塊:實現JavaBean與XML映射。(4)事務處理模塊:管理業務層事務處理。
4.Web模塊:實現VC層的模塊。
(1) Spring MVC模塊(Pull模式)
(2) Spring REST API模塊(pull模式) ,開發SPA(Single Page Application)應用
(3) Spring WebSocket模塊(push模式)
【】Spring框架的引入
1.Builder方式-----將須要的模塊的jar,copy到/WEB-INF/lib
2.Maven模式-----將模塊的依賴配置信息,copy到pom.xml
【】Spring IoC容器
1.概念:IoC容器是管理Bean的機制。2.功能:管理Bean對象:建立,注入,銷燬。
【】Spring IoC管理類的配置方式
1. XML方式2.Java編程方式
【】Spring IoC管理Bean的XML方式
1.建立XML文件(classpath)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="departmentService" class="com.city.oa.service.impl.DepartmentServiceImpl">
</bean>
2.使用<bean>完成Bean的配置
<bean id="beanid" class="類全名" />
【】取得Spring IoC管理Bean對象
1.鏈接到Spring的IoC容器
ApplicationContext ac=new ClassPathXmlApplicationContext("context.xml");
2.取得管理的Bean對象
IDepartmentService ds02=ac.getBean("departmentService". IDepartmentService.class);
3.調用對象的方法
ds.add(xxx);
第02講 Spring Bean管理和依賴注入
【】Java對象的取得方式
1.直接主動建立式-------IA a=new A1();IA a=new A2();
2.間接主動建立式-------IA a=Factory.createA();
3.間接主動查找式-------IA a=(IA)ctx.lookup("jndiA");
4.間接被動注入式 -IoC(*)
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
{
}
【】IoC概念
IoC(Inversion of Control)反向控制
對象的取得由其餘機構建立並送給須要的對象。
【】DI概念
DI- Dependency Injection 依賴注入
一個對象使用另外一個對象,經過方法參數的取得,由其餘對象負責注入。
DI是IoC的實現方式。
Spring的核心是IoC容器。
Spring 使用DI完成對象的注入。
【】Spring完成對象的取得和配置方式
1.使用new方式取得指定的對象。
(1) XML方式
<bean id="對象的ID"
class="包名.類名" />
案例:
<bean id="departmentService"
class="com.city.oa.service.impl.DepartmentServiceImpl"> </bean>
(2)Java註解方式配置(*)
Spring提供多個註解類用於配置Bean的建立
@Component:通常類前面 @Service:用於業務層類的前面
@Repository:用於持久層類的前面 @Controller:用於控制層類的前面
@RestController:用於REST API
控制層類的前面(用於開發SPA )
案例:
@Service("departmentService")
public class DepartmentServiceImpl
{}
使用註解模式配置Spring Bean,須要設置Spring掃描的路徑。
<context:component-scan
base-package="com.city.oa"/>
2.使用靜態工廠類取得對象
(1) XML方式
A a=Factory.createA();
配置語法:
<bean id="idxxx" class="工廠類全名"
factory-method="工廠方法"
/>
案例:
SessionFactory sf=HibernateSessionFactory
.createSessionFactory();
XML配置代碼:
<!-- 經過靜態工廠方法取得對對象 -->
<bean id="sessionFactory"
class="com.city.oa.factory.HibernateSessionFactory"
factory-method="createSessionFactory"
/>
(2)註解方式
無
3.動態工廠取得對象配置
(1) XML
<bean id="工廠id" class="工廠類全名" />
<bean id="對象Id" factory-bean="工廠id"
factory-method="非靜態的工廠方法" />
(2)註解方式
4.JNDI查找對象的配置
XML方式
(1)經過Spring提供的JNDI工廠類查找指定
的對象。
<bean id="對象ID"
class="...JndiObjectFactoryBean">
<property name="jndiName" >
<value>java:comp/env/cityoa</value>
</property>
</bean>
5.DI注入模式:
Spring支持2種方式實現DI注入。
(1) Set方法注入
(2)構造方法注入
【】Spring Set方法實現DI注入
1.定義依賴的類的對象屬性變量。
private SessionFactory sf=null;
2.爲依賴的屬性變量建立set方法
public void setSf(SessionFactory sf) {
this.sf = sf;
}
3.實現Set方法的依賴注入配置:
(1)XML方式
<bean id="id" class="類全名">
<property name="屬性名"
ref="依賴BeanID" />
</bean>
(2)註解方式
(2)
Spring第03講 DI的實現與配置
【】練習題
1.根據要求寫出完成以下任務的代碼
(1)XML方式配置取得類A的對象。(2)Java註解方式取得A的對象
(3)XML方式取得工廠Factory靜態 方法create建立的對象
(4)XML方法取得工廠Factory動態方法create獲得的對象
(5)提升查找命名空間對象"cityoa"。
答:
(1) <bean id="a" class="A" />
(2)
@Component
public class A{}
(3)<bean id="a" class="Factory"
factory-method="create" />
(4)<bean id="factory" class="Factory" />
<bean id="a" factory-bean="factory"
factory-method="create" />
(5) <bean id="a" class="JndiObjectFactoryBean">
<property name="jndiName">
<value>cityoa</value>
</property>
</bean>
【】Spring DI的實現方式
1.屬性注入方式 2.構造方法注入方式
【】Spring屬性(Property)注入實現DI
1.屬性條件:
(1)類變量 (2)提供get或set方法
2.XML方式:
(1)語法:
<bean id="id" class="類全名" >
<property name="屬性名" >
注入的值
</propery>
</bean>
(2).注入簡單類型:
<property name="屬性">
<value>值</value>
</property>
(3).注入對象類型:
<1> 標準語法:
<property name="ssf">
<bean ref="sqlSessionFactory" />
</property>
<2>簡化語法
<property name="ssf"
ref="sqlSessionFactory" />
(4)注入集合對象
3.Java註解方式實現屬性注入
(1)語法:使用@Autowired在set方法前。
@Autowired
public void setXxx(){}
【】Spring使用構造方法實現DI
1.前提條件:(1)定義注入的類變量 (2)定義構造方法傳入注入變量
2.XML方式注入DI對象
語法:
<bean id="" class="" >
<constructor-arg ref="" />
</bean>
3.Java註解方式實現構造方法DI注入
@Autowired
public 構造方法(DI參數){
}
Spring第04和05講 AOP編程
【】AOP概念----------AOP=Aspect Oriented Programming
面向切面編程。
Aspect(切面)概念:就是多個類的多個方法中部分重複的代碼。
AOP的實質是指將重複的代碼從多個類的多個方法中移動切面類中。
【】AOP的基本元素(*)
1.Joinpoint(鏈接點):
切面運行的位置。
Spring AOP只支持普通方法的切入。
方法前,方法後,方法先後,
方法拋出異常後。
2.Pointcut(切入點)
相同位置的鏈接點的集合。
切入點1:全部業務類add方法前。
切入點2:全部業務類全部方法後。
3.Advice(通知):
切面的執行的代碼。
4.Aspect(切面):
Aspect=Advice+Pointcut
5.Target(目標):
切面要切入的對象。
6.Proxy(代理)
Spring建立代理對象實現目標對象和切面對象的整合。
7.Weaving(織入):
Spring將Target和Aspect整合爲Proxy 的過程稱爲織入。
【】Spring Adivice的類型
1.Before Advice: 方法前Advice。
2.After Returning Advice: 方法返回後Advice方法運行沒有異常,正常返回。
3.After Advice:方法後Advice 方法運行正常結束,或拋出異常結束。
4.Around Advice: 方法前和後執行。
5.After Throwing Advice:方法拋出異常後。
【】Spring AOP的編程模式
1. Advice接口模式+XML配置Spring 2.0以前使用此模式。
2. POJO+XML
POJO=Plain Old Java Object不實現任何接口,不繼承任何父類。
3.POJO+Annotation模式
使用POJO類編寫Advice,同時在Advice類上使用Spring AspectJ的註解類
聲明Advice和Pointcut。
【】POJO+Annotation模式編寫AOP
1.在Spring IoC容器配置中啓用註解AspectJ模式
<aop:aspectj-autoproxy />
2.編寫 POJO Advice類
3.增長切面註解:
@Aspect
4.增長Spring 掃描
@Component
案例:
@Component
@Aspect
public class ServiceMethodAdvice {}
【】編寫方法前Advice方法
(1)編寫普通方法
(2)方法前增長註解: @Before("切入點")
案例:
@Before(value="execution(* com.city.oa.service.impl.*.*(..))")
public void serviceMethodBefore() throws Exception{
System.out.println("方法前切面方法執行。。。");
}
【】編寫方法返回後Advice方法:
(1)定義普通方法
(2)方法前增長@AfterReturning
案例:
@AfterReturning(value="execution
(* com.city.oa.service.impl.*.*(..))")
public void serviceMethodAfterReturning() throws Exception{
System.out.println("方法返回後切面方法執行。。。");
}
【】編寫方法後Advice
(1)定義普通方法
(2)方法前增長@After
案例:
@After(value="execution
(* com.city.oa.service.impl.*.*(..))")
public void serviceMethodAfter() throws Exception{
System.out.println("方法後切面方法執行。。。");
}
第05講授課內容
【】環繞Around Advice
1.功能:對目標對象指定的方法 方法執行前和方法執行後分別切入 Advice代碼。
2.編程:在Advice方法前使用@Around
@Around(value="切入點表達式")
public Object 方法名(ProceedingJoinPoint pjp) throws Throwable{
//方法前代碼
Object result = pjp.proceed(); //調用目標對象方法
//方法後代碼
return result;
}
案例:
@Around(value="execution(* com.city.oa.service.impl.*.*(..))")
public Object serviceMethodAround(ProceedingJoinPoint pjp) throws Throwable{
System.out.println("環繞Advice方法前....");
Date start=new Date();
Object result=pjp.proceed();
Date end=new Date();
long runtime=end.getTime()-start.getTime();
System.out.println("目標方法執行時間:"+runtime+"毫秒");
System.out.println("環繞Advice方法後....");
return result;
}
案例:
@Around(value="execution(* com.city.oa.service.impl.*WithAOP.*(..))")
public Object serviceTransactionAround(ProceedingJoinPoint pjp) throws Throwable{
System.out.println("MyBatis環繞Advice方法前....");
SqlSession session =ssf .openSession();
IDepartmentDao dd=session.getMapper(IDepartmentDao.class);
if(pjp.getTarget() instanceof DepartmentServiceImplWithAOP) {
((DepartmentServiceImplWithAOP)pjp.getTarget()).setDd(dd);
}
Object result=pjp.proceed();
session.commit();
session.close();
System.out.println("MyBatis環繞Advice方法後....");
return result;
}
【】方法異常捕獲Exception ThrowAdvice
1.功能:用於捕獲目標對象方法拋出異常後的處理工做。
2.編程:在Advice方法前使用
@AfterThrowing註解類
語法:
@AfterThrowing(value="切入點"
,throwing="對象名")
public void 方法名(JoinPoint jp,異常類型 對象名) throws Exception
{
處理代碼
}
【】Advice方法參數
1.JoinPoint::全部的Advice方法
第1個參數均可以是JoinPoint類型對象。
該對象以下方法:
getTarget(): 取得目標的對象。getSignature() 取得攔截的方法名。
getArgs(): Object[]: 取得參數。getArgs()[getArgs().length-1]
2.ProceedingJoinPoint: 環繞Advice方法必須使用此參數。
【】Pointcut定義
1.Pointcut的定義類型:
(1)內嵌式定義
@Around(value="execution(* com.city.oa.service.impl.*WithAOP.*(..))")
(2)獨立式定義
單獨定義切入點,在切面類中使用@Pointcut定義切入點。
推薦:建立單獨的切面類,只定義切入點方法。
package com.city.oa.advice;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
//切入點類
@Component
@Aspect
public class ServicePointcut {
@Pointcut("execution(* com.city.oa.service.impl.*.*(..))")// the pointcut expression
private void anyServiceMethon() {}
@Pointcut("execution(* com.city.oa.service.impl.*AOP.*(..))")// the pointcut expression
private void anyAOPServiceMethon() {}}
引用定義好的切入點
@Before(value="com.city.oa.advice.ServicePointcut.anyServiceMethon()")
public void serviceMethodBefore() throws Exception{
System.out.println("方法前切面方法執行。。。");
}
2.
【】XML方式實現AOP配置
Spring第06講 Spring集成Hibernate
【】Hibernate 編程
1.讀取配置信息://取得hibernate.properties
Configuration cfg=new Configuration();
//取得默認的XML配置文件:hibernate.cfg.xml
cfg.configure();
2.建立SessionFactory
SessionFactory sf=cfg.buildSessionFactory();
3.打開一個Session
Session session=sf.openSession();
4.開始一個事務
Transaction tx=session.beginTransaction();
5.這些CUDR操做
session.save(pm);
session.update(pm);
session.delete(pm);
ProductModel pm=session.get(id,ProductModel.class);
6.提交事務
tx.commit();
7.關閉會話
session.close();
【】Spring集成Hibernate的管理
1.管理數據庫鏈接池
2.管理SessionFactory建立,Spring內置Hibernate SessionFactory工廠類。
3.Spring內置Hibernate事務管理器
4.Spring內置事務處理配置自動有事務切面,能夠配置到業務層。
5.Spring自動打開Session,自動關閉Session 自動事務提交和回滾。
【】Spring管理數據庫鏈接池
1.使用Spring內置的鏈接池框架(測試使用,生產環境不推薦使用)
<bean id="ds01" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">com.mysql.jdbc.Driver</property>
<property name="url">jdbc:mysql://localhost:3306/cityoa</property>
<property name="username">root</property>
<property name="password">root</property>
</bean>
2.使用Apache DBCP框架
<bean id="myDataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb:hsql://localhost:9001"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
3.使用C3P0框架配置鏈接池
4.使用JavaEE配置的鏈接池
<jee:jndi-lookup id="dsjndi"
jndi-name="java:comp/env/cityoa"/>
【】Spring配置HIbernate的SessionFactory工廠Bean根據使用Hibernate版本的不一樣須要選擇不一樣的SessionFactory工廠Bean。案例使用HIbernate5的工廠Bean
類型:org.springframework.orm.hibernate5.LocalSessionFactoryBean
案例:
<!-- 配置Hibernate SessionFactory工廠Bean -->
<bean id="ssf" class=
"org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="ds01"/>
<property name="packagesToScan">
<list>
<value>com.city.oa.model</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
hibernate.format_sql=true
</value>
</property>
</bean>
【】配置Hibernate SessionFactory工廠Bean
的主要屬性
1.dataSource: 指定數據源。
<property name="dataSource" ref="ds01"/>
2.mappingResources:指定XML映射文件
<property name="mappingResources"><list>
<value>product.hbm.xml</value></list>
3.mappingDirectoryLocations:指定XML文件的路徑
<property name="mappingDirectoryLocations">
<list>
<value>com/city/oa/hr/model/xml
<value>com/city/oa/sales/model/xml
</list>
</property>
自動掃描 xxx.hbm.xml文件
4.packagesToScan:
指定註解Model類的掃描包
<property name="packagesToScan">
<list>
<value>com.city.oa.model</value>
</list>
</property>
【】配置Spring管理Hibernate事務管理器
針對不一樣的Hibernate版本
Spring提供了不一樣版本的事務管理器
<bean id="transactionManager"
class="org.springframework.orm.hibernate5.
HibernateTransactionManager
">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
【】Spring聲明式事務切面的配置方式
1.XML方式 2.Java Annotation方式
【】Java Annotation方式
1.在Spring IoC配置文件中啓用註解事務方式
<tx:annotation-driven transaction-manager=
"transactionManager"/>
若是事務管理器的ID是transactionManager
能夠省略屬性transaction-manager
簡寫模式:<tx:annotation-driven />
2.在須要事務管理的類上使用事務註解類
@Transactional
2,
Spring第07講 Spring集成MyBatis
【】Spring集成MyBatis的基本原理
Spring管理數據庫鏈接,
Spring管理MyBatis SqlSessionFactory的
建立,
Spring負責建立MyBatis DAO接口對象。
Spring負責事務管理器。
Spring負責業務層的事務切面。
Spring負責建立業務對象,並將Dao接口
注入到業務對象。
【】Spring管理數據庫鏈接
Spring配置DataSource
(1)使用Spring內置的DataSource框架
<!-- 使用Spring內置的鏈接池框架配置鏈接池 -->
<bean id="ds01" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3310/cityoa"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
【】Spring配置MyBatis的SqlSessionFactory
工廠Bean
<!-- 配置MyBatis SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config-spring.xml"/>
<property name="mapperLocations" value="classpath*:com/city/oa/dao/xml/*.xml" />
<property name="typeAliasesPackage" value="com.city.oa.model" />
</bean>
主要屬性:
(1)dataSource:指定數據源
(2)configLocation:指定MyBatis的配置文件
(3)mapperLocations:指定映射文件
(4)typeAliasesPackage:
指定別名的Model的包
【】配置MyBatis的事務管理器
Spring沒有提供MyBatis的事務管理器。
使用JDBC事務管理器
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
【】啓用Spring事務切面註解
<!-- 啓用註解事務聲明 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
【】配置Spring註冊MyBatis DAO接口
1.每次註冊一個DAO接口(不推薦使用)
<bean id="departmentDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.city.oa.dao.IDepartmentDao" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
每次只能註冊一個Mapper接口。
2.註冊多個DAO接口-Bean方式
<!-- 批量註冊DAO接口 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.city.oa.dao" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
3.註冊多個DAO接口-mybatis命名空間方式
MyBatis-Spring新版提供了專門
的命名空間<mybaits>
在Spring的context.xml文件中
增長<mybatis>命名空間:
xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"
http://mybatis.org/schema/mybatis-spring
http://mybatis.org/schema/mybatis-spring.xsd
增長命名空間後,使用<mybatis>空間的屬性
<mybatis:scan base-package="org.mybatis.spring.sample.mapper" />
Spring第08講 Spring MVC
【】MVC概念和組成部分職責
1.MVC:Model -View -Controller
2.Model模型層的職責
(1)表達業務數據: Model類
(2)持久化業務數據: DAO層
(3)模擬業務處理:Service層
3.View層職責
(1)收集用戶的輸入信息:FORM和FORM元素
(2)顯示用戶須要的業務信息:
列表模式,詳細模式
4.Controller層的職責
(1)取得View收集的數據。
String sage=request.getParameter("age");
(2)驗證數據的合法性
使用正則表達式驗證。
(3)類型轉換:String-int, double, Date
int age=Integer.parseInt(sage);
(4)組裝Model對象
EmployeeModel em=new EmployeeModel();
em.setAge(age);
....
(5)調用業務層方法實現業務處理
Servlet取得業務層對象:
ApplicationContext ac=new ClassPathXmlApplicationContext
("context.xml");
IEmployeeService esaop=ac.getBean
("employeeServiceWithAOP",
IEmployeeService.class);
es.add(em);
List list=es.getList();
(6)傳遞View須要的數據
request.setAttribute("list",list);
(7)跳轉到指定View對象(轉發,重定向)。
request.getRequestDispatcher("list.jsp").
forwared(request,response);
response.sendRedirect("tomain.do");
【】Spring MVC概念
Spring MVC是基於JavaEE的
VC層框架
【】Spring MVC功能
實現VC層的職責。
【】Spring MVC引入
Spring Web模塊,Spring WebMVC模塊
【】Spring MVC組成
1.前端核心控制器DispatcherServlet
接收全部HTTP請求
分配具體的控制器負責請求處理。
根據結果類型實現結果處理(轉發,重定向,
生成XML,生成PDF,生成JSON)
2.RequestMapping請求地址映射
3.實際控制器Controller
完成具體的控制功能。
4.結果解析器:
對控制器方法的返回結果進行解析
生成結果類型。(重點:返回JSON)
(REST API編程)
【】Spring MVC前端控制器Dispatcher
Servlet配置
1.在/WEB-INF/web.xml配置
Spring IOC的載入監聽器
<!-- Spring IoC容器XML位置參數 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:context.xml</param-value>
</context-param>
<!-- Spring IoC容器啓動監聽器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
2.配置Spring MVC的前端控制器
<!-- Spring MVC的前端控制器 -->
<servlet>
<servlet-name>DispatcherServlet</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>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>*.mvc</url-pattern>
</servlet-mapping>
3.配置Spring MVC的XML文件
建立springmvc.xml在classpath下。
在Spring MVC配置XML文件中:
<!-- Spring MVC註解啓用 -->
<mvc:annotation-driven />
【】編寫Controller類
Spring MVC支持POJO模式的控制器類。
1.編寫POJO類。
2.聲明@Controller
3.編寫控制方法。
4.爲控制方法映射請求地址
@RequestMapping("URI")
Spring第09講 Spring MVC控制器編程
【】Controller的類型
1.常規控制器:
使用@Controller聲明
功能:主要是完成轉發和重定向。
與JSP和JSTL協做。
2.基於REST API的控制器:
使用@RestController
功能:直接向瀏覽器發送響應。
主要是JSON類型的響應。
主要實現SPA應用。
JSON結果須要引入Jackson框架類庫。
在本身的電腦上安裝軟件:Postman (64位)
Postman-win64-7.1.1-Setup.exe
【】控制器方法
Spring MVC的控制器方法沒有特定的要求
規範。
方法名任意,方法參數類型衆多。
方法返回類型多種。
根據業務需求本身肯定參數和返回類型。
【】方法的URI請求地址映射
Spring MVC每一個控制方法對應一個惟一的
URI地址。
URI:/oassm/department/add.jsp
URL:http://localhost:8080/oassm/
department/add.jsp
URI地址使用@RequestMapping實現
映射
@RequestMapping語法:
@RequestMapping(屬性=值,屬性=值,....)
經常使用的屬性:
(1)value="uri": 指定URI地址,默認屬性。
(2)path="uri", 與value相同。
(3)method={} 指定請求的方法
method= {RequestMethod.POST,
RequestMethod.GET}
(4)params={} 指定包含的請求參數
params={"userid","username"}
(5)headers={} 指定包含的請求頭
headers={"User-Agent"}
(6) consumes={} 指定請求的類型
consumes={"application/json"}
consumes={"multipart/form-data"}
目前流行的Web框架:Angular,Vue.js
React 都默認使用JSON請求。
Bootstrap
正常的表單請求:www.form-data
<form action="add.mvc" >
</form>
文件上傳的請求
<form action="add.mvc" enctype="multipart/form-data" >
</form>
(7)produces={}指定響應的類型
生成JSON響應:
produces={"application/json"}
produces={"image/jpeg"}
【】控制器的方法參數
Spring MVC控制器方法的參數支持多種類型。
1.Model類對象:
Spring MVC支持粗粒度數據。
自動將請求參數轉換爲Model對象。
2.Java經常使用類型:String,int, double, Date
使用細粒度方式接收單個數據。
Spring MVC提供2種方式接收單個參數:
(1)請求地址參數:
<a href="list.mvc?rows=10&page=1" >下頁</a>
可使用註解類:@RequestParam註解
@RequestParam語法:
@RequestParam(屬性=值,屬性=值)
主要屬性:required=true|false 強制與選項
public List<DepartmentModel>
getListWithPage(
@RequestParam(required=false,
defaultValue="2") int rows,
@RequestParam(required=false,
defaultValue="1") int page)
throws Exception{
第11講 Spring MVC處理文件上傳與下載
【】文件上傳的實現機制
1.表單的定義
<form action="url" method="post"
enctype="multipart/form-data" >
</form>
2.定義文件選擇域:
<input type="file" name="photo" />
3.提交的數據類型:
請求體包含文本和二進制數據。
4.服務器端接收時須要解析出
文本和二進制數據。
5.解析通常使用文件上傳解析器。
(1)JSPSmartUpload
(2) Apache Common upload
(3) JavaEE Server 內置的文件解析器
(Servlet3.1版本以上)
【】Spring MVC實現文件上傳的機制
1.使用外部的文件上傳框架
(1)Apache Common upload
(2)Servlet3.1以上的文件解析器
2.Sping MVC定義了Multipart數據的解析器
在Spring MVC Context配置文件中
配置使用以上2個文件上傳框架的解析器
3.Spring MVC在接收到Mulitpart請求時
自動交給解析器進行解析。
解析的文本使用傳統的方式接收。
解析的文件使用MultipartFile接收
4.經過MultipartFile的方法實現
文件的處理。
【】Spring MVC文件解析器的配置
1.使用Apache Common Upload框架
(1) 引入Common Upload JAR文件。
(2) 引入common IO jAR
(3)在Spring MVC Context配置文件中
配置使用upload的解析器
<!-- 使用Apache Common Upload文件解析器 -->
<bean id="commonUploadmultipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- one of the properties available; the maximum file size in bytes -->
<property name="maxUploadSize" value="20000000"/>
</bean>
2.Servlet3.1文件上傳解析器
(1)在web.xml的DispatcherServlet中配置
啓用Servlet3.1文件解析器
<multipart-config>
<max-file-size>20848820</max-file-size>
<max-request-size>418018841</max-request-size>
<file-size-threshold>1048576</file-size-threshold>
</multipart-config>
(2)在Spring MVC的Context配置文件中
配置Servlet3.1文件上傳解析器:
參見書P391代碼。
【】Spring MVC控制器接收上傳文件
Spring MVC使用MultipartFile接收文件。
1.單個文件:
<input type="file" name="photo" >
接收:
定義變量:
MultipartFile photo
2.多個文件:
<input type="file" name="photo" >
<input type="file" name="photo" >
<input type="file" name="photo" >
接收:
MultipartFile[] photo
【】Spring MVC處理文件下載
1.使用Servlet API編程
經過在Controller類中引入Servlet API
Response接口對象實現編程。
Spring第09_10講 Spring MVC控制器編程
【】Controller的類型
1.常規控制器:
使用@Controller聲明
功能:主要是完成轉發和重定向。
與JSP和JSTL協做。
2.基於REST API的控制器:
使用@RestController
功能:直接向瀏覽器發送響應。
主要是JSON類型的響應。
主要實現SPA應用。
JSON結果須要引入Jackson框架類庫。
在本身的電腦上安裝軟件:Postman (64位)
Postman-win64-7.1.1-Setup.exe
【】控制器方法
Spring MVC的控制器方法沒有特定的要求
規範。
方法名任意,方法參數類型衆多。
方法返回類型多種。
根據業務需求本身肯定參數和返回類型。
【】方法的URI請求地址映射
Spring MVC每一個控制方法對應一個惟一的
URI地址。
URI:/oassm/department/add.jsp
URL:http://localhost:8080/oassm/
department/add.jsp
URI地址使用@RequestMapping實現
映射
@RequestMapping語法:
@RequestMapping(屬性=值,屬性=值,....)
經常使用的屬性:
(1)value="uri": 指定URI地址,默認屬性。
(2)path="uri", 與value相同。
(3)method={} 指定請求的方法
method= {RequestMethod.POST,
RequestMethod.GET}
(4)params={} 指定包含的請求參數
params={"userid","username"}
(5)headers={} 指定包含的請求頭
headers={"User-Agent"}
(6) consumes={} 指定請求的類型
consumes={"application/json"}
consumes={"multipart/form-data"}
目前流行的Web框架:Angular,Vue.js
React 都默認使用JSON請求。
Bootstrap
正常的表單請求:www.form-data
<form action="add.mvc" >
</form>
文件上傳的請求
<form action="add.mvc" enctype="multipart/form-data" >
</form>
(7)produces={}指定響應的類型
生成JSON響應:
produces={"application/json"}
produces={"image/jpeg"}
【】控制器的方法參數
Spring MVC控制器方法的參數支持多種類型。
1.Model類對象:
Spring MVC支持粗粒度數據。
自動將請求參數轉換爲Model對象。
若是接收JSON請求,
須要使用註解類@RequestBody
2.Java經常使用類型:String,int, double, Date
使用細粒度方式接收單個數據。
Spring MVC提供 種方式接收單個參數:
(1)請求地址參數:
<a href="list.mvc?rows=10&page=1" >下頁</a>
可使用註解類:@RequestParam註解
@RequestParam語法:
@RequestParam(屬性=值,屬性=值)
主要屬性:required=true|false 強制與選項
public List<DepartmentModel>
getListWithPage(
@RequestParam(required=false,
defaultValue="2") int rows,
@RequestParam(required=false,
defaultValue="1") int page)
throws Exception{}
(2)URI中變量參數:
語法: <a href="list/{rows}/{page}.mvc" >
list/10/2.mvc
Spring MVC使用註解@PathVariable("name")
(3)請求頭的參數:
方法名(@RequestHeader("name") 參數)
案例:
@RequestMapping(value="/checkHeader")
public String checkHeader(@RequestHeader("Content-Length") int length) throws Exception{
System.out.println("長度:"+length);
return "OK";
}
@RequestHeader("User-Agent") String browser
(4)取得Cookie的值
Spring MVC提供取得指定name的Cookie的值
@CookieValue("userid") String user
add(@CookieValue("userid") String user) {
}
3.請求對象:HttpServletRequest
通常狀況下不多直接使用Request對象
4.響應對象:HttpServletResponse
當控制器發送圖片等,可使用響應對象。
5.會話對象:HttpSession
取得用戶登陸信息,須要使用會話對象。
login(String id,String password, HttpSession session){
}
【】控制器方法的返回類型
1.當使用REST Controller時,能夠返回
任何能轉換爲JSON的類型。
普通的Controller使用@ResponseBody
@RestController=@Controller+
@ResponseBody
2.使用傳統的Controller時,
通常返回String, 表示JSP的地址
或者是控制器的地址。
return "department/add";
return "redirect:/department/tomain.mvc";
【】SPA模式
SPA-Single Page Application
系統啓動主頁後,地址欄不改變。
全部的子網頁都是經過某種機制
動態嵌入到主頁中。
jquery經過load方法。
Angular經過組件組裝。
【】複習Jquery
1.語法:
(1) $("選擇器").函數(參數,.....);
(2) $.函數(參數,.....);
function(){
$("div#leftmenu a").on("click",function(event){
var href=$(this).attr("href");
$("div#maincontent").load(href);
event.preventDefault();
});
}
【】定位器
jquey使用CSS定位器
1. 標記定位:
a { font-size:40px};
$("a").css("font-size","40px");
2.ID定位器: <a id="xxxx" ></a>
$("a#xxxx").html("鏈接01");
3.類定位器: <a class="main" ></a<
$("a.main").html("aaaa");
4.子元素定位器:
<div id="main"> <span></span></div>
var info= $("div#main span").html();
【】jQuery經常使用的函數
1.html(), html(參數);取得和設置標記的內容
var info= $("div#main span").html();
$("div#main span").html("aaaa");
2.attr("name"), attr("name","value")
取得標記屬性的值,
或設置屬性的值。
3.on("事件名",function(){處理代碼});