锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 涓冦佸叧浜嶴truts-Menu閰嶇疆鏂囦歡鍜孉PI鐨勪嬌鐢ㄦ柟娉曪紝璇峰弬鑰冮檮褰曚腑鐨勫畼鏂圭綉绔?/p>
6錛氫綘鐨勭洰褰曠粨鏋勫簲璇ョ被浼煎涓嬶細 鍏佸疄鎴楽truts-Menu 3錛氱粨鍚堟暟鎹簱瀹炵幇鍔ㄦ佽彍鍗?br />
> 鏂板緩鏁版嵁myexamples錛?br />
CREATE DATABASE myexamples 浜屻佽繍琛岀幆澧?br />
Windows 2000 Professional 涓夈佷笅杞戒笌瀹夎 鍥涖佽繍琛岀ず渚嬬▼搴?br />
1錛氬畨瑁呭ソTomcat鍚庯紝瑙e帇緙﹕truts-menu-2.3.zip錛屽皢struts-menu.war閲婃斁鍒癟omcat瀹夎鐩綍涓嬬殑webapps涓嬶紝榪愯Tomcat 浜斻佸畨瑁呬笌閰嶇疆
]]>
]]>
]]>
]]>
]]>
]]><%@ page contentType="text/html; charset=GBK" %>
<%@ taglib uri="struts-menu" prefix="menu" %>
<p>娌℃湁浣跨敤Bundle鍜屾潈闄愭帶鍒?
<menu:useMenuDisplayer name="ListMenu" repository="examplesRepository">
<menu:displayMenu name="DatabaseMenu"/>
<menu:displayMenu name="StandaloneMenu"/>
</menu:useMenuDisplayer></p>
<p>浣跨敤Bundle, 娌℃湁浣跨敤鏉冮檺鎺у埗:
<menu:useMenuDisplayer name="ListMenu" bundle="examplesBundle" repository="examplesRepository">
<menu:displayMenu name="DatabaseMenu"/>
<menu:displayMenu name="StandaloneMenu"/>
</menu:useMenuDisplayer></p>
<p>浣跨敤Bundle鍜屾潈闄愭帶鍒?
<menu:useMenuDisplayer name="ListMenu" permissions="examplesPermession" bundle="examplesBundle" repository="examplesRepository">
<menu:displayMenu name="DatabaseMenu"/>
<menu:displayMenu name="StandaloneMenu"/>
</menu:useMenuDisplayer></p>
闄勶細
Struts-Menu瀹樻柟緗戠珯錛?a >http://struts-menu.sourceforge.net
鏁版嵁搴撻┍鍔ㄧ殑鍔ㄦ佽彍鍗曪細http://demo.raibledesigns.com/struts-menu/dynamicMenu.jsp
]]>
* 浠庢暟鎹簱涓鍙栬彍鍗曢厤緗俊鎭?br />
*
* @return
*/
private Map[] getMenuComponents() {
ArrayList list = new ArrayList();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rest = null;
String sql = "select name,parent_name,title,location,description from menu_item order by id";
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection("jdbc:mysql://localhost/myexamples?user=root&password=mywangya&useUnicode=true&characterEncoding=UTF-8");
pstmt = conn.prepareStatement(sql);
rest = pstmt.executeQuery();
while (rest.next()) {
int i = 1;
HashMap map = new HashMap();
map.put("name", rest.getString(i++));
map.put("parent_name", rest.getString(i++));
map.put("title", rest.getString(i++));
map.put("location", rest.getString(i++));
map.put("description", rest.getString(i++));
list.add(map);
}
} catch (SQLException ex) {
ex.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
if (null!=rest) rest.close();
if (null!=pstmt) pstmt.close();
if (null!=conn) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return (Map[]) list.toArray(new HashMap[0]);
}
/**
* 鏋勯犺彍鍗曟潈闄?br />
*
* @param request
*/
private void buildMenuPermissions(HttpServletRequest request) {
PermissionsAdapter permession = new PermissionsAdapter() {
public boolean isAllowed(MenuComponent menu) {
// 鍚嶇О絳変簬StandaloneMenu鐨勮彍鍗曚笉鏄劇ず
return !"StandaloneMenu".equalsIgnoreCase(menu.getName());
}
};
request.setAttribute("examplesPermession", permession);
}
/**
* 鏋勯犺彍鍗曟樉紺烘爣棰?br />
*
* @param request
*/
private void buildMenuResourceBundle(HttpServletRequest request) {
MenuResourceBundle resourceBundle = new MenuResourceBundle();
request.setAttribute("examplesBundle", resourceBundle);
}
/**
* MenuResourceBundle鏍戠姸鑿滃崟鍥介檯璇█鏄劇ず
*
* @author wenbin.zhang
*
*/
class MenuResourceBundle extends ListResourceBundle {
private ArrayList list = new ArrayList();
public MenuResourceBundle() {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rest = null;
String sql = "select title,titleCN from menu_item order by id";
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection("jdbc:mysql://localhost/myexamples?user=root&password=mywangya&useUnicode=true&characterEncoding=UTF-8");
pstmt = conn.prepareStatement(sql);
rest = pstmt.executeQuery();
while (rest.next()) {
int i = 1;
String[] message = new String[2];
message[0] = rest.getString(i++);
try {
message[1] = new String(rest.getString(i++).getBytes("latin1"), "gbk");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
if (message[0] != null && message[1] != null) {
list.add(message);
}
}
} catch (SQLException ex) {
ex.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
if (null!=rest) rest.close();
if (null!=pstmt) pstmt.close();
if (null!=conn) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public Object[][] getContents() {
return (String[][]) list.toArray(new String[0][0]);
}
}
}
> 灝唖truts-config.xml鏂囦歡鐨?lt;action-mappings />閮ㄥ垎淇敼涓猴細
<action path="/menuAction" type="cn.appex.menu.MenuAction" >
<forward name="success" path="/struts-menu/dynamic-menu.jsp" />
</action>
</action-mappings>
]]>INSERT INTO menu_item
(id, parent_name, name, title, titleCN, location)
VALUES
(1,null,'DatabaseMenu','Database Menu','鏁版嵁搴撳姩鎬佽彍鍗?,null),
(2,'DatabaseMenu','Yahoo','Yahoo Mail','闆呰檸閭歡','http://mail.yahoo.com'),
(3,'DatabaseMenu','JavaBlogs','JavaBlogs','Java鍗氬','http://javablogs.com'),
(4,null,'StandaloneMenu','Standalone Menu','鐙珛鐨勮彍鍗?,'http://www.sohu.com')
> 鏂板緩涓涓猄truts鐨凙ction錛屼唬鐮佸涓嬶細
import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.ListResourceBundle;
import java.util.Map;
import com.mysql.jdbc.Driver;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import net.sf.navigator.menu.MenuComponent;
import net.sf.navigator.menu.MenuRepository;
import net.sf.navigator.menu.PermissionsAdapter;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class MenuAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
buildMenuRepository(request);
buildMenuResourceBundle(request);
buildMenuPermissions(request);
return (mapping.findForward("success"));
}
/**
* 鍒涘緩鑿滃崟鏁版嵁緇撴瀯
*
* @param request
*/
private void buildMenuRepository(HttpServletRequest request) {
MenuRepository repository = new MenuRepository();
// Get the repository from the application scope - and copy the
// DisplayerMappings from it.
MenuRepository defaultRepository = (MenuRepository) request
.getSession().getServletContext().getAttribute(
MenuRepository.MENU_REPOSITORY_KEY);
repository.setDisplayers(defaultRepository.getDisplayers());
Map[] menus = getMenuComponents();
for (int i=0; i < menus.length; i++) {
MenuComponent mc = new MenuComponent();
Map row = menus[i];
String name = (String) row.get("name");
mc.setName(name);
String parent = (String) row.get("parent_name");
System.out.println(name + ", parent is: " + parent);
if (parent != null) {
MenuComponent parentMenu = repository.getMenu(parent);
if (parentMenu == null) {
System.out.println("parentMenu '" + parent + "' doesn't exist!");
// create a temporary parentMenu
parentMenu = new MenuComponent();
parentMenu.setName(parent);
repository.addMenu(parentMenu);
}
mc.setParent(parentMenu);
}
String title = (String) row.get("title");
mc.setTitle(title);
String location = (String) row.get("location");
mc.setLocation(location);
String description = (String) row.get("description");
mc.setDescription(description);
repository.addMenu(mc);
}
request.setAttribute("examplesRepository", repository);
}
]]>
<MenuConfig>
<Displayers>
<Displayer name="DropDown"
type="net.sf.navigator.displayer.DropDownMenuDisplayer"/>
<Displayer name="Simple"
type="net.sf.navigator.displayer.SimpleMenuDisplayer"/>
<Displayer name="CoolMenu"
type="net.sf.navigator.displayer.CoolMenuDisplayer"/>
<Displayer name="CoolMenu4"
type="net.sf.navigator.displayer.CoolMenuDisplayer4"/>
<Displayer name="MenuForm"
type="net.sf.navigator.example.PermissionsFormMenuDisplayer"/>
<Displayer name="ListMenu"
type="net.sf.navigator.displayer.ListMenuDisplayer"/>
<Displayer name="TabbedMenu"
type="net.sf.navigator.displayer.TabbedMenuDisplayer"/>
<Displayer name="Velocity"
type="net.sf.navigator.displayer.VelocityMenuDisplayer"/>
</Displayers>
<Menus>
<Menu name="DoorSite" title="DoorSite" description="Some famous doorsite" width="50">
<Item name="Yahoo" title="Yahoo">
<Item name="YahooIndex" title="Yahoo Index" location="http://www.yahoo.com.cn"/>
<Item name="YahooMail" title="Yahoo Mail" location="http://cn.mail.yahoo.com"/>
</Item>
<Item name="Sohu" title="Sohu" location="http://www.sohu.com"/>
<Item name="Sina" title="Sina" location="http://www.sina.com.cn"/>
</Menu>
</Menus>
</MenuConfig>
%PROJECT_HOME%\lib
%PROJECT_HOME%\lib\antlr.jar
%PROJECT_HOME%\lib\commons-beanutils.jar
%PROJECT_HOME%\lib\commons-digester.jar
%PROJECT_HOME%\lib\commons-fileupload.jar
%PROJECT_HOME%\lib\commons-lang-2.1.jar
%PROJECT_HOME%\lib\commons-logging.jar
%PROJECT_HOME%\lib\commons-validator.jar
%PROJECT_HOME%\lib\jakarta-oro.jar
%PROJECT_HOME%\lib\jstl-1.0.6.jar
%PROJECT_HOME%\lib\standard-1.0.6.jar
%PROJECT_HOME%\lib\struts.jar
%PROJECT_HOME%\lib\struts-menu-2.3.jar
%PROJECT_HOME%\src
%PROJECT_HOME%\src\log4j.properties
%PROJECT_HOME%\src\application.properties
%PROJECT_HOME%\src\application_zh_CN.properties
%PROJECT_HOME%\web
%PROJECT_HOME%\web\images\
%PROJECT_HOME%\web\scripts\
%PROJECT_HOME%\web\styles\
%PROJECT_HOME%\web\WEB-INF
%PROJECT_HOME%\web\WEB-INF\menu-config.xml
%PROJECT_HOME%\web\WEB-INF\struts-bean.tld
%PROJECT_HOME%\web\WEB-INF\struts-config.xml
%PROJECT_HOME%\web\WEB-INF\struts-html.tld
%PROJECT_HOME%\web\WEB-INF\struts-logic.tld
%PROJECT_HOME%\web\WEB-INF\struts-menu.tld
%PROJECT_HOME%\web\WEB-INF\struts-menu-el.tld
%PROJECT_HOME%\web\WEB-INF\struts-nested.tld
%PROJECT_HOME%\web\WEB-INF\struts-tiles.tld
%PROJECT_HOME%\web\WEB-INF\web.xml
1錛氫嬌鐢ㄩ厤緗枃浠跺疄鐜伴潤鎬佽彍鍗?br />
鏂板緩JSP鏂囦歡web/static-menu.jsp錛屽唴瀹瑰涓嬶細
<%@ taglib uri="struts-menu" prefix="menu" %>
<menu:useMenuDisplayer name="ListMenu"
bundle="org.apache.struts.action.MESSAGE">
<menu:displayMenu name="DoorSite"/>
</menu:useMenuDisplayer>
2錛氬疄鐜頒腑鏂囧寲
> 鍦╯rc\application_zh_CN.properties涓鍔犱笅闈㈢殑鍐呭錛孶nicode鍙互閫氳繃JDK鑷甫鐨刵ative2ascii宸ュ叿寰楀埌錛?br />
menu.DoorSite=\u95e8\u6237\u7f51\u7ad9
#闆呰檸
menu.Yahoo=\u96c5\u864e
#闆呰檸棣栭〉
menu.YahooIndex=\u96c5\u864e\u9996\u9875
#闆呰檸閭歡
menu.YahooMail=\u96c5\u864e\u90ae\u4ef6
#鎼滅嫄
menu.Sohu=\u641c\u72d0
#鏂版氮
menu.Sina=\u65b0\u6d6a
menu.DoorSite=DoorSite
#闆呰檸
menu.Yahoo=Yahoo
#闆呰檸棣栭〉
menu.YahooIndex=Yahoo Index
#闆呰檸閭歡
menu.YahooMail=Yahoo Mail
#鎼滅嫄
menu.Sohu=Sohu
#鏂版氮
menu.Sina=Sina
<Menu name="DoorSite" title="menu.DoorSite" description="Some famous doorsite" width="50">
<Item name="Yahoo" title="menu.Yahoo">
<Item name="YahooIndex" title="menu.YahooIndex" location="http://www.yahoo.com.cn"/>
<Item name="YahooMail" title="menu.YahooMail" location="http://cn.mail.yahoo.com"/>
</Item>
<Item name="Sohu" title="menu.Sohu" location="http://www.sohu.com"/>
<Item name="Sina" title="menu.Sina" location="http://www.sina.com.cn"/>
</Menu>
</Menus>
> 鏂板緩鏁版嵁搴撹〃menu_item錛?br />
CREATE TABLE menu_item (
id BIGINT not null,
parent_name VARCHAR(30),
name VARCHAR(30),
title VARCHAR(30),
titleCN VARCHAR(30),
description VARCHAR(50),
location VARCHAR(255),
target VARCHAR(10),
onclick VARCHAR(100),
onmouseover VARCHAR(100),
onmouseout VARCHAR(100),
image VARCHAR(50),
altImage VARCHAR(30),
tooltip VARCHAR(100),
roles VARCHAR(100),
page VARCHAR(255),
width VARCHAR(5),
height VARCHAR(5),
forward VARCHAR(50),
action VARCHAR(50),
primary key (id)
)
]]>
JDK 1.4.2_03
Eclipse 3.1
Tomcat 5.0.28
Tomcat Plugin 3.1Beta
Struts 1.2.7
Commons-Lang 2.1
Commons-Collections 3.1
Struts-Menu 2.3
MySQL 4.1.10a-nt
1錛氫粠http://java.sun.com涓嬭澆J2SDK錛屽綋鍓?.4.x緋誨垪鐨勬渶鏂扮増鏈負1.4.2_08
2錛氫粠http://www.eclipse.org涓嬭澆Eclipse錛屽綋鍓嶆渶鏂扮増鏈負3.1姝e紡鐗?br />
3錛氫粠http://jakarta.apache.org/tomcat涓嬭澆Tomcat錛屽綋鍓?.x緋誨垪鐨勬渶鏂扮増鏈負5.0.28
4錛氫粠http://www.sysdeo.com/eclipse/tomcatplugin涓嬭澆Eclipse鐨凾omcat鎻掍歡錛屽搴擡clipse3.1x鐨勬渶鏂扮増鏈負3.1Beta
5錛氫粠http://struts.apache.org涓嬭澆Struts錛屽綋鍓嶆渶鏂扮増鏈負1.2.7
6錛氫粠http://jakarta.apache.org/commons/涓嬭澆Commons-Lang錛屽綋鍓嶆渶鏂扮増鏈負2.1錛屼笅杞紺ommons-Collections錛屽綋鍓嶆渶鏂扮増鏈負3.1
7錛氫粠http://struts-menu.sourceforge.net涓嬭澆Struts Menu錛屽綋鍓嶆渶鏂扮増鏈負2.3
8錛氫粠http://www.mysql.com涓嬭澆MySQL鏁版嵁搴擄紝4.x緋誨垪鐨勬渶鏂扮増鏈槸4.1.12a
9錛歁ySQL銆丣DK銆丒clipse銆乀omcat鍜孴omcatPlugin鐨勫畨瑁呭強閰嶇疆璇峰弬鑰冪浉鍏寵祫鏂?/p>
2錛氬湪鍦板潃鏍忚緭鍏?a href="http://localhost:8080/struts-menu">http://localhost:8080/struts-menu
1錛氬湪Eclipse涓柊寤篢omcat欏圭洰錛孋ontext涓?mymenu錛孲ubdirectory涓?web
2錛氬湪欏圭洰鐩綍涓嬮潰鏂板緩lib鐩綍鍜寃eb鐩綍鍙奧EB-INF錛屽湪web/WEB-INF鐩綍涓嬫柊寤簑eb.xml錛屽唴瀹瑰涓嬶細
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>My Example Application -- Vinton Lee</display-name>
<!-- ============= The Struts ActionServlet Configuration ============= -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- ================================================================== -->
<!-- ============= The Struts Action Servlet Mapping ================== -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- ================================================================== -->
<!-- The Welcome File List -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- =============== The Struts Taglib Definition ===================== -->
<taglib>
<taglib-uri>struts-bean</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>struts-html</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>struts-logic</taglib-uri>
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>struts-nested</taglib-uri>
<taglib-location>/WEB-INF/struts-nested.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>struts-tiles</taglib-uri>
<taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
</taglib>
<!-- ================================================================== -->
<!-- ============= The Struts-Menu Taglib Definition ================== -->
<taglib>
<taglib-uri>struts-menu</taglib-uri>
<taglib-location>/WEB-INF/struts-menu.tld</taglib-location>
</taglib>
<!-- ================================================================== -->
</web-app>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<!-- ========== Data Source Configuration =============================== -->
<data-sources />
<!-- ========== Form Bean Definitions =================================== -->
<form-beans />
<!-- ========== Global Exception Definitions ============================ -->
<global-exceptions />
<!-- ========== Global Forward Definitions ============================== -->
<global-forwards />
<!-- ========== Action Mapping Definitions ============================== -->
<action-mappings />
<!-- ========== Controller Configuration ================================ -->
<!-- ========== Message Resources Definitions =========================== -->
<message-resources parameter="application" />
<!-- ========== Plug Ins Configuration ================================== -->
<plug-in className="net.sf.navigator.menu.MenuPlugIn">
<set-property property="menuConfig" value="/WEB-INF/menu-config.xml"/>
</plug-in>
</struts-config>
]]>
2.閰嶇疆web.xml鏂囦歡
鍔犲叆org.apache.struts2.dispatcher.FilterDispatcher榪囨護鍣ㄧ殑閰嶇疆
FilterDispatcher鏄疭TRUTS2鏍稿績鎺у埗鍣ㄣ傝礋璐f嫤鎴墍鏈夌殑鐢ㄦ埛璇鋒眰銆?/span>
鐢ㄦ埛璇鋒眰鐨勫埌杈炬椂錛孎ilter榪囨護鐢ㄦ埛璇鋒眰銆傚鏋滅敤鎴瘋姹備互action緇撳熬錛岃姹傚皢琚漿鍏truts2妗嗘灦澶勭悊銆?br />
3.鍦╟lasses涓嬪姞鍏truts.xml鏂囦歡
Struts.xml鏂囦歡鐢ㄦ潵閰嶇疆action,鎷︽埅鍣ㄧ瓑銆?/span>
i.Struts-default.xml閰嶇疆鏂囦歡浣嶄簬struts-core-2.0.x.jar鍖呬腑銆傛槸struts2鏈鏍稿績鐨勯厤緗枃浠躲?/span>
ii.浠庝腑鍙互鐪嬪埌鏁翠釜鐨剆truts鐨勬牳蹇冨姛鑳界殑鍏ㄨ矊.
iii.Struts鍙互鍦╮esult鍏冪礌涓寚瀹氱浉搴旂殑type灞炴?榛樿jsp).浠庤屾敮鎸佸叾浠栫殑瑙嗗浘鎶鏈?/span>
v.鍖呭彲浠ョ戶鎵垮叾浠栫殑鍖呫傚寘鍙互瀹氫箟鍛藉悕絀洪棿錛岀敤鏉ュ尯鍒叾浠栭厤緗枃浠朵腑鐨勭浉鍚岀殑鍖呭悕銆?/span>
vi.鍖呭彲浠ュ畾涔夋垚abstract=true 榪欐牱鍖呭氨鍙兘琚戶鎵匡紝涓嶈兘琚鏋剁洿鎺ュ疄渚嬪寲銆?/span>
vii.struts鍙互灝嗕竴涓猻truts.xml鏂囦歡鍒嗚В鎴愬涓厤緗枃浠訛紝鐒跺悗鍦╯truts.xml鏂囦歡涓寘鍚叾浠栭厤緗枃浠躲?lt;struts><include file=”struts-partOne.xml”/></struts>
娉ㄦ剰錛氫篃鍙互鍦╳eb.xml涓厤緗甪ilter鏃跺姞鍏onfig鍙傛暟鏉ュ姞杞藉涓厤緗枃浠躲?/span>
3錛巗truts.properties閰嶇疆鏂囦歡
璇ユ枃浠跺畾涔変簡struts2妗嗘灦鐨勫ぇ閲忓睘鎬с傚彧瑕佸皢璇ユ枃浠舵斁鍦╳eb搴旂敤鐨凜LASSPATH涓嬶紝struts2妗嗘灦灝變細鑷姩鍔犺澆銆?/span>
stuts.locale
鎸囧畾Web搴旂敤鐨勯粯璁ocale
struts.i18n.encoding
鎸囧畾搴旂敤鐨勯粯璁ょ紪鐮佺浉褰撲簬璋冪敤HttpServletRequest鐨剆etCharacterEncoding鏂規硶銆?/span>
struts.custom.i18n.resources
鎸囧畾struts搴旂敤鎵闇瑕佺殑鍥介檯鍖栬祫婧愭枃浠剁殑鍚嶇О錛坢essage_zh_cn.properties鍙渶瑕佹寚瀹氬悕涓簃essage錛?/span>
struts.mutipart.parser
璇ュ睘鎬у鐞唌utipart/form-data鐨凪IME綾誨瀷璇鋒眰鐨勬鏋訛紙cos|pell|jakarta錛夐粯璁ゆ槸jakarta(common-fileupload)
struts.multipart.saveDir
鎸囧畾涓婁紶鏂囦歡鐨勪復鏃朵繚瀛樿礬寰勶紝榛樿鏄痡avax.servlet.context.tempdir;
struts.multipart.maxSize
鎸囧畾鏂囦歡涓婁紶涓暣涓姹傚唴瀹瑰厑璁哥殑鏈澶у瓧鑺傛暟銆?/span>
struts.action.extension
鎸囧畾Struts澶勭悊璇鋒眰鍚庣紑錛岄粯璁ゆ槸action(login.action)
struts.serve.static.browserCache
鎸囧畾嫻忚鍣ㄦ槸鍚︾紦瀛橀潤鎬佸唴瀹?/span>
struts.enable.SlashesInActionNames
璇ュ睘鎬ц緗畇truts2鏄惁鍏佽鍦ˋction鍚嶄腑浣跨敤鏂滅嚎錛岃灞炴х殑榛樿鍊兼槸false銆?/span>
struts.devMode
璁劇疆struts2鏄惁浣跨敤寮鍙戞ā寮忥紙true|false錛?/span>
struts.dispatcher.parametersWorkaround
瀵逛簬涓嶆敮鎸丠ttpServlertRequest璋冪敤getParameterMap()鏂規硶鐨勬湇鍔″櫒錛屽彲浠ヨ緗灞炴у間負true
鏉ヨВ鍐寵闂銆備笉鏀寔getParameterMap()鏂規硶鐨勬湇鍔″櫒錛歸eblogic,orion,oc4j
struts.i18n.reload
璁劇疆鏄惁姣忔HTTP璇鋒眰鍒拌揪鏃訛紝緋葷粺閮介噸鏂板姞杞借祫婧愭枃浠躲傞粯璁alse
struts.ui.theme
璁劇疆瑙嗗浘鏍囩鐨勯粯璁や富棰樸傞粯璁ゆ槸xhtml
struts.ui.templateDir
璁劇疆瑙嗗浘涓婚鎵闇妯℃澘鏂囦歡鐨勪綅緗紝榛樿鏄痶emplate,榛樿鍔犺澆template璺緞涓嬬殑妯℃澘鏂囦歡銆?/span>
struts.ui.templateSuffix
鎸囧畾妯℃澘鏂囦歡鐨勫悗緙錛坒tl|vm|jsp錛?/span>
struts.configuration.xml.reload
璁劇疆褰搒truts.xml鏂囦歡鏀瑰彉鍚庯紝緋葷粺鏄惁鑷姩閲嶆柊鍔犺澆銆?/span>
struts.configuration.files
鎸囧畾榛樿鍔犺澆鐨勯厤緗枃浠訛紝榛樿鍊兼槸錛歴truts-default.xml,struts-plugin.xml,struts.xml
struts.objectFactory
鎸囧畾struts2榛樿鐨凮bjectFactoryBean,璇ュ睘鎬ч粯璁ゆ槸spring
struts.objectFactory.spring.autoWire
鎸囧畾Spring妗嗘灦鑷姩瑁呴厤妯″紡錛岄粯璁ゆ槸name.鍗蟲牴鎹瓸ean鐨刵ame灞炴ц嚜鍔ㄨ閰嶃?/span>
struts.objectFactory.spring.userClassCache
鎸囧畾spring妗嗘灦鏄惁緙撳瓨Bean瀹炰緥銆傞粯璁ゆ槸true
struts.objectTypeDeterminer (tiger|notiger)
鍦?/span>Struts2涓煡鎵?/span>vm鏂囦歡鐨勯『搴忓厛鏌ユ壘Web搴旂敤紼嬪簭錛屽啀鏌ユ壘綾昏礬寰勩傚鏋滀綘闇瑕佷嬌鐢?/span>vm浣滀負鏄劇ず灞傦紝鍙渶瑕佸湪閰嶇疆鏂囦歡涓寚瀹?/span>result鐨?/span>type灞炴т負velocity錛岀劧鍚庡皢<param>鐨?/span>location灞炴ф寚瀹氬埌涓涓互vm緇撳熬鐨勮祫婧愪笂灝卞彲浠ヤ簡錛?/span>
1.Struts2涓殑Velocity涓枃涔辯爜鐨勫鐞嗘柟寮忥細
鍥犱負鍦?/span>Velocity-1.4.jar涓殑org.apache.velocity.runtime.defaults涓畾涔夌殑velocity.properties涓畾涔夌殑input.encoding=ISO8859-1錛?/span>output.encoding=ISO8859-1錛岄氬父鏈濂藉湪VM鏂囦歡涓嬌鐢?/span>%{getText(‘’)}璋冪敤鍥介檯鍖栬祫婧愭枃浠剁殑鍐呭灝變笉浼氫駭鐢熶貢鐮併?/span>
2.Velocity鐨?/span>vm鏂囦歡蹇呴』瑕佺粡榪?/span>Action鎵嶅彲浠ヨ闂紝浠ヤ究琚▼搴忚В鏋愶紝涓嶅彲浠ョ洿鎺ヨ闂?/span>vm鏂囦歡銆?/span>
3.鍦?/span>vm鏂囦歡涓嬌鐢?/span>Struts2鐨勬爣絳懼彧闇瑕佸湪鍘熸湁鏍囩鍓嶅姞#s灝卞彲浠ヤ簡錛屽弬鏁頒箣闂翠嬌鐢?/span>””鍒嗛殧錛?/span>
(1.)渚嬪涓嬮潰鏄竴涓〃鍗曠殑瀹氫箟錛?/span>
#sform(“action=Student” namespace=”/ilkj/student”)
#stextfield(“label=%{getText(‘student.label.name’)}” “name=student.name”)
#spassword(“label=%{getText(‘student.label.password’)} ” name=student.age”)
#ssubmit(“value=getText(‘globale.label.submit’)”)
#end
(2.)涓嬮潰鏄彇鍑?/span>session涓殑涓涓弬鏁扮殑鍊?/span>
#sproperty(“value=#session.information” “default=noValue”)
(3.)涓嬮潰鏄闂?/span>Action涓殑灞炴?/span>
${student.name}錛屽綋鐒朵綘涔熷彲浠ョ畝鍗曞啓鎴?/span>$student.name鐨勫艦寮忋?/span>
4.Velocity鐨勫唴寤哄彉閲忥細
stack---ValueStack錛屽彲浠ヤ嬌鐢?/span>${stack.findString(‘OGNL琛ㄨ揪寮?/span>’)}鍙栧?/span>
action---鏈榪戞墽琛岀殑Action錛屼緥濡?/span>${action.getStudent().getName()}鎴栬呬篃鍙互鐩存帴鍐?/span>${action.student.name}
response---HttpServletRequest
request---HttpServletResponse
session---HttpSession
application---ServletContext
base---鐢熸垚搴旂敤鐨勪笂涓嬫枃錛岀浉褰撲笌request.getContextPath()
5.娉ㄩ噴璇硶
(1.)鍗曡娉ㄩ噴錛?/span>##
(2.)澶氳娉ㄩ噴錛?/span>#* ... ... *#
6.鏆傚仠鎵ц
#stop---鍋滄鎵ц鍚庨潰鐨勬ā鏉垮唴瀹?/span>
7.杞箟瀛楃
Velocity浣跨敤 \ 杞箟瀛楃錛屼緥濡?/span>email琚畾涔変負andrew830314@163.com錛?/span>#set($email=’andrew830314@163.com’)錛夛紝浣犺繕鎯寵緭鍑?/span>$email鑰屼笉琚?/span>Velocity瑙f瀽錛岄偅涔堜綘鍙互浣跨敤 \$email銆?/span>
8.寮曞叆鍏朵粬鏂囦歡
#include(“”)錛屽鏋滄槸JSP鎴栬?/span>vm鏂囦歡灝嗕細鏄劇ず鍐呭錛屽叾浠栨枃鏈枃浠舵樉紺烘枃鏈紝浜岃繘鍒朵細鏄劇ず涔辯爜錛屽紩鍏ュ涓枃浠朵嬌鐢?/span> , 闂撮殧錛?/span>#parse(“”)寮曞叆涓涓湰鍦扮殑vm鏂囦歡錛屼笌#include(“”)涓嶅悓錛?/span>#parse(“”)鍙兘寮曞叆涓涓枃浠訛紝騫朵笖#parse(“”)鍙互璁塊棶鐖舵ā鏉塊噷鐨勫彉閲忋?/span>
9.妯℃澘浠g爜澶嶇敤
#macro(浠g爜孌靛悕縐?/span> $鍙傛暟1 ... ...)
... ...
#end
鍙浣跨敤#浠g爜孌靛悕縐?/span>($鍙傛暟1 ... ...)灝卞彲浠ヤ嬌鐢ㄨ繖孌典唬鐮侊紝褰撶劧浣犱篃鍙互涓嶄嬌鐢ㄤ換浣曞弬鏁?/span>
10.鍒ゆ柇璇彞
#if(閫昏緫琛ㄨ揪寮?/span>)
娉ㄦ剰錛氬湪Velocity涓嬌鐢?/span>==鍒ゆ柇涓や釜鍙橀噺鏄惁鐩哥瓑錛岃屼笉鏄嬌鐢?/span>equals(“”)鏂規硶銆?/span>
#else
#end
浠庝笂闈㈡垜浠繕鍙互鎬葷粨鍑猴紝Velocity妯℃澘寮曟搸浣跨敤#琛ㄧず涓縐嶅懡浠わ紝渚嬪#set鏄粰鏌愪釜鍙橀噺璁劇疆鍊鹼紝浣跨敤$寮曠敤鍙橀噺錛屼嬌鐢?/span>()琛ㄧず鍙傛暟錛屼嬌鐢?/span>{}琛ㄧず浣滅敤鑼冨洿銆?/span>
鍙﹀闇瑕佹敞鎰忕殑鏃跺欙紝Velocity鍙細鎸夌収gettXXX()瑙f瀽鍙樿劯鍙橀噺錛屼緥濡?/span>student.name瀹為檯涓婃壘鍒扮殑student.getName()鏂規硶錛屼綘鍙互璇曠潃鍦?/span>Action鍐欎竴涓彉閲忚屼笉浣跨敤getXXX()鏂規硶錛岀湅鐪嬩細涓嶄細鍦?/span>vm涓彇鍒板鹼紝絳旀鏄彉閲忎細琚師鏍瘋緭鍑恒?/span>
Velocity浣跨敤鐨勯兘鏄璞★紝鍗充嬌浣犲畾涔?/span>#set ($count=1)涔熶細琚寘瑁呮垚Integer浣跨敤銆?/span>
鍙﹀錛屼慨鏀?/span>vm鏂囦歡闇瑕侀噸鏂板惎鍔ㄦ湇鍔″櫒錛屽鏋滃湪寮鍙戦樁孌碉紝鎴戜滑鍙互璁劇疆struts.properties涓殑struts.devMode=true閬垮厤姣忔閲嶆柊鍚姩鏈嶅姟鍣ㄣ?/span>
鏈鍚庢垜浠濊冧竴涓嬶紝濡傛灉璐у竵$2.95浼氳Velocity寮曟搸鐩存帴杈撳嚭錛岃繕鏄幓鏌ユ壘2.95榪欎釜鍙橀噺錛熷鏋滀綘鍦ㄦ濊冭繖涓棶棰橈紝璇存槑浣犵殑JAVA鍩虹涓嶈繃鍏沖摝錛佸洜涓?/span>JAVA涓殑鍙橀噺涓嶈兘浠ユ暟瀛楀紑澶寸殑鍝︼紒鍥犳浣犱笉蹇呮媴蹇冭揣甯?/span>$2.95浼氳褰撲綔鍙橀噺瑙f瀽錛佸彟澶栵紝濡傛灉Velocity寮曟搸鏈壘鍒板彉閲忎篃浼氬師鏍瘋緭鍑猴紝渚嬪${student.name}濡傛灉鏈壘鍒頒細鐩存帴鍘熸牱杈撳嚭錛岃繖涔熸槸涓轟粈涔堟垜浠洿鎺ヨ闂?/span>JSP鐨勬椂鍊欎細鐪嬪埌澶ч噺鐨?/span>${}琚師鏍瘋緭鍑恒傚鏋滃彉閲忎笉瀛樺湪,浣犳兂璁╁畠涓嶈緭鍑?鍙互榪欐牱鍐?!{}