框架(framework)是一個基本概念上的結(jié)構(gòu)仰泻,用于去解決或者處理復(fù)雜的問題。
學(xué)習(xí)框架:
1 ssh:struts2+spring+hibernate
spring+spring mvc+hibernate
2 ssm:spring +spring mvc+mybatis
框架學(xué)習(xí)方法:
先知道基本運(yùn)行原理-->會配置文件-->能做出結(jié)果-->有余力在研究一下工作原理
Struts框架
Struts是Apache組織開發(fā)的基于MVC設(shè)計模式的一個開源的框架滩届,它為Java Web應(yīng)用提供了模型-視圖-控制器(Model-View- Controller集侯,簡稱MVC)
Struts1是基于servlet開發(fā)的,目前一般不用
Struts2基于FrameWork的框架,不是struts1的升級,而是繼承的webwork的血統(tǒng)帜消,它吸收了struts1和webwork的優(yōu)勢棠枉。
Struts2是Struts1和Webwork(WebWork是由OpenSymphony組織開發(fā)的,致力于組件化和代碼重用的J2EE Web框架泡挺。)結(jié)合的產(chǎn)物
面試:Struts1和Struts2的區(qū)別和對比
1struts2不是struts1的升級辈讶,而是繼承的webwork的血統(tǒng),它吸收了struts1和webwork的優(yōu)勢
Struts2工作原理
客戶端--請求--->FilterDispatcher-->ActionMapper-----攔截器-->Action
|? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
|? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? struts.xml? ? ? ? ? ? ? ? ? ? ? ? ? 攔截器
|? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |轉(zhuǎn)發(fā)
<--------------------------響應(yīng)<---------------------------------jsp
1)客戶端向容器(如Tomcat)提交一個請求
2)請求經(jīng)過一系列過濾器,核心控制器FilterDispatcher 被調(diào)用
3)ActionMapper來決定請求是否需要調(diào)用某個Action
4)如果ActionMapper通過struts.xm決定需要調(diào)用某個Action娄猫,在此之前會依次調(diào)用所有配置的攔截器
5)Action執(zhí)行完畢贱除,根據(jù)結(jié)果字符串在struts.xml的配置中找到對應(yīng)的返回結(jié)果
6)攔截器被再次執(zhí)行
7)跳轉(zhuǎn)到指定的jsp 頁面
8)響應(yīng)給客戶端
注:FilterDispatcher是老的類生闲,現(xiàn)在開發(fā)一般用:StrutsPrepareAndExecuteFilter
Struts2開發(fā)步驟
1 新建一個web工程;
2把struts2核心包拷到工程的lib下月幌;
3在web.xml中配置Struts2的前端控制器碍讯;
4在src目錄下新建struts.xml文件;
4新建一個Action類扯躺,完成從action到j(luò)sp功能捉兴;
5在struts.xml里進(jìn)行配置;
6編寫jsp頁面录语,接收action中傳的值倍啥;
7測試效果。
struts.xml配置
<package name="default" extends="struts-default" namespace="/qq">
<action name="userlogin" class="com.hw.controller.LoginAction">
<result name="success">/suess.jsp</result>
<result name="error">/error.jsp</reault>
</action>
</package>
注:namespace="/qq
"命名空間默認(rèn)為?/?即根目錄
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
開發(fā)action
在Struts2中钦无,一個Action類代表一次請求或調(diào)用逗栽,每個請求的動作都對應(yīng)于一個相應(yīng)的Action類盖袭,一個Action類是一個獨(dú)立的工作單元失暂。
在struts2中開發(fā)action有三種方式
1、寫普通類,屬性有set get方法,有execute()方法
2鳄虱、實現(xiàn) Action接口,里面自動有execute()方法,只有寫屬性同時有set get方法即可
3弟塞、繼承 ActionSupport,因為ActionSupport是在Action基礎(chǔ)上開發(fā)的,所以在實際開發(fā)中一般使用此種方法
注:execute方法是自動調(diào)用,不是可以有2種方式調(diào)用
1:action名!方法名<action name="userlogin" class="com.baidu.controller.LoginAction">...</action>即:<form action="userlogin拙已!login">
2.<action name="userlogin" class="com.baidu.controller.LoginAction" method="login">...</action>即:<form action="userlogin">
Action中有五個常量
SUCCESS = "success"
NONE = "none"
ERROR = "error"
INPUT = "input"
LOGIN = "login"
還有一個execute()方法
ActionSupport
繼承 ActionSupport,因為ActionSupport是在Action基礎(chǔ)上開發(fā)的,可以直接使用Action中的屬性和方法及自身特有的方法.所以在實際開發(fā)中一般使用此種方法
Action中基本的數(shù)據(jù)對應(yīng)方式
<action name="login" class="controller.T2">login决记!方法名.action
http://localhost:8080/day1/qq/login!find.action
屬性驅(qū)動(FieldDriven)
1屬性不多的情況用,只要表單中的元素名和action中的屬性名一致同時有set get方法即可自動取值
2(1)基本數(shù)據(jù)類型的屬性對應(yīng)倍踪,約定俗稱:屬性驅(qū)動
用戶:<input type="text" name="user"><br>密碼:<input type="password" name="pwd"><br><input type="submit" value="登錄">
public class Login extends ActionSupport {
private String user,pwd;
//有set get方法即可取值
(2)JavaBean風(fēng)格的屬性對應(yīng)系宫,約定俗稱:直接使用域?qū)ο蟆?/p>
用戶:<input type="text" name="user.user"><br>密碼:<input type="password" name="user.pwd"><br><input type="submit" value="登錄">
public class UserAction extends ActionSupport {
private User user=new User();//取值用到j(luò)avabean一定要有set get方法
模型驅(qū)動(ModelDriven)
public class UserAction extends ActionSupport implements ModelDriven{
private User user = new User();// 不需要有set get方法,但要有空參數(shù)的構(gòu)造方法
@Override
public String execute() throws Exception {
if (user.getUser().equals("qq") && user.getPwd().equals("123")) {
return SUCCESS;
} else {
return ERROR;
}
}
public User getModel() {
return user;
}
}
動態(tài)調(diào)用
<action name="login" class="controller.T2">login!方法名.action
http://localhost:8080/day1/qq/login!find.action
通配符
<action name="login_*" class="controller.UserAction" method="{1}">
<result name="success">/success.jsp</result>
<result name="error">/fail.jsp</result>
<result name="list">/list.jsp</result>
<result name="tolist" type="redirect">/login_list</result>
</action>
<a href="<%=request.getContextPath() %>/login_del">刪除</a>
<a href="<%=request.getContextPath() %>/login_update">修改</a>
Struts2中的servlet對象
//struts中用 servlet的對象,以下為request session response application out
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
HttpServletResponse response = ServletActionContext.getResponse();
ServletContext servletContext = ServletActionContext.getServletContext();
PrintWriter out = response.getWriter();
struts的mvc框架
m--->model--->javabean即entity包下的類要和表中的字段名一致
v-->view--->jsp
c-->controller--->struts 的action通過struts.xml去實現(xiàn)