(
struts的配置文件
action的類型
action中方法的調用
Action中如何獲取Servlet的對象。
)
1、struts的配置文件
1.1struts的常量配置:
struts中默認位置:struts-core.jar中/org/apache/struts2/default.properties
struts中讀取常量的4個地方:
A:struts-default.xml struts2-core-2.3.28.jar/struts-default.xml。一般不配置
B:struts.xml
C:struts.properties src目錄下新建一個配置文件。 以key=value方式來配置
D:web.xml
<init-param>
<param-name>struts.i18n.encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>struts.devMode</param-name>
<param-value>false</param-value>
</init-param>
依次讀取常量的配置。最後配置會覆蓋前面配置的。
1.2include配置:導入另一個struts的配置文件。
多模塊或者多個合作的項目。
<include file="struts-user.xml"></include>
<include file="struts-notice.xml"></include>
1.3package的配置
name: 包的名稱。必須唯一。爲其他package繼承使用
namespace命名空間。客戶端請求的的命名空間
extend 包之間的繼承。
abstract true|falsetrue:表示包是一個抽象包,限制:不可以在抽象包中配置Action.extend 包之間的繼承。
abstract true|falsetrue:表示包是一個抽象包,限制:不可以在抽象包中配置Action.
1.4action的配置
name:action的名稱
class:action的class路徑
method:調用action中的哪一個方法。如果不配置默認是execute方法。
param:在struts.xml中設置(SET)或者獲取(GET)Actioin定義的成員變量。
設置:
獲取:struts.xml是通過${成員變量名稱},來獲取成員變量的值。
result:配置action中返回的result
result的類型:
chain/dispatcher/redirect/redirectAction/stream/freemarker,默認爲dispatch,表示默認是請求轉發。
1:dispatch:請求轉發到jsp頁面
2:redirect:重定向到jsp頁面
3:chain:請求轉發到另一個Action
4:redirectAction:重定向另一個Action
5:stream:表示返回一個流(文件下載使用)
6:freemarker:表示返回的頁面是一個freemarker頁面。
2、struts的開發運用
2.1:action的類型
<a href="<%=path%>/type/typeAction_1">A:直接寫class</a>
<a href="<%=path%>/type/typeAction_2">B:實現Action接口</a>
<a href="<%=path%>/type/typeAction_3">C:紀承ActionSupport類</a>
2.2:action中方法的調用,調用除了execute的方法
A:使用method屬性。
<a href="<%=path%>/method/methodAction_1_add">add</a>
<a href="<%=path%>/method/methodAction_1_save">save</a>
<a href="<%=path%>/method/methodAction_1_update">update</a>
<a href="<%=path%>/method/methodAction_1_delete">delete</a>
B:使用動態方法調用:前提:開啓struts.enable.DynamicMethodInvocation常量爲true
調用方法:!+方法名稱
<a href="<%=path%>/method/methodAction_2!add">add</a>
<a href="<%=path%>/method/methodAction_2!save">save</a>
<a href="<%=path%>/method/methodAction_2!update">update</a>
<a href="<%=path%>/method/methodAction_2!delete">delete</a>
C:使用通配符調用:對第一方法的簡化操作。
<a href="<%=path%>/method/methodAction_3_add">add</a>
<a href="<%=path%>/method/methodAction_3_save">save</a>
<a href="<%=path%>/method/methodAction_3_update">update</a>
<a href="<%=path%>/method/methodAction_3_delete">delete</a>
Struts.xml中的配置:
<package name="meethod" namespace="/method" extends="struts-default">
<action name="methodAction_1_add" class="com.action.method.MethodAction_1"
method="add"></action>
<action name="methodAction_1_save" class="com.action.method.MethodAction_1"
method="save"></action>
<action name="methodAction_1_update" class="com.action.method.MethodAction_1"
method="update"></action>
<action name="methodAction_1_delete" class="com.action.method.MethodAction_1"
method="delete"></action>
<action name="methodAction_2" class="com.action.method.MethodAction_2"></action>
<action name="methodAction_3_*" class="com.action.method.MethodAction_3"
method="{1}"></action>
</package>
2.3:Action中如何獲取Servlet的對象。
<a href="<%=path%>/servlet/servletAction_1">A:使用ServletActionContext這個類來獲取</a>
<a href="<%=path%>/servlet/servletAction_2">B:讓Action實現Servlet攔截器(struts框架提供)的接口</a>
A:
package com.action.servlet;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class ServletAction_1 extends ActionSupport {
@Override
public String execute() throws Exception {
/**
* 1:使用ServletActionContext這個類來獲取
*/
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
ServletContext servletContext = ServletActionContext
.getServletContext();
HttpSession session = request.getSession();
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
System.out.println(request.getContextPath());
System.out.println(servletContext.getRealPath("/index.jsp"));
System.out.println(session.getId());
out.println("使用out往頁面中往出內容");
out.print("xxxxx");
out.flush();
out.close();
return NONE;
}
}
B:
package com.action.servlet;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware;
import com.opensymphony.xwork2.ActionSupport;
public class ServletAction_2 extends ActionSupport implements
ServletRequestAware, ServletResponseAware, ServletContextAware {
private HttpServletRequest request;
private HttpServletResponse response;
private ServletContext servletContext;
private HttpSession session;
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
if (this.request != null) {
this.session = this.request.getSession();
}
}
@Override
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
@Override
public void setServletContext(ServletContext servletContext) {
this.servletContext = servletContext;
}
@Override
public String execute() throws Exception {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println(request.getContextPath() + "<br/><br/>");
out.println(servletContext.getRealPath("/WEB-INF/lib/web.xml")
+ "<br/><br/>");
out.println("sessionID = " + session.getId() + "<br/><br/>");
out.println("使用out往頁面中往出內容" + "<br/><br/>");
out.print("xxxxx" + "<br/><br/>");
out.flush();
out.close();
return NONE;
}
}
通過以上兩種方法,我們可以得出一個抽象的工具類,到時候所有的action類只要繼承這個BaseAction類就好了。
package com.util;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware;
import com.opensymphony.xwork2.ActionSupport;
public abstract class BaseAction extends ActionSupport implements
ServletRequestAware, ServletResponseAware, ServletContextAware {
protected HttpServletRequest request;
protected HttpServletResponse response;
protected ServletContext servletContext;
protected HttpSession session;
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
if (this.request != null) {
this.session = this.request.getSession();
}
}
@Override
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
@Override
public void setServletContext(ServletContext servletContext) {
this.servletContext = servletContext;
}
@Override
public abstract String execute() throws Exception;
}