3.3Struct2(上午)的配置和在開發中的應用

(

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;

}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章