1、了解三大框架
什麼是框架?
框架是一種規范,一種規則,一種把技術組織起來的規則,這就是框架。
什麼是三大框架(SSH),Struts、hibernate和spring的作用是什麼?
Struts主要負責層的顯示,spring利用IOC和AOP來處理控制業務(負責對數據庫的操作),hibernate主要作用是數據的持久性到數據庫。
Struts的處理流程:
在Struts 2下載文件Struts-core-2.5.2.文件中(注意:不同jarStruts核心控制器的名稱不同),StrutsPrepareAndExecuteFilter是Struts 2框架的核心控制器,
它負責攔截由<url-pattern>/*</url-pattern>指定的所有用戶請求,當用戶請求到達時,該Filter會過濾用戶的請求。
默認情況下,如果用戶請求的路徑不帶後綴或者後以.action結尾,這時請求將被轉入Struts2框架處理,否則Struts 2框架將略過該請求的處理。
當請求轉入Struts 2框架處理時會先經過一系列的攔截器,然後再到Action。與Struts1不同,Struts 2對用戶的每一次請求都會創建一個Action,所以Struts2中的Action是線程安全的。
2、搭建Struts 2環境
(1)下載關於Struts 2所需要的jar文件,這裡使用的是struts-2.5.2-all.zip,下載地址(這裡)
(2)編寫Struts 2配置文件,分為struts.xml
(3)在Web.xml加入Struts 2的框架啟動配置
搭建Struts 2開發環境——所需的jar包
下載完畢之後解壓文件,將所需要的文件拷貝到項目的lib文件下,這裡配置的是Struts 2.5所需要的配置文件
必備jar包:尤其是log4j.jar和javassist.jar為必備包
注意:如果clesses沒有的話,自行創建,然後創建struts.xml
配置模板代碼如下:
<?xml version="1.0" encoding="UTF-8"?> <!--注意:有時候創建不會自動生成以下的<!DOCTYPE>,所以需要自動引入,
如果使用的是2.3或者是1點幾的話,只需要將Confinuration2.5//EN和下面的struts-2.5.dtd中的2.5改變為2.3或者1.幾即可--> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> </struts>
搭建Struts 2開發環境——Struts 2在Web中的啟動配置
在struts1.x中, struts框架是通過Servlet啟動的。在struts2中,struts框架是通過Filter啟動的。在web.xml中的配置如下:
<!--為Struts2定義一個過濾器 --> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
注意:<!-- 自從Struts 2.1.3以後,下面的FilterDispatcher已經標注為過時
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> -->
在StrutsPrepareAndExecuteFilter類中的init方法會讀取路徑下的配置文件struts.xml完成初始化操作
在讀取完struts.xml的內容後,會以javabean形式存放到內容中,以後struts 2對用戶的每次請求都會使用內存中的數據,而不是去讀取文件。
入門例子:(該例子是官方文檔例子)
在新建的struts.xml配置文件中加入配置:
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <package name="tutorial" extends="struts-default"> <!--name:可自己定義名稱,class:實現類的准確路徑--> <action name="helloword" class="com.hello.HelloWord" method="execute"> <result name="success">HelloWorld.jsp</result> </action> </package> </struts>
在Struts2框架中使用包來管理action,主要用於管理一組業務相關的action,實際開發中,應該把一組業務相關的Action放在同一個包下。
注意:struts.xm和Actoin配合使用,難免會使文件變得臃腫,我們可以通過<include file="文件名.xml"/>將struts.xml分割成多個。
解析struts.xml中的標簽:
Action中的name屬性:
配置包時必須指定name屬性,可以任意命名但是必須唯一,不能對應java類名,如果要讓其他包繼承該包,可使用該屬性進行引用。
method屬性:
指定服務器調用哪個方法,默認為execute。
namespace屬性:
表示命名空間,作為訪問路徑的一部分,如果路徑是helloword.action的話,則加上/命名空間/helloword.action,如果不指定,默認為""(空字符串)
通常每個包都應該繼承struts-default包, 因為Struts2很多核心的功能都是攔截器來實現。
使用Action元素必須指定系列的result元素,每個result元素定義邏輯視圖和物理視圖之間的映射。
result元素中type屬性默認jsp為視圖,可設置type的值改變數據所要顯示的視圖。
例子中使用的HellWord.java實現類代碼:
package com.hello; import com.opensymphony.xwork2.ActionSupport; public class HelloWord extends ActionSupport { public static final String MESSAGE = "Struts is up and running ..."; private String message; public void setMessage(String message){ this.message = message; } public String getMessage() { return message; } public String execute() throws Exception { setMessage(MESSAGE); return SUCCESS; } }
struts.xml配置文件中的HelloWord.jsp代碼:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Hello World</title> </head> <head> <title>Hello World!</title> </head> <body> <h2><s:property value="message" /></h2> </body> </html>
訪問struts2中action的URL路徑由兩部份組成:包的命名空間+action的名稱,例如訪問本例子HelloWord的URL路徑為:/helloworld (注意:完整路徑為
http://localhost:端口/項目名稱/helloworld)。另外我們也可以加上.action後綴訪問此Action。
入門例子運行效果如下: