JSP
JSP内置对象
JSP内置对象 | 对象描述 |
---|---|
Out | 向客户端对象输出数据 |
Request | 向服务器提交数据 |
Response | 服务器项目信息 |
Exception | 异常信息 |
Config | 配置信息 |
Page | 指向当前page本身 |
Session | 保存会话信息(统一用户的不同对象之间共享信息) |
Application | 上下文(不同用户间共享信息) |
PageContext | 队jsp页面所有对象及命名空间的访问 |
out对象
out.flush()
out.clearBuffer
out.clear
out.print("获取当前缓冲区大小:"+out.getBufferSize());
out.print("当前缓冲区剩余字节数目"+out.getRemaining());
Request对象
Request对象 | 对象描述 |
---|---|
简单语法格式整理
<jsp:forward page="login.jsp">
<jsp:param value="jikexueyuan" name="username"/>
<jsp:param value="sunxiaohang" name="password"/>
</jsp:forward>
<%@page errorPage="error_page.jsp" isErrorPage="true" %>
String username=request.getParameter("username");
String password=request.getParameter("password");
out.println("username "+username);
out.println("<br/>");
out.println("password "+password);
<jsp:include page="body.jsp">
<jsp:param name="bgcolor" value="red"/>
</jsp:include>
<body bgcolor="<%=request.getParameter("bgcolor")%>">
</body>
<jsp:useBean id="person" class="Person"></jsp:useBean>
<jsp:setProperty property="name" name="person"/>
<jsp:setProperty property="sex" name="person"/>
<jsp:getProperty property="name" name="person"/>
<jsp:getProperty property="sex" name="person"/>
需要添加statdard.jar jstl.jar包
Spring内置对象
response.setHeader("Cache-Control","no-cache");//无缓存
response.setIntHeader("refresh",2);//设置两秒钟自动刷新
out.print("this date is :"+new java.util.Date().toString()+"<br>");
response.sendRedirect("https://www.baidu.com");//重定向页面
Cookie cookie=new Cookie("username","password");
cookie.setMaxAge(3600);
response.addCookie(cookie);
session.getId();
面向方面
的程序设计(AOP)
Spring框架的一个关键组件是面向方面的程序设计(AOP)框架。一个程序中跨越多个点的功能被称为横切关注点
,其在概念上独立于应用程序的业务逻辑(sample:日志记录、声明性事务)
OOP
中模块化的关键单元是类,AOP
中模块化的关键单元室方面。AOP
帮助你将横切关注点从他们所影响的对象中分离出来,依赖注入
帮助你将你的应用程序对象从彼此中分离出来。
控制反转IOC
在编写一个复杂的java程序时应用程序类应当尽可能的独立于其他的java类来增加这些类的可重用性,当进行单元测试时,可以使他们独立于其他类进行测试。依赖注入DI
依赖注入可以以向构造函数传递参数的方式发生,或者通过使用setter方法post-construction。
Spring体系结构
核心容器
核心容器由核心、bean、上下文的表达式语言模块组成
-
核心
提供框架的基本组成部分、包括IOC和依赖注入功能。 -
Bean
提供BeanFactory,工厂模式的复杂实现。 -
上下文
建立在由core和bean提供的坚实基础上,他是访问定义和配置的任何对象的媒介。ApplicationContext接口是上下文模块的重点。 -
表达式语言
模块在运行时提供了查询和操作一个对象图的强大的表达式语言
数据集成、访问
-
JDBC
提供删除冗余的JDBC相关编码的JDBC抽象层 -
ORC
为流行的对象关系映射API,包括JPA、JDO、Hibernate和iBatis提供集成层 -
OXM
提供抽象层、它支持对JAXB、Castor、XMLBeans,JiBx和XStream的对象/XML映射实现 -
JMS
java消息服务包含生产和消费的信息的功能 -
事务
事务模块为实现特殊接口的类及所有的POJO支持编程式和声明式事务管理
Web
-
Web
提供基本的面向web的集成功能,例如多个文件上传的功能和使用servlet监听器和面向web应用程序的上下文来初始化IOC容器 -
Web-MVC
包含Spring的模型-视图-控制(MVC),实现了web应用程序 -
Web-Socket
为WebSocket-Based
提供支持,而且在web应用程序中提供客户端和服务器端之间的通信的两种方式。 -
Web-Portlet
提供在portlet环境中实现MVC,并且反映了Web-Servlet模块的功能。
Spring实例
- 1.生成工厂对象,加载完指定路径下bean配置文件,利用框架提供的
FileSystemXmlApplicationContext
API生成工厂beanFileSystemXmlApplicationContext
负责生成和初始化所有对象,比如:所有XML bean配置文件中的bean - 利用第一步生成的上下文中的
getBean()
方法得到所需要的bean,这个方法通过配置中的beanID
来返回一个真正的对象,一旦得到这个对象就可以利用这个对象条用任何方法。
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("/configure/beansConfigure.xml");
HelloWord helloWord= (HelloWord) applicationContext.getBean("helloWord");
helloWord.getMessage();
bean property
属性 | 描述 |
---|---|
class | 强制属性,制定用来创建bean的bean类 |
name/id | 指定唯一的bean的标识符 |
scope | 指定由特定bean定义创建的对象的作用域 |
constructor-arg | 用来注入依赖关系 |
properties | 用来注入依赖关系 |
autowiring mode | 用来注入依赖关系 |
lazy-initialization mode | 第一次调用时创建对象(懒汉模式) |
initialization | 在bean的所有必须属性被容器设置之后,调用回调方法 |
destruction | 当包含该bean的容器被销毁是,使用回调方法 |
Spring配置元数据
Spring IoC
容器完全由实际编写的配置元数据的格式解耦
- 基于XML的配置文件
- 基于注解的配置
- 基于java的配置
Spring Bean的作用域
作用域 | 描述 |
---|---|
singleTon |
单例模式 |
prototype |
普通模式,每次调用创建一个新的对象 |
request |
作用域定义为HTTP请求,只在web-aware spring ApplicationContext的上下文中有效 |
session |
作用域定义限制为HTTP会话,只在web-aware spring ApplicationContext的上下文中有效 |
global-session |
作用域将bean的定义限制为全局HTTP绘画,只在web-aware spring ApplicationContext的上下文中有效 |
在Spring定义一个bean时,必须声明该bean的作用域.
作用域 | 描述 |
---|---|
singleTon |
单例模式 |
prototype |
普通模式,每次调用创建一个新的对象 |
request |
作用域定义为HTTP请求,只在web-aware spring ApplicationContext的上下文中有效 |
session |
作用域定义限制为HTTP会话,只在web-aware spring ApplicationContext的上下文中有效 |
global-session |
作用域将bean的定义限制为全局HTTP绘画,只在web-aware spring ApplicationContext的上下文中有效 |
作用域设置实例
<bean id="singleTon" class="com.example.SingleTon"
scope="singleton">
Spring bean的生命周期
声明带有 init-method
和 destroy-method
参数的 。
-
init-method
属性指定一个方法,在实例化 bean 时调用该方法。 -
destroy-method
指定一个方法,只有从容器中移除 bean 后,才能调用该方法。
在org.springframework.beans.factory.InitializingBean
接口指定一个单一的方法:
void afterPropertiesSet() throws Exception;
我们只需要在实现InitializingBean
接口就可以在对象创建后做一些事情
public class TestBean implements InitializingBean {
public void afterPropertiesSet() throws Exception{
// do some initialization work
}
}
同样的在org.springframework.beans.factory.DisposableBean
接口指定一个单一的方法:
void destroy() throws Exception;
然后在类对象中实现DisposableBean
接口
public class TestBean implements DisposableBean{
@Override
public void destroy() throws Exception {
// do some initialization work
}
}
除此之外,在基于XML元数据配置的境况下还可以通过设置destroy-method
属性实现
<bean id="exampleBean"
class="examples.ExampleBean" destroy-method="destroy"/>
在类里面我们可以这样定义
public class TestBean {
public void destroy() {
// do some destruction work
}
}
BeanPostProcessor
有时候会需要在bean实例化对象前后去做一些准备工作或预处理,可以在创建bean类时实现BeanPostProcessor
接口去完成自定义工作。
该接口定义了postProcessBeforeInitialization
和postProcessAfterInitialization
两个带参函数,示例代码如下
public class TestBean implements BeanPostProcessor {
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("BeforeInitialization : " + beanName);
return bean; // you can return any other object as well
}
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("AfterInitialization : " + beanName);
return bean; // you can return any other object as well
}
}
注意
:在main方法中需要注册一个在 AbstractApplicationContext 类中声明的关闭 hook 的 registerShutdownHook() 方法。它将确保正常关闭,并且调用相关的 destroy 方法。
context.registerShutdownHook();