目录标题
Struts2简介
Struts2是一种基于MVC模式的轻量级Web框架,Struts2是Struts1的下一代产品,是在Struts1和WebWork技术的基础上进行合并后的全新框架
struts2框架其实是对javaWeb表现层的MVC作了优化
Struts2的优点
1、项目开源,使用及拓展方便,天生优势。
2、提供Exception处理机制。
3、Result方式的页面导航,通过Result标签实现页面跳转。4
4、通过简单、集中的配置来调度业务类,方便修改。
5、提供简单、统一的表达式语言来访问所有可供访问的数据。
6、提供标准、强大的验证框架和国际化框架。
7、提供强大的、可以有效减少页面代码的标签。
8、提供良好的Ajax支持。
9、拥有简单的插件,可以扩展Struts2框架。
10、拥有智能的默认设置,不需要另外进行繁琐的设置。
Struts2入门案例
第一步:下载jar包
下载地址:https://struts.apache.org/
选择struts-2.3.37-all.zip 下载
下载解压后,出现以下界面,struts-2.3.37的目录结构:
由于struts的jar包并不全部需要,找到apps目录下struts2-blank.war
解压struts2-blank.war,将示例程序lib目录下的jar包添加到我们项目中即可,此版本的Struts2项目必需的13个jar包。
第二步:创建项目导入jar包
创建项目,将上面的13个jar包粘贴到lib中,然后build path,会在Web App Libraries中看到
第三步:配置web.xml
编辑web应用的web.xml配置文件,配置struts2的核心拦截器。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>FirstStruts2</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!--配置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>
</web-app>
第四步:创建Action类
有三种方法
方法一: 只需要类中有一个固定的方法,不需要实现或者继承任何接口或者父类
代码如下:
package cn.itcast.action;
public class HelloWorldAction {
public String execute (){
return "success";
}
}
方法二:实现指定的一个接口:com.opensymphony.xwork2.Action
这个接口中只有一个抽象方法 public abstract String execute()throws Exception;
同时还有5个String类型的静态属性:ERROR SUCCESS INPUT NONE LOGIN
public static final String SUCCESS = "success";
public static final String NONE = "none";
public static final String ERROR = "error";
public static final String INPUT = "input";
public static final String LOGIN = “login”;
代码如下:
package cn.itcast.action;
import com.opensymphony.xwork2.Action;
public class HelloWorldAction implements Action{
public String execute ()throws Exception{
return SUCCESS;
}
}
方法三: 继承一个指定的父类:com.opensymphony.xwork2.ActionSupport
ActionSupport类本身实现 了Action接口,是Struts2中默认的Action接口的实现类,所以继承ActionSupport就相当于实现了Acton接口。
代码如下:
package cn.itcast.action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorldAction extends ActionSupport{
public String execute ()throws Exception{
return SUCCESS;
}
}
第五步:创建struts.xml文件
引入dtd约束,该代码可以在WebContent\WEB-INF\lib\struts2-core-2.3.37.jar找到
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
设置启动开发模式,编辑配置文件不再需要重新发布
<constant name="struts.devMode" value="true"></constant>
配置action
<package name="hello" namespace="/" extends="struts-default">
<!-- 配置Action -->
<action name="helloWorld" class="cn.itcast.action.HelloWorldAction">
<!-- 配置result结果页面跳转 -->
<result name="success">/success.jsp</result>
</action>
</package>
完整代码:
<?xml version="1.0" encoding="UTF-8" ?>
<!-- 指定Struts2配置文件的D2T信息 -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!--启动开发模式,编辑配置文件,不用再重新发布 -->
<constant name="struts.devMode" value="true"></constant>
<!-- Struts2的Action必须放在指定的包空间下定义 -->
<package name="hello" namespace="/" extends="struts-default">
<action name="helloWorld" class="cn.itcast.action.HelloWorldAction">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
第六步:创建jsp文件
index.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>Struts2入门案例</title>
</head>
<body>
<h1>Struts2入门案例</h1>
<a href="${pageContext.request.contextPath }/helloWorld.action">Click me!</a>
</body>
</html>
success.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>Struts2跳转页面</title>
</head>
<body>
<h1>Struts2跳转页面成功</h1>
</body>
</html>
第七步:部署项目
发布项目,点击超链接
跳转成功
Struts2处理流程
(1)用户在客户端发出HTTP请求
(2)然后请求被核心过滤器StrutsPrepareAndExecuteFilter拦截
(3)核心过滤器将请求转发到Action映射器,Action映射器负责识别当前的请求是否需要交由Struts2处理。
(4)Action映射器返回需要struts2处理的信息,StrutsPrepareAndExecuteFilter会创建一个Action代理
(5)Action代理并不知道执行哪一个Action,它会向配置管理器询问调用哪一个Action,配置管理器会从struts.xml读取我们配置的Action信息。
(6)Action代理创建相关请求的Action对象,调用相关的方法之前,struts2的一系列拦截器会帮我们做一些操作,例如获取请求参数等。
(7)然后调用execute方法根据返回的字符串去匹配相应的页面,
(8)页面可以获取一些页面模板,然后生成最终页面,再倒序的执行拦截器的后续操作
(9)最后生成HTTP响应内容