Struts2基本介绍
Struts2是struts1和Web Work的结合版。
Struts2框架主要通过一个过滤器将Struts集成到Web应用中,这个过滤器对象就是org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter。
通过此过滤器对象,Struts2就可以获取Web应用中的HTTP请求,并将这个请求转发到Action进行处理,Action根据处理的结果返回给客户端。
例:
(1)创建Web项目,将相关的jar包导入WEB-INF目录的lib中。
(2)在web.xml中声明Struts2提供的过滤器
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<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>*.action</url-pattern>
</filter-mapping></web-app>
(3)在src文件中创建strutss.xml文件,在此配置文件中定义Struts2中的Action对象
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<!-- 声明包 -->
<package name="myPackage" extends="struts-default">
<!-- 定义action -->
<action name="first">
<!-- 定义处理成功后的映射页面 -->
<result>/first.jsp</result>
</action>
</package>
</struts>
(4)在index.jsp上编写一个超链接
<a href = “first.action”>请求Struts2</a>//Action对象默认访问后缀为.action
(5)在first.jsp上编写代码
!!!Action对象
(1)Action对象时Struts2框架中的重要对象,主要用于对HTTP请求进行处理,它是一个接口,在项目开发中,创建Action对象都要事先此对象。
例:
public interface Action {
//在Action执行成功的情况下,返回界面的值可以返回一下静态成员变量
public static final String SUCCESS = "success";
public static final String NONE = "none";
public static final String ERROR = "error";
public static final String INPUT = "input";
public static final String LOGIN = "login";
public String execute() throws Exception;
}
(2)请求参数的注入原理
请求参数的注入原理与Spring的Ioc注入原理相同,通过Action对象为属性提供setter方法注入。
public class UserAction extends ActionSupport {
//定义用户名属性
private String userName;
//为userName提供get() set()方法,自动为属性注入值
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String execute()
{
return SUCCESS;
}
}
Action的基本流程:Struts2主要是通过过滤器对象拦截HTTP请求,然后将请求分配到指定的Action中进行处理。
动态Action应用:
(1)创建UserAction的Action对象,在Action对象中增加add() update()方法。
package com.action;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
//定义用户名属性
private String userName;
//为userName提供get() set()方法,自动为属性注入值
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
//添加方法
public String add() throws Exception
{
userName = "马一";
return "add";
}
//更新方法
public String update() throws Exception
{
userName = "马二";
return "update";
}
}
(2)配置struts.xml文件
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<!-- 声明包 -->
<package name="myPackage" extends="struts-default">
<!-- 定义action -->
<action name="userAction" class="com.action.UserAction">
<!-- 定义添加成功后的映射页面 -->
<result name="add">user_add.jsp</result>
<!-- 定义更新成功后的映射页面 -->
<result name="update">user_update.jsp</result>
</action>
</package>
</struts>
(2)创建user_add.jsp和user_update.jsp界面
<1>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<font color="red">
<s:property value="info"/>
</font>>
</body>
</html>
<2>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<font color="red">
<s:property value="info"/>
</font>>
</body>
</html>
通过Struts2的s标签输出UserAction中add()和update()的信息
(3)编写index.jsp界面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>主页</title>
</head>
<body>
```
Struts2的配置文件
(1)配置文件类型
(2)包的配置
name:声明包的名称
extends:声明继承的包
namespace:声明名称空间,也就是访问此包下的Action需要访问的路径
abstract:将包声明为抽象类型
(3)Action相关配置
name:用于配置Action对象被请求的URL映射
class:指定Action对象的类名
method:设置请求Action对象时,调用的方法
converter:指定Action对象类型转换器的类
通配符实现简化配置
使用通配符的情况通常都是针对于有非常多的Action情况下,通过一个命名的约束,使用通配符来配置Action对象。
主要使用的通配符有两个:
<1>”*”:匹配0或多个字符
<2>”\”:是一个转义字符
在struts.xm配置文件中使用通配符:
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<!-- 声明包 -->
<package name="myPackage" extends="struts-default" namespace="/">
<!-- 定义action -->
<action name="user*" class="com.action.UserAction">
<!-- 定义添加成功后的映射页面 -->
<result name="add">user_add.jsp</result>
<!-- 定义更新成功后的映射页面 -->
<result name="update">user_update.jsp</result>
</action>
</package>
</struts>