Struts2框架入门学习

目录标题

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 下载
Struts2框架入门学习

下载解压后,出现以下界面,struts-2.3.37的目录结构:
Struts2框架入门学习

由于struts的jar包并不全部需要,找到apps目录下struts2-blank.war

Struts2框架入门学习
解压struts2-blank.war,将示例程序lib目录下的jar包添加到我们项目中即可,此版本的Struts2项目必需的13个jar包。
Struts2框架入门学习

第二步:创建项目导入jar包

创建项目,将上面的13个jar包粘贴到lib中,然后build path,会在Web App Libraries中看到
Struts2框架入门学习

第三步:配置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找到
Struts2框架入门学习

<!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框架入门学习
跳转成功
Struts2框架入门学习

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响应内容

Struts2框架入门学习

上一篇:buuctf [struts2]s2-053


下一篇:Struts2系列漏洞(不定期更新)