JSP精要-one

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体系结构
Spring体系框架图
核心容器

核心容器由核心、bean、上下文的表达式语言模块组成

  • 核心提供框架的基本组成部分、包括IOC和依赖注入功能。
  • Bean提供BeanFactory,工厂模式的复杂实现。
  • 上下文建立在由core和bean提供的坚实基础上,他是访问定义和配置的任何对象的媒介。ApplicationContext接口是上下文模块的重点。
  • 表达式语言模块在运行时提供了查询和操作一个对象图的强大的表达式语言
数据集成、访问
  • JDBC提供删除冗余的JDBC相关编码的JDBC抽象层
  • ORC为流行的对象关系映射API,包括JPA、JDO、Hibernate和iBatis提供集成层
  • OXM提供抽象层、它支持对JAXB、Castor、XMLBeans,JiBx和XStream的对象/XML映射实现
  • JMSjava消息服务包含生产和消费的信息的功能
  • 事务事务模块为实现特殊接口的类及所有的POJO支持编程式和声明式事务管理
Web
  • Web提供基本的面向web的集成功能,例如多个文件上传的功能和使用servlet监听器和面向web应用程序的上下文来初始化IOC容器
  • Web-MVC包含Spring的模型-视图-控制(MVC),实现了web应用程序
  • Web-SocketWebSocket-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-methoddestroy-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接口去完成自定义工作。
该接口定义了postProcessBeforeInitializationpostProcessAfterInitialization两个带参函数,示例代码如下

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();

我的文章列表

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • 苹果为推动 Swift 的发展花了很大的力气,Playground 就是其中的一个。Playground 大大降低...
    请叫我小锅阅读 26,427评论 10 46
  • 说起春节,我最先想起的便是家乡春节的夜晚。三十晚上凌晨十二点那一刻,顿时炮竹升天,隔着田野都能听到领村的炮竹声的回...
    marguerate阅读 6,085评论 0 3
  • 很久很没有写作,提笔有点不知所措,一时找不到方向,想了很久决定从遇见罗胖儿开始吧!罗胖儿开启了我的新认...
    大山里的姑娘阅读 212评论 0 0
  • 似乎我们的生活都开始变得类似,比如18岁的时候我们不能恋爱,要考大学。23岁的时候我们要有一份正经工作,等到25...
    耳谷阅读 234评论 0 0