百味皆苦 java后端开发攻城狮

struts2(基本配置)

2019-06-04
百味皆苦

struts.xml

  • 名称和位置固定的,放在src目录下
  • 在配置文件中主要三个标签 package、action、result,标签里面的属性

package

  • 类似于代码包,区别不同的action,要配置action,必须首先写package标签,在package里面才能 配置action
  • name属性:name属性值根功能本身没有关系的,在一个配置文件中可以写多个package标签,name属性值不能相同的
  • extends属性:属性值固定的,struts-default。写了这个属性之后,在package里面配置的类具有action功能
  • namespace属性:namespace属性值和action标签里面的name属性值构成访问路径
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>

	<package name="demo" extends="struts-default" namespace="/">
		<action name="hello" class="cn.itcast.action.HelloAction">
			<result name="ok">/hello.jsp</result>
		</action>
	</package>
</struts>

action

  • action标签配置action访问路径
  • name属性:namespace属性值和action标签里面的name属性值构成访问路径,在package标签里面写多个action标签,但是action的name属性值不能相同的
  • class属性:action全路径
  • method属性:比如在action里面默认执行的方法execute方法,但是在action里面写其他的方法.让action里面多个方法执行,使用method进行配置

result

  • 根据action的方法返回值,配置到不同的路径里面
  • name属性:和方法返回值一样
  • type属性:配置如何到路径中(转发或者重定向),type属性默认值 做转发操作

修改常量

  • struts2默认的常量位置:org.apache.struts2—>static—>default.properties
  • 默认常量可以在struts.xml中进行修改
<constant name="struts.i18n.encoding" value="UTF-8"></constant>

引入xml

  • 单独写配置文件,把配置文件引入到核心配置文件中
  • 比如struts.xml是核心配置文件,hello.xml是团队中某个人的项目配置文件,则可以在struts.xml中引入hello.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	<include file="cn/itcas/action/hello.xml">
</struts>

web.xml

<web-app>
	<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>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>REQUEST</dispatcher>		
		<url-pattern>/*</url-pattern>
	</filter-mapping>

</web-app>

Action类

普通方式

  • 创建普通类,这个不继承任何类,不实现任何接口

实现接口

  • 创建类,实现接口 Action
/**
 * 实现接口
 * @author asus
 *
 */
public class UserAction implements Action{

	@Override
	public String execute() throws Exception {
//		return "success";
		return SUCCESS;
	}

}

继承抽象类

  • 创建类,继承类 ActionSupport(一般使用)
/**
 * 继承类
 * @author asus
 *
 */
public class PersonAction extends ActionSupport {

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

访问action

method

  • 使用action标签的method属性,在这个属性里面写执行的action的方法
package cn.itcast.method;

import com.opensymphony.xwork2.ActionSupport;

public class BookAction extends ActionSupport {

	//添加
	public String add() {
		System.out.println("add..............");
		return NONE;
	}
	
	//修改
	public String update() {
		System.out.println("update..............");
		return NONE;
	}
}

<!-- 配置action的方法访问 -->
	 <package name="methoddemo" extends="struts-default" namespace="/">
		有method属性:写要执行的action里面的方法的名称  
		<action name="addAction" class="cn.itcast.method.BookAction" method="add"></action>
		执行update方法
		<action name="updateAction" class="cn.itcast.method.BookAction" method="update"></action>
	</package> 

  • 缺陷:action每个方法都需要配置,如果action里面有多个方法,配置很多的action

通配符

  • 使用通配符方式实现
  • 在action标签里面name属性,name属性值里面写 符号 * 星号
  • 星号理解: 表示匹配任意内容
package cn.itcast.method;

import com.opensymphony.xwork2.ActionSupport;

public class BookAction extends ActionSupport {

	//添加
	public String add() {
		System.out.println("add..............");
		return NONE;
	}
	
	//修改
	public String update() {
		System.out.println("update..............");
		return NONE;
	}
}

	<!-- 通配符方式实现 -->
	<package name="methoddemo" extends="struts-default" namespace="/">
		<!-- 
			name属性值里面写符号 * 
			(1)执行action里面的add方法,访问 book_add,使用book_*可以匹配到,*相当于变成 add
			
			(2)执行action里面的update方法,访问book_update,使用book_*可以匹配到,*相当于变成 update
			上面两个路径使用 book_* 可以匹配到
			method属性写*值
		 -->
		<action name="book_*" class="cn.itcast.method.BookAction" method="{1}">
		</action>
	</package>

访问book_update.action就会调用action类中的update方法

Comments

Content