1.Struts2入门
1.1 入门案例
- 添加struts2相关依赖
- 添加web.xml,加载struts2配置
- 编写index.jsp页面
- 编写Action控制器
- 编写struts.xml文件
1.1.1 添加struts2相关依赖
在pom.xml文件中加入struts2的依赖代码
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.22</version>
</dependency>
1.1.2 添加web.xml,加载struts2配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<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>
</web-app>
1.1.3 编写index.jsp页面
<%--
Created by IntelliJ IDEA.
User: ZhuZhengbin
Date: 2021/4/2
Time: 12:57
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="hello.action">
<div><label for="username">用户名:</label><input id="username" name="username" type="text"></div>
<div><label for="password">密码:</label><input id="password" name="password" type="password"></div>
<div><label for="submit"></label><input id="submit" type="submit"></div>
</form>
</body>
</html>
1.1.4 编写Action控制器
控制器要去实现Action接口,属性驱动机制的属性名要和表单的name属性一致
package cn.zhengbin.action;
import com.opensymphony.xwork2.Action;
public class HelloAction implements Action {
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
/**
* 定义变量,接受页面的用户名username
* 要求:属性名必须与input标签的name属性一直
* 提供getter/setter方法
*/
private String username;
@Override
public String execute() throws Exception {
System.out.println("username:" + username);
return SUCCESS;
}
}
1.1.5 编写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属性:自定义,必须保证唯一,与编码没有任何关系,用于区分package
extends属性:继承某个package,其中struts-default是struts2框架的核心
namespace属性:命名空间,默认为 “/” (根目录)
-->
<package name="default" extends="struts-default" namespace="/">
<!--
action标签:配置访问请求
name属性:访问路径
class属性:访问该路径要执行的控制器
-->
<action name="hello" class="cn.zhengbin.action.HelloAction">
<!--
result标签:配置返回的页面
name属性:属性值可以自定义,必须与控制器返回的逻辑字符串一致
-->
<result name="success">/show.jsp</result>
</action>
</package>
</struts>
1.2 Struts初体验
1.2.1 使用Struts2开发程序的基本步骤
- 加载Struts2类库
- 配置web.xml文件
- 开发视图层页面
- 开发控制器层Action
- 配置struts.xml文件
- 部署、运行项目
1.2.2 Struts2类库
如果用的不是maven项目,必须把这些包全部加到项目中才能用,否则用不了,xxx表示版本号
文件名 | 说明 |
---|---|
struts2-core-xxx.jar | Struts2框架的核心类库 |
xword-core-xxx.jar | XWork类库,Struts2的构建基础 |
ognl-xxx.jar | Struts2使用的一种表达式语言类库 |
freemarker-xxx.jar | Struts2的标签模板使用类库 |
javassist.xxx.GA.jar | 对字节码进行处理 |
commons-fileupload-xxx.jar | 文件上传时需要使用 |
commons-io-xxx.jar | Java IO扩展 |
commons-lang-xxx.jar | 包含的一些数据类型的工具类 |
1.2.3 接受表单数据
定义变量,接受页面的用户名username,要求属性名必须与input标签的name属性一致,必须提供getter/setter方法,省去了request.getParameter()的步骤
/**
* 定义变量,接受页面的用户名username
* 要求:属性名必须与input标签的name属性一致
* 提供getter/setter方法
*/
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
1.2.4 输出结果
在JSP页面中输出结果的方式有两种,分别是:
- EL表达式,例如:
${username}
- struts2标签,例如
<s:property value="username" />
注意:
- struts2标签不能使用其他表达式,如:在struts2标签中使用EL表达式,会报错
- 使用struts2标签输出结果,必须在页面中映入相应的标签库
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<p>用户名:${username}</p>
<p>用户名:<s:property value="username" /></p>
</body>
</html>
1.3 Struts2 配置文件(struts.xml)
1.3.1 struts.xml
- struts.xml配置文件是struts2框架的核心配置文件,主要负责管理Action
- 通常放在WEB-INF/classes目录下,也可以在resource资源目录下,在该目录下的struts.xml文件可以被自动加载
<struts>
<constant name="" value=""/>
<package name="" extends="" namespace="">
<action name="" class="">
<result name=""></result>
</action>
</package>
</struts>
1.3.2==< constand>==标签
- 配置常量,可以改变Struts2框架的一些行为
- name属性表示常量名称,value属性表示常量值
<!-- 开启动态方法调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
1.3.3 ==< package>==标签
- 包的作用:简化维护工作,提高重用性
- 包可以“继承”已定义的包,并可以添加自己包的配置
- name属性位必须且唯一,用于指定包的名称
<?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 name="struts.enable.DynamicMethodInvocation" value="true"/>
<!-- 设置公共模板 -->
<package name="default" extends="struts-default">
<!-- 2.5版本要设置白名单 -->
<global-allowed-methods>regex:.*</global-allowed-methods>
</package>
<package name="user1" extends="default" namespace="/">
<action name="login" class="cn.zhengbin.actions.UserAction">
<result>/success.jsp</result>
</action>
</package>
<package name="user2" extends="default" namespace="/user">
<action name="user" class="cn.zhengbin.actions.UserAction">
<result>/success.jsp</result>
</action>
</package>
<package name="user3" extends="default" namespace="/">
<action name="*" class