当前位置: 代码迷 >> Web前端 >> Struts2 Action 访问web 元素、Action模块包孕、默认Action
  详细解决方案

Struts2 Action 访问web 元素、Action模块包孕、默认Action

热度:166   发布时间:2012-10-24 14:15:58.0
Struts2 Action 访问web 元素、Action模块包含、默认Action
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'web_001.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    Request:<s:property value="#request.web_request_key"/><br/>
    Session:<s:property value="#session.web_session_key"/><br/>
    Application:<s:property value="#application.web_application_key"/><br/>
    
	用户名: <s:property value="#request.user_name"/><br/>
	密  码: <s:property value="#request.password"/><br/>
	学  校: <s:property value="#request.school"/><br/>
	描  述: <s:property value="#request.remark"/><br/>
	<s:debug></s:debug>
  </body>
</html>

?Struts2 中Action 访问web 元素

是指Action中访问request,session,application中的数据。

?

?request,session,application ,HttpServletRequest,HttpSession,ServletContext

前三者都有依赖Container,IOC,后三者也有,Conctainer,IOC

使用最多的也就是前三者的IOC(控制反转)。

?

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
     Struts2中访问Web 元素有四种方法。
     其中使用最多最常用的就是"控制反转和依赖注入"思想.<br/>
     <br/>
     常用方法开发基本步骤:<br/>
     1:Action 访问Web元素需要实现接口实现<br/>
        实现RequestAware,SessionAware,ApplicatoinAware接口<br/>
       使用setXxx()方法设置Map值。<br/>
     2: 通过使用struts.xml配置<br/>
     3:视图展示结果<br/>
       通过使用<s:property name=""/> 获取的数据值可以使用#request.key   #session.key #application.key<br/>
	<br/>
	举例如下:
	web 元素
	<!-- //领域模型页面传递参数 name名称的定义
	<form action="/web_action/web.action">
	   用户名:<input name="user_model.user_name" value="" maxlength="50"/><br/>
	   密  码:<input name="user_model.password" value="" maxlength="50"/><br/>
	   学  校:<input name="user_model.school" value="" maxlength="50"/><br/>
	   描  述:<input name="user_model.remark" value="" maxlength="50"/><br/>
			 <input type="submit" name="submit" value="提交"/>
	</form>
	 -->
	 
	 <form action="/web_action/web.action">
	   用户名:<input name="user_name" value="" maxlength="50"/><br/>
	   密  码:<input name="password" value="" maxlength="50"/><br/>
	   学  校:<input name="school" value="" maxlength="50"/><br/>
	   描  述:<input name="remark" value="" maxlength="50"/><br/>
			 <input type="submit" name="submit" value="提交"/>
	</form>
  </body>
</html>

?

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
	<constant name="i18n" value="utf-8"></constant>
	<!-- 
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="false" />

    <package name="default" namespace="/" extends="struts-default">

        <default-action-ref name="index" />

        <global-results>
            <result name="error">/error.jsp</result>
        </global-results>

        <global-exception-mappings>
            <exception-mapping exception="java.lang.Exception" result="error"/>
        </global-exception-mappings>

        <action name="index">
            <result type="redirectAction">
                <param name="actionName">HelloWorld</param>
                <param name="namespace">/example</param>
            </result>
        </action>
    </package>

    <include file="example.xml"/>
 	-->
    <!-- Add packages here -->
	<!--   默认ACTION的执行  
	<package name="default" namespace="/" extends="struts-default">
		<action name="helloworld">
			<result>/helloworld.jsp</result>
		</action>
	</package>
	-->  
	
	<package name="web" namespace="/web_action" extends="struts-default">
		<action name="web" class="com.summary.action.AccessWebElementsDemo01" method="add">
			<result name="success">/path_file/web_001.jsp</result>
		</action> 
	</package>
	
</struts>

?

?

package com.summary.action;

import java.util.Map;

import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;
import org.apache.struts2.interceptor.ApplicationAware;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.summary.model.UserModel;

public class AccessWebElementsDemo01 extends ActionSupport implements ModelDriven<UserModel>,RequestAware,SessionAware,ApplicationAware{

	/**
	 * 
	 */
	private static final long serialVersionUID = -1843136642468284550L;
	private Map<String, Object> request;
	private Map<String, Object> session;
	private Map<String, Object> application;
	//域模型接受参数需要实例化此域模型	使用领域模型有哥缺点就是在视图展示页面中出现;名称为:领域模型实力对象.对象名 如:<input name="user_model.user_name" value="" maxlength="50"/> 
	//private UserModel user_model; 	
	//属性接受参数
	/*
	private String user_name;
	private String password;
	private String school;
	private String remark;
	*/
	
	//领域模型驱动
	private UserModel user_model = new UserModel();
	
	public String add() {
		System.out.println("========访问web元素=======");
		
		request.put("web_request_key", "web_request_value");
		request.put("user_name",   user_model.getUser_name());
		request.put("password", user_model.getPassword() );
		request.put("school",  user_model.getSchool());
		request.put("remark", user_model.getRemark());
		session.put("web_session_key", "web_session_value");
		application.put("web_application_key", "web_application_value");
		return SUCCESS;
		
	}

	public Map<String, Object> getRequest() {
		return request;
	}

	public void setRequest(Map<String, Object> request) {
		this.request = request;
	}

	public Map<String, Object> getSession() {
		return session;
	}

	public void setSession(Map<String, Object> session) {
		this.session = session;
	}

	public Map<String, Object> getApplication() {
		return application;
	}

	public void setApplication(Map<String, Object> application) {
		this.application = application;
	}
	
	/*
	public String getUser_name() {
		return user_name;
	}

	public void setUser_name(String user_name) {
		this.user_name = user_name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getSchool() {
		return school;
	}

	public void setSchool(String school) {
		this.school = school;
	}

	public String getRemark() {
		return remark;
	}

	public void setRemark(String remark) {
		this.remark = remark;
	}
	
	public UserModel getUser_model() {
		return user_model;
	}


	public void setUser_model(UserModel user_model) {
		this.user_model = user_model;
	}
	 */
	//领域模型 务必重写getModel()方法
	
	public UserModel getModel() {
		return user_model;
	}
}

?

package com.summary.model;

public class UserModel {
	private String user_name="";
	private String password="";
	private String school="";
	private String remark="";
	
	public String getUser_name() {
		return user_name;
	}
	public void setUser_name(String user_name) {
		this.user_name = user_name;
	}
	public String getPassword() {
		return password;
	} 
	public void setPassword(String password) {
		this.password = password;
	}
	public String getSchool() {
		return school;
	}
	public void setSchool(String school) {
		this.school = school;
	}
	public String getRemark() {
		return remark;
	}
	public void setRemark(String remark) {
		this.remark = remark;
	}
	
}

?

?

?

?

?

?

Action模块包含,其实模块包含就是使用struts.xml文件中的<include file="*.xml"/>

?

Action的默认Action是通过使用

<default-action-ref name="index"></default-action-ref>

?

?

<default-action-ref name="index"></default-action-ref>

?<default-class-ref class="com.demo.action.DemoAction01"></default-class-ref>

?<default-interceptor-ref name="xxx"></default-interceptor-ref>

  相关解决方案