Struts2框架简单入门
Struts2框架简单入门
- 1、前言
- 2、Struts2简介
- 2.1、Struts2介绍
- 2.2、Struts2优缺点
- 2.2.1、优点
- 2.2.2、缺点
- 2.2.3、Struts2获取
- 3、入门案例
- 3.1、pom依赖
- 3.2、web.xml配置
- 3.3、准备页面
- 3.4、编写Action控制器
- 3.5、编写核心配置文件struts.xml
- 3.6、部署测试
- 3.6、注意点
- 3.7、小结
1、前言
因为最近接手了一个老项目,项目使用的是SSH框架,也就是Spring + Struts2 + Hibernate的技术框架,现在主流基本上用的都是SSM(Spring + SpringMVC + Mybatis)的了,只有像一些政府的老项目还是SSH框架,所以遇到了,然后还不会,就只有一个方法:主动学习。于是在b站找了一个视频跟着学,也做了一些简单的笔记,趁着有时间,将笔记整理一下记录到博客,方便以后随时翻阅补充。
2、Struts2简介
2.1、Struts2介绍
Struts2是一个MVC框架,以WebWork框架的设计思想为核心,吸收了Struts1的部分优点,设计出来的新一代的MVC框架。
Struts2是流行和成熟的基于MVC设计模式的Web应用程序框架。Struts2不止是Struts1的下一个版本,它是一个完全重写的Struts架构。
WebWork框架开始以Struts框架为基础,其目标是提供一个加强和改进框架Struts来使web开发的开发人员更加容易。
关于MVC:
M(Model)—> 模型(JavaBean类)
V(View)—> 视图(JSP,HTML)
C(Controller)—> 控制器(Servlet)
2.2、Struts2优缺点
2.2.1、优点
- 实现MVC模式,结构清晰,使开发者只关注业务逻辑的实现。
- 有丰富的tag可以用,Struts的标签库(taglib),如能灵活运用,可大大提高开发效率。
- 页面导航使系统的脉络更加清晰,通过一个配置文件,可以把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处,尤其是当另一批开发者接手整个项目时,这种优势体现的更加明显。
- 提供Exception处理机制。
- 数据库连接池管理。
- 支持I18N国际化。
2.2.2、缺点
- 有线程安全问题。
2.2.3、Struts2获取
官网地址:https://struts.apache.org/download.cgi。
3、入门案例
新建一个maven工程,包含webapp目录,如下结构:
3.1、pom依赖
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ycz</groupId>
<artifactId>struts01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<!-- struts2核心依赖 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.22</version>
</dependency>
</dependencies>
</project>
只加了一个struts2的核心依赖。由于里面有依赖关系,最终加载进来的jar包如下:
各个jar包的说明:
- struts2-core-2.5.22.jar:struts2框架的核心类库。
- freemarker-2.3.28.jar:struts2的标签模板使用类库。
- ognl-3.1.26.jar:struts2使用的一种表达式语言类库
- javassist-3.20.0-GA.jar:对字节码进行处理的类库。
- log4j-api-2.12.1.jar:log4j日志相关类库。
- commons-fileupload-1.4.jar:文件上传需要的类库。
- commons-io-2.6.jar:Java lo的扩展类库。
- commons-lang3-3.8.1.jar:包含了一些数据类型的工具类。
引入struts2-core核心依赖后,最终会加进来8个jar包,如上所示。
3.2、web.xml配置
web.xml中需要配置struts2的核心过滤器:
<?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>struts01</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- struts02核心过滤器配置 -->
<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>
3.3、准备页面
webapp下新建index.jsp和show.jsp页面,页面内容如下。
index.jsp内容:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="hello.action" method="post">
<div>
<label>用户名:</label>
<input type="text" name="userName" />
</div>
<div>
<input type="submit" value="提交" />
</div>
</form>
</body>
</html>
show.jsp如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
姓名:${userName}
</body>
</html>
3.4、编写Action控制器
action控制器是struts2的核心。新建一个HelloAction类,实现Action接口,内容如下:
/**
* @ClassName: HelloAction
* @Description:TODO(描述这个类的作用)
* @author: yanchengzhi
* @date: 2022年12月22日 上午10:33:30
* @Copyright:
*/
public class HelloAction implements Action {
// 与前端页面input中的name保持一致,并提供get和set方法,可以接收参数
private String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Override
public String execute() throws Exception {
System.out.println("前端传过来的名字:" + userName);
return "success";
}
}
3.5、编写核心配置文件struts.xml
struts.xml是struts2框架的核心配置文件,这个文件必须命名为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="default" extends="struts-default" namespace="/">
<action name="hello" class="com.ycz.struts01.action.HelloAction">
<result name="success">/show.jsp</result>
</action>
</package>
</struts>
一些标签和属性说明:
- package标签:该标签配置控制器的包结构。name属性自定义,必须保证唯一,用于区分package。extends属性表示继承某个package,其中struts-default是struts2框架的核心,一般继承这个。namespace属性表示命名空间,默认为根目录。
- action标签:配置访问请求。name属性配置访问路径,比如页面表单中action配置的为hello.action,那么这里的name值应为hello(不包含action后缀)。class属性表明访问该路径需要执行的action控制器。
- result标签:配置返回的页面。name属性的值可自定义,但是必须与控制器中execute()方法的返回逻辑字符串保持一致,然后里面配置页面路径。
3.6、部署测试
启动Tomcat容器,访问http://localhost:8081/struts01/。
输入任意内容,点击提交:
可以看到提交成功后,跳转到了show.jsp页面,并且上面的url发生了改变,说明请求是经过了action控制器的,再看控制台:
输出没问题,结果正确。
3.6、注意点
在JSP页面中输出结果的方式有两种,如下:
- 使用EL表达式,如:${userName}。
- 使用struts2标签。如:
<s:property value="userName" />
上面show.jsp页面中的${userName}可以替换:
使用标签之前需要先引入标签库,这点类似于jstl标签。
3.7、小结
使用Struts2开发的基本步骤如下:
- 配置pom加载Struts2核心类库
- 配置web.xml文件
- 开发视图层页面
- 开发控制层Action
- 配置struts.xml文件
- 部署、运行项目