Struts2的核心配置之Struts2的常量配置与Action的配置

    最近在学习SSH框架,之前Javaweb学的不扎实。所以做好笔记,方便以后的学习。

1. Struts2常量的配置

    Struts2常量的配置通常采用3种方式,分别如下:

  1. 在struts.xml文件中使用< constant >元素配置常量(最常用的方式);

name:该属性指定了常量的常量名。
value:该属性指定了常量的常量值。
代码示例如下:

<struts>
	<!--设置默认编码集为UTF-8-->
	<constant name="struts.il8n.encoding" value="UTF-8"/>
	<!--设置使用开发模式-->
	<constant name="struts.devMode" value="true"/>
</struts>
  1. 在struts.properties文件中配置常量 ;

    其格式是 key-value 对,及每个key对应一个value,key表示的是Struts2框架中的常量,而value则是其常量值。具体方式如下:

###设置默认编码集为UTF-8
struts.il8n.encoding=UTF-8
##设置action请求的扩展名为action或者没有扩展名
struts.action.extension=action,
###设置不使用开发模式
struts.devMode=false
###色红孩子不开启动态方法调用
struts.enable.DynamicMethodInvocation=false

    和struts.xml文件一样,此文件也应存放于WEB-INF/classes路径下

  1. 在web.xml文件中通过初始化参数配置常量 ;

    在web.xml文件中配置核心过滤器StrutsPrepareAndExecuteFilter时,通过初始化参数来配置常量。通过< filter >元素的< init-param >子元素指定,每个< init-param >元素配置了一个Struts2常量,如下列代码所示:

<filter>
	<!--指定Struts2的核心过滤器-->
	<filter-name>struts2<filter-name>
	<filter-class>
	org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
	</filter-class>
	<!--通过init-parm元素配置Struts2常量,配置默认编码集为UTF_8-->
	<init-param>
		<param-name>struts.il8n.encoding</param-name>
		<param-name>UTF-8</param-name>
	</init-param>
</filter>

2.1 实现Action控制类

    Action作为框架的核心类,实现对用户请求的处理,被称为业务逻辑控制器。实现Action控制类共有3种方式:

  1. POJO的实现

    ActionPOJO全程是Palin Ordinary Java Object (简单的java对象),只要具有一部分getter/setter方法的类就可以称作POJO。一般在这个POJO类中,要有一个公共的无参的构造方法和一个execute()方法(此方法时Action类的默认请求处理方法,定义如下)

public String execute() throws Exception{
	return "success";
}

execute()方法的要求如下:
            方法的权限修饰符为public。
            返回一个字符串,就是指示的下一个页面的Result。
            方法没有参数。

  1. 实现Action接口

  2. 继承ActionSupport类


2.2 配置Action与通配符的使用(见下述例子)

    下面将通过一个小例子向大家完整的讲解上述所有的方法
目录:
在这里插入图片描述
LoginAction.java

package day03011;

public class LoginAction {
	
	public String execute(){
		System.out.println("LoginAction.....execute");
		return "success";
	}
}

LoginAction1.java

package day03011;

import com.opensymphony.xwork2.Action;

public class LoginAction1 implements Action {

	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		return SUCCESS;
	}
	
	public String loginx() throws Exception {
		return SUCCESS;
	}

}

LoginAction2.java

package day03011;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction2 extends ActionSupport {
	
	/**
	 * 在action当中定义属性,
	 * 属性名和请求当中参数名一致
	 * 属性要有标准的Getter/Setter  
	 * 
	 * username==》setUsername
	 * userName==》setUserName
	 */
	private String userName;
	private String password;
	
	public String login(){
		if (userName==null || "".equals(userName)) {
			return ERROR;
		} 
		return SUCCESS;
	}
	
	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

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

}

LoginAction4.java

package day03011;
public class LoginAction4 {
	public String check(){
		return "success";
	}
	public String regrist(){
		return "success";
	}
	public String login(){
		return "success";
	}
}

最后是配置文件struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd" >
<struts>
	<!-- 
		配置常量:constant  参考 default.properties
	 -->
	<constant name="struts.devMode" value="true"></constant>
	<package name="a1" namespace="/" 
			extends="struts-default">
			<!-- 反射 -->
		<action name="login" class="day03011.LoginAction" 
			method="execute">
			<!-- 方法处理结果和视图的映射关系 -->
			<result name="success">/success.jsp</result>
			<result name="fail">/fail.jsp</result>
		</action>
		<!-- 
			action的配置:
				name:必须选项  ,跟请求的url相匹配
				class:类的全名称(用于反射时创建实例的)
				method:可选,默认:execute
				
				~/day03081/login1.action
				day03011.LoginAction1 login1 = new day03011.LoginAction1()
		 -->
		 
		<action name="login1" class="day03011.LoginAction1"	>
			<result name="success">/success.jsp</result>
		</action>
		<!-- 
			~/day03081/loginx.action 
			day03011.LoginAction1 loginx = new day03011.LoginAction1()
		-->
		<action name="loginx" class="day03011.LoginAction1"
			method="loginx">
			<result name="success">/success.jsp</result>
		</action>
		<action name="login2" class="day03011.LoginAction2"
			method="login">
			<result name="success">/success.jsp</result>
			<result name="error">/fail.jsp</result>
		</action>
		
		<!-- 
		 *:通配符
		 ~/user_login  时,*就代表login
		 {1}:表达式中第一个通配符 ,login
		 
		 需要在action当中添加子元素allowed-methods,
		 	值为方法名,多个方法之间用逗号隔开.
		 	
		 在匹配时,会找一个完全匹配的,如果没有,则查找匹配程度最高。
		 
		 name="user_login"
		 name="user_*"
		 name="*_*"
		 
		 -->
		<action name="user_*" class="day03011.LoginAction4" 
			method="{1}">
			<result name="success">/success.jsp</result>
			<allowed-methods>check,login,regrist</allowed-methods>
		</action>
	</package>
</struts>

    首页和成功页自己随便做一个就好了,我的就是一个输入框然后提交。若有任何疑问或是不解,请在下方评论留言,谢谢。

猜你喜欢

转载自blog.csdn.net/YYxiaobao0726/article/details/88609916