概述
struts2框架应用于Java ee三成结构中的web层中struts2是在struts1和webwork基础之上发展的全新的框架structs2版本web层常见的框架structs2、springmvc
Struts2开发流程
导入jar包
创建action
public class HelloAction {
public String
index(){
return "hello";
}
}
配置action访问路径
创建Struts2核心配置文件(在src下,名称为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>
<package name="hellodemo" extends="struts-default" namespace="/">
<action name="" class="com.eric.demo.action.HelloAction">
<result name="ok">/hello.jsp
</result>
</action>
</package>
</struts>配置过滤器(web.xml)
<
filter>
<
filter-name>struts2</
filter-name>
<
filter-
class>org.apache.struts2.dispatcher.
filter.StrutsPrepareAndExecuteFilter</
filter-
class>
</
filter>
<
filter-mapping>
<
filter-name>struts2</
filter-name>
<url-pattern>/*</url-pattern>
</
filter-mapping>
struts2器基本执行过程
通过过滤器获取到请求的路径,得到路径中的“hello”的值到src下去找到struts.xml,使用dom4j进行解析,得到xml文件中的内容,拿着“hello”的值,到xml中的action标签中匹配name属性的值匹配name属性值一样,都是“hello”,找到class属性的值(action的全路径),使用反射来实现功能 // 反射的实现 // 得到类 Class clazz = Class.forName("action的全路径"); // 的到名称为index的方法 Method m = clazz.getMethod("index"); // 方法执行 Object obj = m.invoke(); 得到action方法的返回值,到struts.xml文件中,找到result标签,匹配其name属性的值是否一样,若是一样的,就跳转到配置的页面中去
学习源码(StrutsPrepareAndExecuteFilter)
过滤器在服务器启动的时候创建,在创建时执行init方法
在init方法中加载配置文件,包含自己创建的和struts2自带的。我们需要关注的文件有,struts.xml和web.xml
Struts2配置介绍
Struts2中核心配置文件 <struts> <package name="hellodemo" extends="struts-default" namespace="/"> <action name="hello" class="com.eric.demo.action.HelloAction"> <!--配置方法的返回值到不同的页面--> <result name="success">/hello.jsp</result> </action> </package> </struts>
名称:struts.xml、位置:src下在配置文件中主要有三个标签package、action、result,标签里的属性
package
类似于代码中的包,用于区分不同的action,必须首先写package标签,在package中才能配置actionname属性:值与功能本身没有关系,在一个配置文件中可以写多个package,但是name属性值不能有相同的extends属性:值是固定的 “struts-default”,只有配置了这个属性,其中的类才能具有action的功能,类似于类的继承的思想namespace属性:名称空间,其值要和action标签中的name属性值构成访问路径,默认值为 “/”,比如:/helloaction(很重要),配置action的访问路径
name属性:和package的namespace值构成访问路径,在一个package中可以有多个action标签,但是name属性值不能相同class属性:其值为action类的全路径,底层用反射来实现调用method属性:比如在action中默认执行的是index方法,使用method进行配置可以实现执行action中的其他方法result,根据action方法的返回值,跳转到不同的路径中去
name属性:配置方法的返回值type属性:配置如何到路径中去,例如转发或重定向,默认为转发。
Struts2常量配置
(重点)在src下创建struts.properties,进行修改(了解)在web.xml进行配置(了解)最常用的常量是struts.i18n.encoding=utf-8
表单提交到action中,在action中可以获取到表单数据表单数据中有中文,解决乱码问题若是post提交,直接可以自动转换编码;get提交需要手动转换编
分模块开发
单独写配置文件,把配置文件单独引入到核心配置文件中
hello.xml <struts> <package name="hellodemo" extends="struts-default" namespace="/"> <action name="hello" class="com.eric.demo.action.HelloAction"> <!--配置方法的返回值到不同的页面--> <result name="success">/hello.jsp</result> </action> </package> </struts> struts.xml <struts> <constant name="struts.i18n.encoding" value="utf-8"/> <!--引入hello.xml--> <include file="com/eric/demo/action/hello.xml"></include> </struts>
Action的编写方式
第一种:创建普通类,这个类不继承任何类,也不实现任何接口
第二种:创建类,让这类实现接口 Action
import com.opensymphony.xwork2.Action;
public class UserAction implements Action {
@Override
public String
execute()
throws Exception {
return null;
}
}
第三种:创建类,继承 ActionSuport(最常用)
package com.eric.demo.action;
import com.opensymphony.xwork2.ActionSupport;
public class PersonAction extends ActionSupport {
}
访问action的方法(重点)
第一种:使用action标签的method属性,在这个属性里面写执行action的方法第二种:使用通配符方式实现第三种:动态访问实现(不用)