一: struts2概述:
JavaEE三大框架之一的web层框架,每次访问action的时候,都会创建一次,是线程安全的,内置拦截器,数据操作,值栈等
二:
struts2解决问题:
三: 创建一个HellowWord程序:
1 :导入jar包:
2 创建action:
package cn.hr.action.demo;
import com.opensymphony.xwork2.ActionSupport;
public class HellowAction extends ActionSupport {
/**
* 每次访问Servlet,都会执行service()方法
* 每次访问action,默认执行名称excute方法
*/
@Override
public String execute() throws Exception {
System.out.println("execute....");
return "ok";
}
}
3 创建struts.xml配置文件,引入dtd约束和action访问路径配置,其中struts.xml核心配置文件名称和位置都是固定的,位置必须在src下面,名称为struts.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>
<package name="hellow" extends="struts-default" namespace="/">
<!-- name访问名称 -->
<action name="hellowAction" class="cn.hr.action.demo.HellowAction">
<!-- 配置方法的返回值到页面 -->
<result name="ok">/hellow.jsp</result>
</action>
</package>
</struts>
4 配置struts2过滤器:
在web.xml下面加入过滤器, web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>struts2_day01</display-name>
<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>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
5 在WebContent目录下新建一个访问成功的hellow.jsp页面。 启动tomcat访问,得到结果:
二:图解struts2的执行过程:
三: struts2核心配置文件:
1 名称和位置固定的
2 在配置文件中主要三个标签 package、action、result,标签里面的属性
标签package
1 类似于代码包,区别不同的action,要配置action,必须首先写package标签,在package里面才能 配置action
2 package标签属性
(1)name属性
- name属性值根功能本身没有关系的,
- 在一个配置文件中可以写多个package标签,name属性值不能相同的
(2)extends属性
- 属性值固定的,struts-default
- 写了这个属性之后,在package里面配置的类具有action功能
(3)namespace属性
- namespace属性值和action标签里面的name属性值构成访问路径
标签package
1 action标签配置action访问路径
2 action标签属性
(1)name属性
- namespace属性值和action标签里面的name属性值构成访问路径
- 在package标签里面写多个action标签,但是action的name属性值不能相同的
(2)class属性
- action全路径
(3)method属性
- 比如在action里面默认执行的方法execute方法,但是在action里面写其他的方法
- 让action里面多个方法执行,使用method进行配置
标签result
1 根据action的方法返回值,配置到不同的路径里面
2 result标签属性
(1)name属性
- 和方法返回值一样
(2)type属性
- 配置如何到路径中(转发或者重定向)
- type属性默认值 做转发操作
分模块开发
1 单独写配置文件,把配置文件引入到核心配置文件中
Action编写方式
开发中一般使用创建类,继承类ActionSupport
访问action的方法(重点)
1 有三种方式实现
第一种 使用action标签的method属性,在这个属性里面写执行的action的方法
第二种 使用通配符方式实现
第三种 动态访问实现(不用)
2 演示错误
(1)如果action方法有返回值,在配置文件中没有配置,出现错误
(2)在action里面的方法有返回值,如果有返回值时候类型必须是String
(3)action里面的方法可以没有返回值,没有返回值时候,在result标签不需要配置
- 把方法写成void
- 让返回值,返回 ”none”
使用action标签method属性
1 创建action,创建多个方法
2 使用method配置
缺陷:action每个方法都需要配置,如果action里面有多个方法,配置很多的action
使用通配符实现(重点)
1 在action标签里面name属性,name属性值里面写 符号 * 星号
(1)* 理解: 表示匹配任意内容
- 比如访问hello,* 可以匹配到
- 比如访问add,* 可以匹配到