1.Spring的注解配置
从Spring2.5版本开始,支持两套配置方法,
即Schema XML方式和注解方式.
从JDK5.0开始支持注解技术,spring2.5基于jdk5.0技术.
注解方式特点:简单,方便,快捷.
1)组件的自动扫描
可按指定包路径,扫描该包下所有类,遇到指定注解标记,会将该Bean
组件纳入到Spring容器.(等价与)
————-使用方法如下————-
a.首先在Spring XML配置文件开启组件扫描,指定扫描路径
b.在类定义前面使用下列标记
@Component : 通用(各种组件都可以)
@Controller : 控制组件使用 (Action)
@Service : 业务组件使用 (Service)
@Repository : 数据访问组件使用 (DAO)
注意:扫描bean组件,默认用类名首字母小写当id属性值.
如果需要自定义,可以用@Repository(“id值”)
c.如果需要对Bean对象创建进行控制,可以使用以下注解
@Scope : 等价于原scope属性
@PostConstruct : 等价于原init-method属性
@PreDestroy : 等价于原destory-method属性
d.如果需要将一个Bean对象给另一个Bean注入
定义一个Bean对象变量,然后在变量定以前或setter方法定义前
使用下面两种DI注入的注解配置.
@Resource : 可以按类型匹配
@Resource(name=”id值”) : 按指定id值名称匹配
@Autowired : 可以按类型匹配
@Autowired @Qulifier(“id值”) : 按指定id值名称匹配
2)AOP注解配置
———使用方法如下————
a.在Spring XML配置中开启AOP注解配置
b.定义方面组件,在方面组件中使用下面注解标记
@Component //将方面组件扫描到容器(类定义前使用的标记)
@Aspect //将当前组件指定为方面组件(类定义前使用的标记)
@Pointcut(“表达式”) //指定切入点表达式(方法定义前使用的标记)
@AfterThrowing()//异常通知(处理方法前使用)
@AfterReturning()//后置通知(处理方法前使用)
@After()//最终通知(处理方法前使用)
@Before()//前置通知(处理方法前使用)
@Around()//环绕通知(处理方法前使用)
2.Spring整合数据访问技术
Spring框架提供了整合JDBC和Hibernate等技术的支持.
Spring框架对数据访问基础主要提供了以下支持.
—Spring提供了一致的异常处理,Spring提供了一套异常类型,
封装了不同数据访问技术的特有异常类型.
例如DataAccessException
—Spring提供了一套DAO支持类.
DaoSupport,Template系列组件.
例如JdbcDaoSupport,HibernateDaoSupport
JdbcTemplate,HibernateTemplate
—Spring提供了统一的事务处理(采用AOP方式管理).
1)Spring如何整合JDBC技术
a.首先引入JDBC相关的开发包
驱动开发包(mysqldriver.jar),
连接池开发包(commons-dbcp.jar,commons-collection.jar,commons-pool.jar)
b.根据数据表编写实体类
c.编写DAO实现(基于JdbcDaoSupport,JdbcTemplate两个类)
d.在Spring容器中配置DAO.需要注入dataSource对象.
getBean(“dao”)<–UserDAO(使用template)<–注入–DataSource(Connection资源)
JdbcTemplate基本使用:
update() : 用于执行insert,update,delete操作的SQL语句
queryForObject: 用于执行最多返回一行记录的select查询
query:用于执行返回多行记录的select查询
queryForInt:用于执行返回一行一列的select查询.
2)Spring如何整合Hibernate技术
a.引入以下开发包
mysql驱动
dbcp连接池
hibernate开发包
b.根据表添加实体类和hbm.xml映射文件
c.编写DAO实现(基于HibernateDaoSupport,HibernateTemplate两个类)
d.在Spring容器中配置DAO.需要注入sessionFactory对象.
UserDAO(使用template)<–注入–SessionFactory<–注入–DataSource(Connection资源)
HibernateTemplate的使用:
save() : 保存对象
update() : 更新对象
delete() : 删除对象
get()/load() : 按主键id查询
find() : 执行hql语句
EL表达式
EL表达式: Expression Language提供了在 JSP 脚本编制元素范围外(例如:脚本标签)使用运行时表达式的功能。脚本编制元素是指页面中能够用于在JSP 文件中嵌入 Java 代码的元素。它们通常用于对象操作以及执行那些影响所生成内容的计算
1)语法结构
expression2)[]与.运算符EL提供.和[]两种运算符来存取数据。当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用[]。例如: {user.My-Name}应当改为 user[“My−Name”]如果要动态取值时,就可以用[]来做,而.无法做到动态取值。例如: {sessionScope.user[data]}中data 是一个变量
3)变量
EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为 username的变量。
它会依序从Page、Request、Session、Application范围查找(范围从小到大)。
如果找到则停止,并且不显示null,而是不显示值,这也是el表达式的优点,同时也是使用EL表达式取值进行判断时应该注意的
二、有效表达式
有效表达式可以包含文字、操作符、变量(对象引用)和函数调用。
1)文字:
文字文字的值
Boolean true 和 false 例如: trueInteger与Java类似。可以包含任何正数或负数,例如24、−45、567例如: {23+45}
Floating Point 与 Java 类似。可以包含任何正的或负的浮点数,例如 -1.8E-45、4.567
String 任何由单引号或双引号限定的字符串。对于单引号、双引号和反斜杠,使用反斜杠字符作为转义序列。
必须注意,如果在字符串两端使用双引号,则单引号不需要转义。
Null null
2)操作符
JSP 表达式语言提供以下操作符,其中大部分是 Java 中常用的操作符:
术语定义
算术型 +、-(二元)、*、/、div、%、mod、-(一元)
逻辑型 and、&&、or、||、!、not
关系型 ==、eq、!=、ne、、gt、<=、le、>=、ge。可以与其他值进行比较,或与布尔型、字符串型、整型或浮点型文字进行比较。
空空操作符是前缀操作,可用于确定值是否为空。例如:
${empty user.username} ${not empty user.username}
条件型 A ?B :C。根据 A 赋值的结果来赋值 B 或 C。
3)隐式对象
最常用的隐式对象有 param和 {paramValues}.
param 将请求参数名称映射到单个字符串参数值(通过调用 ServletRequest.getParameter (String name) 获得)。
getParameter (String) 方法返回带有特定名称的参数。表达式 $(param . name) 相当于
< %=request. getParameter(“username”)% >
例如在一个页面地址栏里面传的参数可以在另一个页面中通过这样的方式取出
paramValues 将请求参数名称映射到一个数值数组(通过调用 ServletRequest.getParameter (String name) 获得)。
它与 param 隐式对象非常类似,但它检索一个字符串数组而不是单个值。表达式 ${paramvalues. name) 相当于 request.getParamterValues(name)。
header 储存用户浏览器和服务端用来沟通的数据(通过调用 ServletRequest.getHeader(String name) 获得)。
例:要取得用户浏览器的版本,可以使用${header["User-Agent"]}。表达式 ${header. name} 相当于 request.getHeader(name)。
headerValues 有可能同一标头名称拥有不同的值(通过调用 ServletRequest.getHeaders(String) 获得)。
它与头隐式对象非常类似。表达式 ${headerValues. name} 相当于 request.getHeaderValues(name)。
cookie 将 cookie 名称映射到单个 cookie 对象。向服务器发出的客户端请求可以获得一个或多个 cookie。
表达式 ${cookie. name .value} 返回带有特定名称的第一个 cookie 值。
如果请求包含多个同名的 cookie,则应该使用 ${headerValues. name} 表达式。
initParam 将上下文初始化参数名称映射到单个值(通过调用 ServletContext.getInitparameter(String name) 获得)。
表达式${initParam.userid}相当于application.getInitParameter("userid");
pageContext取得其他有关用户要求或页面的详细信息。
${pageContext.request.queryString} 取得请求的参数字符串 相当于<%=request.getQueryString()%>
${pageContext.request.requestURL} 取得请求的URL,但不包括请求之参数字符串 <%=request.getRequestURL()%>
${pageContext.request.contextPath} 服务的web application 的名称 相当于<%=request.getContextPath()%>
${pageContext.request.method} 取得HTTP 的方法(GET、POST)
${pageContext.request.protocol} 取得使用的协议(HTTP/1.1、HTTP/1.0)
${pageContext.request.remoteUser} 取得用户名称
${pageContext.request.remoteAddr } 取得用户的IP 地址
${pageContext.session.new} 判断session 是否为新的
${pageContext.session.id} 取得session 的ID
${pageContext.servletContext.serverInfo} 取得主机端的服务信息
另外:上面提到的pageScope、requestScope、sessionScope 和 applicationScope也都是EL的隐式对象
例如:<%=user.getAddr( ) %> 等价于 ${user.addr} (user为一个变量,在action或者severlet中存放于指定的作用域中,addr为user的属性)
三、特别强调
1、注意当表达式根据名称引用这些对象之一时,返回的是相应的对象而不是相应的属性。
例如:即使现有的 pageContext 属性包含某些其他值,${pageContext} 也返回 PageContext 对象。
2、注意 <%@ page isELIgnored=”true” %> 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中默认的启用EL语言。
四、JSTL(C)标签:
由于EL表达式不能循环取出集合对象的值,所以可以通过使用jstl标签中的方法解决这个循环取出集合对象的问题
jstl是建立在el表达式基础上的语言,属于jsp外部的一个标准标签,库导入标签格式为:<%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c” %>
四 JSTL部分介绍:
1、 :输出标签
2、迭代标签
语法:
//循环体
说明:1)items:是集合,用EL表达式;
2)var:变量名,存放items ,代表集合中每一条数据
3)varStatus: 显示循环状态的变量,有一下几个属性:
①index:从零开始; 显示当前迭代的索引值
②count:元素位置,从1开始; 显示当前迭代显示的行位置,通过配合判断语句,实现给奇、偶行着不同的色,以进行分区
③first:如果是第一个元素则显示true;
④last:如果是最后一个元素则显示true;
begin:循环的初始值(整型);
end: 循环结束 ;
step:步长,循环间隔的数值;
3、
4、
结构形式:
..........
5
说明:标签将请求重新定向到另外一个页面,它有以下属性
例子:
将请求重新定向到http://www.baiddu.com/login.jsp页,相当于response.setRedirect (“http://www.yourname.com/login.jsp“);
6
说明:
例子:
这个就在地址栏里面显示的形式为:http://www.baidu.com/login.jsp?paramName=paramValue
五、
格式化标签,并显示说明:需要导入
<%@ taglib prefix="fmt" http://java.sun.com/jsp/jstl/fmt">http://java.sun.com/jsp/jstl/fmt" %>
1)格式化日期<fmt:formatDate value=“” pattern=“yyyy-MM-dd HH:mm:ss”/>
Value:通过EL表达式或<%new Date() %> 取的日期值;
Pattern:输出的日期格式;
例如:
<fmt:formatDate value="${date }" pattern="yyyy-MM-dd"/>
<fmt:formatDate value="${date }" pattern="yyyy年MM月dd日"/>
2) 格式化数字<fmt:formatNumber value="${number}" pattern="###,###.##" />
如何来搭建ssh 安利一个传送门吧:
http://blog.csdn.net/yeohcooller/article/details/9316923