Struts 2初体验
Struts2簡(jiǎn)介:
Struts2是一個(gè)基于MVC設(shè)計(jì)模式的Web應(yīng)用框架,它本質(zhì)上相當(dāng)于一個(gè)servlet,在MVC設(shè)計(jì)模式中,Struts2作為控制器(Controller)來(lái)建立模型與視圖的數(shù)據(jù)交互。
Struts 2 目錄結(jié)構(gòu):
apps目錄:Struts2示例應(yīng)用程序
docs目錄:Struts2指南、向?qū)АPI文檔
lib目錄:Struts 2的發(fā)行包及其依賴(lài)包
src目錄:Struts 2項(xiàng)目源代碼
使用Struts 2 開(kāi)發(fā)程序的基本步驟
--手動(dòng)添加Struts支持
1.第一步:加載Struts2 類(lèi)庫(kù),既是添加jar包
1. commons-logging-1.1.x.jar ASF出品的日志包,struts2使用這個(gè)日志包來(lái)支持JDK和Log4j的日志記錄。
2. freemarker-2.3.x.jar 表現(xiàn)層框架,定義了struts2的可視組件主題,struts2的UI標(biāo)簽的模版,使用FreeMark編寫(xiě)
3. ognl-2.6.x.jar 對(duì)象圖導(dǎo)航語(yǔ)言(Object Graphic Navigation Language),struts2框架通過(guò)其讀寫(xiě)對(duì)象屬性,一種功能強(qiáng)大的表達(dá)式語(yǔ)言
4. struts2-core-2.x.x.jar struts2的核心類(lèi)庫(kù)
5. xwork.jar webwork的核心庫(kù),struts2在其上構(gòu)建
6. commons-fileupload-1.2.1.jar 文件上傳組件,2.1.6版本后必須加入此文件
7.struts2-dojo-plugin-2.3.4 為struts所提供的一些控件例如:日歷
2.第二步:配置web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"><display-name></display-name> <welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><!-- 配置Struts2核心配置文件 --><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><!-- 注意:1.filter-class中類(lèi)的地址可在:(1)可建一個(gè)類(lèi),在類(lèi)中點(diǎn)出來(lái)。(2)或直接在Libraries 下 struts2-dojo-plugin-2.1.8.jar下找到右鍵copy類(lèi)的路徑,但必須把后綴點(diǎn)class刪掉。2.url-pattern中的值:(1)/*代表所有頁(yè)面都會(huì)經(jīng)過(guò)此過(guò)濾器。(2)或*.action或*.do后綴的頁(yè)面都會(huì)經(jīng)過(guò)此過(guò)濾器。 --> </web-app>
3.第三步:開(kāi)發(fā)視圖層頁(yè)面login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><base href="<%=basePath%>"><title>登錄頁(yè)面</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><h3>登錄頁(yè)面</h3><form action="userAction" method="post" >用戶(hù)名:<input type="text" name="uname"/><br />密碼: <input type="password" name="upassword" ><br /><input type="submit" value="提交登錄" ></form></body> </html>?
4.第四步:開(kāi)發(fā)控制層com.struts包下或com.action包
package com.struts; /*** 控制層* @author asus**/ public class UserAction {/** * 此屬性用來(lái)接收f(shuō)orm表單提交過(guò)來(lái)的值,屬性名與form表單中name屬性名一致* 必須生成get,set方法 */private String uname;private String upassword;public String execute(){if(uname!=null && uname.equals("admin") && upassword.equals("123")){//進(jìn)入則代表賬號(hào)密碼輸入正確return "success";}return "error";}/** JavaBean */public String getUname() {return uname;}public void setUname(String uname) {this.uname = uname;}public String getUpassword() {return upassword;}public void setUpassword(String upassword) {this.upassword = upassword;}}5.第五步:配置Struts 2配置文件src下創(chuàng)建(struts.xml)需要選TDT struts-2.1.dtd
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "struts-2.1.dtd" > <!-- 配置Struts2配置文件 --> <struts> <!-- package:包name:包名,唯一的,必選項(xiàng)namespace:命名空間,唯一的,相當(dāng)于房間號(hào)。可選項(xiàng),省略情況下是“/”extends:繼承extends=“struts-default”:struts2框架底層提供的核心包struts2-core-2.3.3.jar下的struts-default.xml文件為什么要繼承這個(gè)struts-default.xml文件因?yàn)閟truts框架底層提供的struts-default.xml聲明了所有的攔截器和攔截器棧。我們知道struts2框架運(yùn)行時(shí)執(zhí)行struts-default.xml中的攔截器棧完成必要功能。如果不繼承struts-default.xml文件,就沒(méi)有辦法使用struts2提供的所有攔截器。--><package name="struts2" namespace="/" extends="struts-default" ><!-- action:name:對(duì)應(yīng)頁(yè)面請(qǐng)求鏈接的后面半部分class:對(duì)應(yīng)要執(zhí)行的類(lèi)的完整路徑--><action name="userAction" class="com.struts.UserAction" ><!-- result:結(jié)果類(lèi)型name:對(duì)應(yīng)的是執(zhí)行的類(lèi)的方法的返回值后半部分文本內(nèi)容:轉(zhuǎn)向的頁(yè)面--><result name="success" >/loginSuccess.jsp</result><!-- 賬戶(hù)密碼正確跳轉(zhuǎn)此頁(yè)面 --><result name="error" >/login.jsp</result><!-- 賬戶(hù)密碼錯(cuò)誤跳轉(zhuǎn)登錄頁(yè)面重新輸入 --></action></package> </struts>6.第六步:部署、運(yùn)行項(xiàng)目
--自動(dòng)添加Struts支持
--MyEclipse自動(dòng)添加Struts?支持
右鍵項(xiàng)目-->MyEclipse-->Add Struts Capabilities
注意:Hibernate+Struts2時(shí),若兩個(gè)支持都是自動(dòng)生成的則會(huì)有一個(gè) ?antlr-2.7.2.jar?包沖突。必須去掉一個(gè)。一般是移掉Struts2的。
附加移除操作圖:
?
使用對(duì)象接收f(shuō)rom表的提交的值
屬性設(shè)值的方式
(1):簡(jiǎn)單:在Action設(shè)置屬性,生成SET與GET方法。
參數(shù)的名稱(chēng)與屬性的名稱(chēng)一致。
(2):Action中設(shè)置Bean的屬性
Bean必須生成SET、GET方法。Bean不可以實(shí)例化。
Bean中必須要有一個(gè)默認(rèn)的空參數(shù)的構(gòu)造方法。
參數(shù)的名稱(chēng) = bean的名稱(chēng).bean中屬性的名稱(chēng)。
?
Struts 2訪問(wèn)Servlet API
/** Struts 2訪問(wèn)Servlet API*//**1.與Servlet API解耦的訪問(wèn)方式*///上下文對(duì)象ActionContext context = ActionContext.getContext();//request范圍Map<String, Object> request=(Map<String, Object>) context.get("request");request.put("num1", 1);//session范圍Map<String, Object> session = context.getSession();session.put("num2", 2);//application范圍Map<String, Object> application = context.getApplication();application.put("num3", 3);/** 2.與Servlet API耦合的訪問(wèn)方式*///request范圍HttpServletRequest request = ServletActionContext.getRequest();request.setAttribute("num1", 4);//session范圍HttpSession session = ServletActionContext.getRequest().getSession();session.setAttribute("num2", 5);//application范圍ServletContext application = ServletActionContext.getServletContext();application.setAttribute("num3", 6);?
轉(zhuǎn)載于:https://www.cnblogs.com/wkrbky/p/5886937.html
總結(jié)
以上是生活随笔為你收集整理的Struts 2初体验的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 几种华丽无比开发方式(转载)
- 下一篇: 动态代理之Cglib浅析