一、struts2的定义:
是一个基于MVC设计模式的Web应用框架,本质上相当于一个servlet,在MVC设计模式中,作为控制器(Controller)来建立模型与视图的数据交互。
二、struts2的工作原理:
客户端发送一个请求,经过web.xml配置的拦截器,根据struts.xml的配置,找到对应的Action和方法,然后根据struts.xml配置找到对应的返回结果result,并跳转到相应页面,最后返回响应给客户端。
三、struts2的两大核心(值栈、拦截器):
值栈:struts2本身的一种存储机制,类似于域对象,可以存值和取值。每次请求都会创建一个Action对象,但是action对象有且只有一个值栈对象。
拦截器
四、struts2的用处:
用于接受页面信息然后通过内部处理,将结果返回。
五、struts2的使用流程:
1、导入jar包
2、配置核心过滤器
3、创建Action,书写代码并配置返回值
4、配置struts2的配置文件
六、代码实现:
1、导入jar包:
<!--添加struts2的依赖-->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.14</version>
</dependency>
2、配置核心过滤器(在web.xml文件里):
<!--配置struts2的拦截器-->
<filter>
<filter-name>struts</filter-name>
<filter-
class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3、创建Action,书写代码并配置返回值(类继承ModelDriven(模型封装))
public class UserAction extends ActionSupport implements ModelDriven<User> {
/**
* @Fields serialVersionUID : TODO(描述这个变量表示什么)
*/
private static final long serialVersionUID = 5021720486258661556L;
/**
* 实例化对象
*/
private User user = new User();
@Override
public User getModel() {
return user;
}
/**
*
* @Title: login
* @Description: 登录的方法
* @return
* @return String
*/
public String login() {
// 调用用户表的dao包
IUserDao iud = new UserDaoImpl();
//可直接放入对象,不需要赋值
User u = iud.findByColumn(user);
if (u != null) {
return SUCCESS;
}
return ERROR;
}
}
4.1、配置struts2的配置文件(文件名必须为struts.xml)————(无法保证struts.xml是最新的,所以不建议把所有配置写到一个struts2的文件里):
<?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.i18n.encoding" value="UTF-8" />
<!-- 打开开发模式显示详细的错误信息 -->
<constant name="struts.devMode" value="true" />
<!-- 热加载struts。xml的配置文件 -->
<constant name="struts.configuration.xml.reload" value="true" />
<!-- 是否支持动态方法的调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<!--name包名,extends属性值必须为struts-default,namespace访问路径的文件包名,可不加,默
认为"/"-->
<package name="test" extends="struts-default" namespace="/test">
<!-- 开启动态方法的调用(匹配) -->
<global-allowed-methods>regex:.*</global-allowed-methods>
<!-- 动态执行方法 -->
<!-- <action name="user_*" class="com.zking.action.UserAction" method="{1}">
<result name="success" type="redirect">/index.jsp</result>
<result name="error" type="redirect">/login.jsp</result> </action> -->
<!-- 登录的方法 -->
<action name="user_login" class="com.zking.action.UserAction"
method="login">
<!--type:是否重定向,默认为转发-->
<result name="success" type="redirect">/index.jsp</result>
<result name="error" type="redirect">/login.jsp</result>
</action>
</package>
</struts>
4.2、配置struts2的配置文件(文件名必须为struts.xml)————(把配置文件分开写):
4.2.1、创建一个名为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>
<!-- 引用基础的xml文件 -->
<include file="struts-base.xml"></include>
<!-- 引用用户表的xml文件 -->
<include file="struts-smbmsUser.xml"></include>
</struts>
4.2.2、创建一个名为struts-base.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>
<!-- 设置默认的语言版本 -->
<constant name="struts.i18n.encoding" value="UTF-8" />
<!-- 打开开发模式显示详细的错误信息 -->
<constant name="struts.devMode" value="true" />
<!-- 热加载struts。xml的配置文件 -->
<constant name="struts.configuration.xml.reload" value="true" />
<!-- 是否支持动态方法的调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<!--name 包名(自定义),extends属性值必须为struts-default-->
<package name="base" extends="struts-default">
<!-- 开启动态方法的调用(匹配) -->
<global-allowed-methods>regex:.*</global-allowed-methods>
</package>
</struts>
4.2.3、创建一个名为struts-smbmsUser.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>
<!--name包名(自定义),extends属性值为基础文件的name值-->
<package name="user" extends="base">
<!-- 用户表登录的方法 -->
<action name="SmbmsUserAction_userLogin"
class="com.zking.struts2_project.action.SmbmsUserAction"
method="userLogin">
<!--跳转页面 type:是否重定向,默认为转发-->
<result name="success">/index.jsp</result>
<result name="error">/login.jsp</result>
</action>
</package>
</struts>
5、页面————使用s标签做到登录(要引入s标签库):
<!--action访问路径,为struts2配置文件的action标签的name属性值 theme是否需要样式-->
<s:form action="SmbmsUserAction_userLogin" method="post" theme="simple">
<!--name属性值必须跟实体类的属性一致,不然无法映射值-->
<s:textfield name="userName"></s:textfield><br/>
<s:password name="userPassword"></s:password><br/>
<s:submit value="登录"></s:submit>
<s:submit value="取消"></s:submit>
</s:form>