Struts2框架简单入门
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依赖
<projectxmlns="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-appxmlns: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"%>
<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>Title</title></head><body><formaction="hello.action"method="post"><div><label>用户名:</label><inputtype="text"name="userName"/></div><div><inputtype="submit"value="提交"/></div></form></body></html>
show.jsp如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPEhtml><html><head><metacharset="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:
*/publicclassHelloActionimplementsAction{// 与前端页面input中的name保持一致,并提供get和set方法,可以接收参数privateString userName;publicStringgetUserName(){return userName;}publicvoidsetUserName(String userName){this.userName = userName;}@OverridepublicStringexecute()throwsException{System.out.println("前端传过来的名字:"+ userName);return"success";}}
3.5、编写核心配置文件struts.xml
struts.xml是struts2框架的核心配置文件,这个文件必须命名为struts.xml,配置如下:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPEstrutsPUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN""http://struts.apache.org/dtds/struts-2.5.dtd"><struts><packagename="default"extends="struts-default"namespace="/"><actionname="hello"class="com.ycz.struts01.action.HelloAction"><resultname="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文件
- 部署、运行项目
版权归原作者 我愿成为你头顶的云 所有, 如有侵权,请联系我们删除。