一、Struts2.0的配置,主要分三個步驟:(先快速配置一個簡單例子)
1 首先加載Struts2.0所需的jar包。在WEB-INF文件夾下創建一個lib文件夾主要放的jar為
commons-logging-1.1.jar
freemarker-2.3.8.jar
ognl-2.6.11.jar
struts2-core-2.0.8.jar
xwork-2.0.3.jar
commons-fileupload-1.2.1.jar
2 配置web.xml文件。
WEB-INF文件夾里面有個web.xml,新加“filter”和“filter-mapping” 節點。web.xml配置如下:
<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>
在這里我們需要定義filter的名字,我定義的是叫struts2
3 配置struts.xml文件。
最后一步在我們的src源文件里,需要加一個struts.xml,記住這里要和com包在同級目錄下,內容如下:
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="com" extends="struts-default">
<action name="HelloWorld" class="com.HelloWorld">
<result>/HelloWorld.jsp</result>
</action>
<!—這里是我添加的一個action -->
</package>
</struts>
struts2.0就算配置完成了,下我來說說我是怎么使用他的。
簡單的HelloWorld跳轉實例
首先我們需要有一個jsp頁面“HelloWorld.jsp”,代碼如下:
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Hello World!</title>
</head>
<body>
<h2><s:property value="message" /></h2>
</body>
</html>
我們可以看到這里我們看到如果是運行起來的話,頁面里面應該顯示message的值。
我們還需要一個HelloWorld.java類,代碼如下:
package com;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorld extends ActionSupport {
public static final String MESSAGE = "Struts is up and running ";
public String execute() throws Exception {
setMessage(MESSAGE);
return SUCCESS;
}
private String message;
public void setMessage(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
代碼很簡單主要就是給message賦“Struts is up and running”值,千萬別忘了需要繼承ActionSupport類即可。
二、action的學習
1)方法調用:
理論上Struts 2.0的Action無須實現任何接口或繼承任何類型,但是,我們為了方便實現Action,大多數情況下都會繼承com.opensymphony.xwork2.ActionSupport類,并重載(Override)此類里的String execute()方法。此為默認的調用方法。若要自定義調用方法,有三種方法:
1.method單一方法,每一個action配一個方法
2.DMI(動態調用)用action!method
3.通配符*_*,大幅度減少配置量 action_method
2)接收參數:
1.屬性接收
例子:
Login.java
import com.opensymphony.xwork2.ActionSupport;
publicclass Login extends ActionSupport {
private String name;
private String password;
private String message;
public String getName() {
return name;
}
publicvoid setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
publicvoid setPassword(String password) {
this.password = password;
}
public String getMessage() {
return message;
}
@Override
public String execute() {
if("max".equals(name) &&"Secret".equals(password)) {
message ="Welcome, "+ name;
}else{
message ="Invalid user or password";
}
return SUCCESS;
}
}
Login.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Login</title>
</head>
<body>
<s:form action="Login" method="POST">
<s:textfield name="name" label="User name"/>
<s:password name="password" label="Password"/>
<s:submit value="Submit"/>
</s:form>
</body>
</html>
2.domain接收,更高級的POJO訪問路徑問題,將name和password從Login類中分離出來,到新建類User中
LoginX.java
import com.opensymphony.xwork2.ActionSupport;
publicclass LoginX extends ActionSupport {
private User user;
private String message;
publicvoid setUser(User user) {
this.user = user;
}
public User getUser() {
return user;
}
public String getMessage() {
return message;
}
@Override
public String execute() {
if("max".equals(user.getName()) &&"secret".equals(user.getPassword())) {
message ="Welcome, "+ user.getName();
}else{
message ="Invalid user or password";
}
return SUCCESS;
}
}
Login.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Login</title>
</head>
<body>
<s:form action="LoginX" method="POST">
<s:textfield name="user.name" label="User name"/>
<s:password name="user.password" label="Password"/>
<s:submit value="Submit"/>
</s:form>
</body>
</html>
(setter、getter要大寫首字母如setName,之前因為這個老不成功,還不知道為什么)
三、完成頁面框架的部署
article_add.jsp
article_addInput.jsp
article_delete.jsp
article_update.jsp
article_updateInput.jsp
article_list.jsp
如此命名可方便通配符配置,減少配置量。
四、CRUD
與之前完成的DAO模式代碼切合,即Service
底層代碼沒什么變化,struts2取代了jsp使頁面清潔了。
五、標簽
目前才開始用到了
<s:iterator value="#request.name" var xx>
<s:property value="#xx.XXX"/>
</s:iterator>
以及
<s:form action="actionName" method="POST">
<s:textfield name=" article.sTitle" label="標題"/>
<s:textfield name="article.sContent" label="內容"/>
<s:submit value="Submit"/>
</s:form>
未完待續、以后學的繼續添加~

]]>