Struts2是一种基于MVC模式的轻量级web框架,自问世以来,就受到了广大Web开发者的关注,并广泛应用于各种企业系统的开发中。
本系列将针对Struts2的简介、特点、安装、执行流程等内容进行讲解。
简介
概念
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。
在介绍Struts2之前,先来认识一下Struts1。Struts1是最早的基于MVC模式的轻量级web框架,他能够合理的划分代码结构,并包含了验证框架、国际化框架等多种实用工具框架。但随着技术的进步,Struts1的局限性也越来越多的暴露出来。为了符合更加灵活、高效的开发需求,Struts2框架应用而生。
Struts2是Struts1的下一代产品,是在Struts1和WebWork技术基础上进行合并后的全新框架。虽然Struts1和Struts2名字类似,但其设计思想却有很大不同。实质上,Struts2是以WebWork为核心,采用拦截器机制来处理用户的请求。这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以从另一方面可以理解为Struts2是WebWork的更新产品。
优势
- 项目开源,使用及拓展方便
- 提供Exception处理机制
- Result方式的页面导航,方便进行重定向和页面跳转
- 通过简单、集中的配置来调度业务类,轻松进行配置和修改
- 提供简单统一的表达式语言来访问所有可供访问的数据
- 提供了标准 强大的验证框架和国际化框架
- 提供了强大的标签,有效减少页面代码
- 对Ajax提供了支持
- 拥有简单的插件,只需要放入相应的JAR包,轻松扩展Struts2框架,比如自定义拦截器、自定义结果类型以及自定义标签等
- 拥有智能的默认配置
常见web框架
- Struts2
- Struts1
- SpringMVC
- WebWork
Web层框架都是基于前端控制器模式实现开发的。
前端控制器模式
在传统开发方式中,一次请求就会对应一个Servlet,这样就会造成很多Servlet存在。
而在Struts2中,所有的请求都会经过一个前端控制器,在前端控制器中实现框架的部分功能,剩下的具体操作交给具体的Action中。
如果所有的请求都要经过前端控制器,那么这个控制器该怎么实现呢?其实,过滤器就是最好的一个实现方式,因为所有的请求都可以被过滤器拦截,然后再过滤器中实现部分功能。Struts2的前端控制器也是基于过滤器实现的。
Struts2开发包下载与介绍
下载安装包
- all:包含官方提供的Struts2示例,以及docs文档,lib库,源码等。
- apps:官方提供的Struts2示例程序。为war文件,可通过zip工具解压缩
- min-lib:最小集成lib包
- lib:Struts2所有依赖库
- docs:官方提供的Struts2文档,包含快速入门、文档以及api文档等
- src:Struts2的源代码
Struts2中jar简介
将上面下载的apps中struts2-blank.war(此项目为一个空工程,包含基本的开发包),解压缩,并进入WEB-INF目录下。
上面就是struts2的基本开发包了,那这些包各代表什么呢?请看下图:
从上图中可以看出,当前版本的Struts2项目依赖13个基础jar,不同的Struts2版本所依赖的基础jar可能也不完全相同,不过基本变化不大。
需要注意一点,通常是由Struts2的web项目并不需要用到Struts2的全部jar,因此没有必要一次将Struts2的lib目标下所有jar都添加到项目中,根据需要来就好了。
使用IntelliJ IDEA创建第一个Struts2项目
新建项目
打开InrelliJ IDEA,选择新建项目,如下,选择Struts2
WebApplication,并把Libraries设置为Set up library later
,如下:
下一步,输入项目名及项目目录,点击finish
进入项目目录后,在web/WEB-INF
下新建lib
文件夹,同时将在上一节整理的struts2开发包拷入lib文件,之后,右键lib
目录,选择Add as library
选项,将开发包配置好。如下:
配置web.xml核心过滤器
打开web/WEB-INF
中的web.xml
,配置filter
,这个就是之前提到过的前端控制器。如下:
<?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_3_1.xsd"
version="3.1">
<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>
</web-app>
编写Action
在项目目录src
下新建包com.happy.demo
,新建HelloAction.java
,代码如下:
public class HelloAction {
public String sayHi() {
System.out.println("hello world");
return "success";
}
}
配置struts.xml
打开项目目录下的struts.xml
,将刚编写的HelloAction
进行配置,如下:
<struts>
<package name="hello" namespace="/hello" extends="struts-default">
<action name="sayHi" class="com.happ.demo.HelloAction" method="sayHi">
<result name="success">sayHi.jsp</result>
</action>
</package>
</struts>
暂时先无视这些字段代表的含义,后续会详细讲解配置文件。
新建sayHi.jsp
在上面xml配置中,通过result
标签配置了当success
时跳转的页面sayHi.jsp
,下面我们就来新建这个页面。
又因为在上面配置的namespace=hello
,页面跳转时寻找规则为web/namespace/xxx.jsp
,所以,在web
目录下,新建hello
文件夹,并新建sayHi.jsp
文件。详细如下:
sayHi.jsp
内容如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>SayHi</h1>
</body>
</html>
配置全局Tomcat
Tomcat下载
点我去下载-
打开
Edit Configurations
,如下:
-
在弹窗中,选择
Defaults
,找到Tomcat Server
中Local
,如下:
-
配置介绍
点击Configure
,在弹出的框中配置本机Tomcat地址,如下:
选择OK即可。 -
进入项目
Project Structure
,进行配置,如下:
点击右上角Fix
,选择add lib to artifacts
:
配置项目Tomcat
-
为工程配置Tomcat,步骤如下:
-
命名及根据需要修改自定义配置,如端口号等
-
配置
Deployment
点击下方
apply
、ok
完成配置
启动并访问项目
-
启动项目
访问项目
通过浏览器访问http://localhost:8080/hello/sayHi
,可控制台会打印HelloAction
中的hello world
,同时页面会跳转到struts.xml
中配置的sayHi.jsp
页面,页面显示之前写的SayHi
文字。
好了,到此,第一个Struts2项目跑起来了,下一篇会对Struts2的执行流程、各种配置以及Action的创建访问配置方式进行讲解。