概覽:spring的註解配置 + el表示式 + 如何搭建SSH
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)語法結構
3)變數
EL存取變數資料的方法很簡單,例如:${username}。它的意思是取出某一範圍中名稱為 username的變數。
它會依序從Page、Request、Session、Application範圍查詢(範圍從小到大)。
如果找到則停止,並且不顯示null,而是不顯示值,這也是el表示式的優點,同時也是使用EL表示式取值進行判斷時應該注意的
二、有效表示式
有效表示式可以包含文字、操作符、變數(物件引用)和函式呼叫。
1)文字:
文字文字的值
Boolean true 和 false 例如:
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 將請求引數名稱對映到單個字串引數值(通過呼叫 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、 <c:out value="${屬性名}"></c:out>:輸出標籤
2、迭代標籤
語法:<c:forEach items="userList" var="user" varStatus=“status” begin=“int“ end=”int” step=“int” >
//迴圈體
<c:out value="${status.index}"></c:out>
<c:out value="${status.count}"></c:out>
<c:out value="${ user.name }"></c:out>
<c:out value="${ user.age }"></c:out>
</c:forEach>
說明:1)items:是集合,用EL表示式;
2)var:變數名,存放items ,代表集合中每一條資料
3)varStatus: 顯示迴圈狀態的變數,有一下幾個屬性:
①index:從零開始; 顯示當前迭代的索引值
②count:元素位置,從1開始; 顯示當前迭代顯示的行位置,通過配合判斷語句,實現給奇、偶行著不同的色,以進行分割槽
③first:如果是第一個元素則顯示true;
④last:如果是最後一個元素則顯示true;
begin:迴圈的初始值(整型);
end: 迴圈結束 ;
step:步長,迴圈間隔的數值;
3、 <c:if test="判斷語句"></c:if>:若果滿足test中的條件,則執行<c:if></if>標籤對之間的的語句,相當於if....的結構功能
4、<c:choose>:由於JSTL沒有形如if (){…} else {…}的條件語句,所以這種形式的語句只能用<c:choose>
結構形式:
<c:choose>
<c:when test="判斷語句1">執行語句1</c:when>
<c:when test="判斷語句2">執行語句1</c:when>
..........
<c:otherwise>前面都不符合,執行此預設語句
</c:otherwise>
</c:choose>:用於選擇標籤對之間滿足條件的語句,相當於switch語句
5<c:redirect>標籤
說明:標籤將請求重新定向到另外一個頁面,它有以下屬性
例子:
將請求重新定向到http://www.baiddu.com/login.jsp頁,相當於response.setRedirect (“http://www.yourname.com/login.jsp“);
6<c:param>標籤
說明:<c:param>標籤用來傳遞引數給一個重定向或包含頁面,它有以下屬性
例子: <c:redirect url="http://www.baidu.com/login.jsp">
<c:param name="paramName" value="paramValue"/>
</c:redirect>
這個就在位址列裡面顯示的形式為:http://www.baidu.com/login.jsp?paramName=paramValue
五、<fmt:>
格式化標籤,並顯示說明:需要匯入
<%@ 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="###,###.##" />