1.概述
Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。
总的来说Struts 2就是一个过滤器
2.Struts2环境搭建
1.导包
核心包:
2.添加Struts2配置文件 Struts.xml
在src目录下添加struts.xml配置文件
3.配置核心过滤器
在web.xml下配置Struts2核心过滤器
<!-- 配置Struts2 -->
<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>
3.Struts2完成简单用户信息获取
默认结构:
界面:
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!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>Insert title here</title>
</head>
<body>
Hello Struts2<br>
<!-- 框架会将数据自动保存入值栈之中,所以我们可以直接拿到 -->
user: <s:property value="user"/><br>
password:<s:property value="password"/><br>
</body>
</html>
login.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>Insert title here</title>
</head>
<body>
<form action="${pageContext.request.contextPath }/login.action" method="post">
<input type="text" name="user">
<input type="password" name="password">
<input type="submit" value="提交">
</form>
</body>
</html>
LoginAction.java
/**
* 继承ActionSupport来创建Action
* @author LGX
*
*/
public class LoginAction extends ActionSupport{
/**
* 使用属性驱动的方式获取参数值
* 具体操作:声明变量,提供get/set方法,这样框架就会将对应的值自动注入
*/
private String user;
private String password;
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
/**
* Struts2 编写操作时有固定格式
* 1.必须是public
* 2.返回值必须是String
* 3.方法不能有参数
*/
public String execute() throws Exception {
System.out.println(this.user + ":" + this.password);
return SUCCESS;
}
}
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 包的名称,要求是唯一的,管理action配置
* extends 继承,可以继承其他的包,只要继承了,那么该包就包含了其他包的功能,一般都是继承struts-default
* namespace 名称空间,一般与<action>标签中的name属性共同决定访问路径(通俗话:怎么来访问action),常见的配置如下
namespace="/" 根名称空间
namespace="/aaa" 带有名称的名称空间
* abstract 抽象的。这个属性基本很少使用,值如果是true,那么编写的包是被继承的
-->
<package name="demo01" extends="struts-default" namespace="/">
<!--
action属性
* name 和<package>标签的namespace属性一起来决定访问路径的
* class 配置Action类的全路径(默认值是ActionSupport类)
* method Action类中执行的方法,如果不指定,默认值是execute
-->
<action name="login" class="com.fjut.test.LoginAction" method="execute">
<!--
result属性
* action类中方法执行,返回的结果跳转的页面
* name 结果页面逻辑视图名称
* type 结果类型(默认值是转发,也可以设置其他的值)
-->
<result name="success">/demo01/index.jsp</result>
</action>
</package>
</struts>
web.xml
添加过滤器
代码同上
结果:
控制台:
123456:123456