一、Struts2.0的配置,主要分三個(gè)步驟:(先快速配置一個(gè)簡(jiǎn)單例子)
1 首先加載Struts2.0所需的jar包。在WEB-INF文件夾下創(chuàng)建一個(gè)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文件夾里面有個(gè)web.xml,新加“filter”和“filter-mapping” 節(jié)點(diǎn)。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源文件里,需要加一個(gè)struts.xml,記住這里要和com包在同級(jí)目錄下,內(nèi)容如下:
<!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>
<!—這里是我添加的一個(gè)action -->
</package>
</struts>
struts2.0就算配置完成了,下我來(lái)說(shuō)說(shuō)我是怎么使用他的。
簡(jiǎn)單的HelloWorld跳轉(zhuǎn)實(shí)例
首先我們需要有一個(gè)jsp頁(yè)面“HelloWorld.jsp”,代碼如下:
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Hello World!</title>
</head>
<body>
<h2><s:property value="message" /></h2>
</body>
</html>
我們可以看到這里我們看到如果是運(yùn)行起來(lái)的話,頁(yè)面里面應(yīng)該顯示message的值。
我們還需要一個(gè)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;
}
}
代碼很簡(jiǎn)單主要就是給message賦“Struts is up and running”值,千萬(wàn)別忘了需要繼承ActionSupport類即可。
二、action的學(xué)習(xí)
1)方法調(diào)用:
理論上Struts 2.0的Action無(wú)須實(shí)現(xiàn)任何接口或繼承任何類型,但是,我們?yōu)榱朔奖銓?shí)現(xiàn)Action,大多數(shù)情況下都會(huì)繼承com.opensymphony.xwork2.ActionSupport類,并重載(Override)此類里的String execute()方法。此為默認(rèn)的調(diào)用方法。若要自定義調(diào)用方法,有三種方法:
1.method單一方法,每一個(gè)action配一個(gè)方法
2.DMI(動(dòng)態(tài)調(diào)用)用action!method
3.通配符*_*,大幅度減少配置量 action_method
2)接收參數(shù):
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接收,更高級(jí)的POJO訪問(wèn)路徑問(wèn)題,將name和password從Login類中分離出來(lái),到新建類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要大寫(xiě)首字母如setName,之前因?yàn)檫@個(gè)老不成功,還不知道為什么)
三、完成頁(yè)面框架的部署
article_add.jsp
article_addInput.jsp
article_delete.jsp
article_update.jsp
article_updateInput.jsp
article_list.jsp
如此命名可方便通配符配置,減少配置量。
四、CRUD
與之前完成的DAO模式代碼切合,即Service
底層代碼沒(méi)什么變化,struts2取代了jsp使頁(yè)面清潔了。
五、標(biāo)簽
目前才開(kāi)始用到了
<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="標(biāo)題"/>
<s:textfield name="article.sContent" label="內(nèi)容"/>
<s:submit value="Submit"/>
</s:form>
未完待續(xù)、以后學(xué)的繼續(xù)添加~

]]>