struts2开发基础

     2022-03-18     548

关键词:

Struts2开发基础

struts2采用拦截器的机制来处理用户的请求,使得业务逻辑控制器能够与ServletAPI完全脱离开。

 

1. Hello World!

配置web.xml

技术分享
   
<?xml version="1.0" encoding="UTF-8"?>

<web-app id="WebApp_9" 

version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 

http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

 

    <display-name>Struts Demo</display-name>

 

    <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>

 

    <welcome-file-list>

        <welcome-file>index.html</welcome-file>

    </welcome-file-list>

 

</web-app>

 
技术分享

 

配置struts.xml

 

技术分享
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

"http://struts.apache.org/dtds/struts-2.3.dtd">

 

<struts>

 

<package name="default" namespace="/" extends="struts-default">

 

        <action name="HelloWorld" class="example.HelloWorld">

            <result name = "success" >/WEB-INF/jsp/example/HelloWorld.jsp</result>

        </action>

 

    </package>

</struts>
技术分享

 

 

 

Hello.java

 

技术分享
import com.opensymphony.xwork2.ActionSupport;

 

public class Hello extends ActionSupport {

    public final static String  MESSAGE = "Hello World!";

 

    private String msg;

 

    public String getMessage() {

        return msg;

    }

 

    public void setMessage(String msg) {

        this.msg = msg;

    }

 

    public String execute() throws Exception {

        setMessage(MESSAGE);

        return SUCCESS;

    }

}
技术分享

 将struts2应用部署到Tomcat

  1. 编译.java文件
  2. 在Tomcat/webapps/appname文件夹下建立WEB-INF文件夹
  3. 将struts2必须的包放入到站点/WEB-INF/lib下,
  4. 将编译好的相应class文件按照包的结构放在/WEB-INF/classes/相应的包目录下。
  5. 将struts.xml放入/WEB-INF/classes/文件夹下
  6. 启动Tomcat,在浏览器中访问localhost:protal/appname/HelloWorld或者localhost:protal/appname。(建议指定Action)

struts2原理

当Web容器收到请求(HttpServletRequest)时,它将请求传递给一个标准的过滤链。接下来调用FilterDispatcher核心控制器,然后它调用ActionMapper确定请求哪个Action。ActionMapper返回一个收集Action详细信息的ActionMaping对象。

接下来FilterDispatcher将控制权委派给ActionProxy,ActionProxy调用配置管理器(ConfigurationManager) 从配置文件中读取配置信息(struts.xml),然后通过反射创建ActionInvocation对象。ActionInvocation在调用Action之前会依次的调用所用配置拦截器(Interceptor ).

  一旦执行结果返回结果字符串,ActionInvocation负责查找结果字符串对应的(Result)然后执行这个Result。Result会调用一些模版(JSP)来呈现页面,之后拦截器(Interceptor)会被反向执行,处理响应(response)。

 

简单地说,Strusts2起到一个过滤器控制器的作用,这点从web.xml中可以看出来。

 

2.  Struts2 配置设置

配置Action是struts2配置的核心内容。

(1) 包和命名空间

 struts2使用包来组织Action,在xml配置文件中使用<package>标签来组织一个包,Action使用<action>子元素来完成。

 

<package name="default" namespace="/" extends="struts-default">

 <package>标签必须指定name属性,它是访问的唯一标识,extends属性指定继承的父包,子包可以在父包中集成Action,拦截器,拦截器栈等配置。还有可选的abstract属性,abstract="true"表示该包不能进行Action配置。

 

struts2的命名空间机制用来避免命名冲突,同一命名空间下不允许Action等重名,不同命名空间下允许重名。<package>标签的namespace属性用于指定命名空间,不允许对单独的Action指定空间。

如果<package>没有指定namespace属性则属于默认命名空间。设置<package namespace = "/">指定为根命名空间。如果请求为/space/*.actionweb容器会先在space命名空间中寻找Action,如果未找到则在默认命名空间中寻找Action,若仍未找到则会出现错误。如果请求为/*.action则在根命名空间中寻找Action,这也说明了根命名空间和默认命名空间的区别。

(2) 配置Action

 

技术分享
   <action name="HelloWorld" class="example.HelloWorld">

         <result name = "success" >

                 /WEB-INF/jsp/example/HelloWorld.jsp

         </result>

 </action>     
技术分享

 

 

Action必须指定URL,struts2的Action所处理URL即为namspace/actioname.action,或省略.action后缀。

Action作为逻辑控制器并不直接生成响应,而是返回一个代表处理结果的字符串,<result>子标签将返回的结果与物理视图对应。

(3) 配置常量

  struts2框架采用下列顺序加载struts2常量:

1. struts-default.xml struts2-core.jar

2.struts2-plugin.xml 

3.struts.xml

4.struts.properties

5.web.xml

后面加载的常量会覆盖前面的常量。

 

为了模块化的配置,struts.xml可以使用include标签包含其它xml配置文件:

<include file="example.xml"/>

 

(4) 配置结果

1. result配置

struts2在struts.xml中使用<result>元素配置处理结果。处理结果依照作用域可以分为全局结果和局部结果,默认作为局部结果。

 

技术分享
技术分享
<action name="HelloWorld" class="example.HelloWorld">

         <result name = "success" >

                    /WEB-INF/jsp/example/HelloWorld.jsp

         </result>

 </action> 
技术分享
技术分享

 

<result>元素要配置的属性包括:

(1)name:对应Action返回的结果字符串,若缺省则默认为"SUCCESS"

(2)type: 指定result的类型

(3)location: 指定实际视图资源,若缺省则使用<result></>之间的字符串作为视图资源。

(4)parse: 是否允许在<result>中使用OGNL表达式,默认为"true"。

2. result类型

<result-type>可以在xml中自定义,struts-default.xml中定义了常用的result-type。

(1)dispatcher:

dispatcher是用于指定jsp视图的结果类型,若缺省type则默认为此类型。

(2)plainText:

plainText用于以纯文本方式返回视图的源代码。plainText结果类型可指定如下参数:

loacation:指定实际视图资源

charSet:   指定字符集

(3)redirect

dispatcher使用请求转发的方式返回视图资源,redirect使用重定向的方式返回视图资源。redirect类型会调用HttpServlet.sendRedirect方法来重定向,此方法将会重新建立一个request,原请求中的数据将会全部丢失。

redirect方式允许配置loaction和parse两个属性。

(4)redirectAction

redirectAction类型与redirect类似,同样是生成一个新的请求。区别在于,redirectAction使用ActionMapperFactory的ActionMapper来将请求重定向到另一个Action。

redirect需要指定namespace和actionName来指定目标Action的namespace和Actionname。

3. 全局结果

<result>用来配置局部结果,只对它所属的action有效。<globla-result>标签用于配置全局结果,对于所有Ation都有效。

 

<global-results>

            <result name="error">/WEB-INF/jsp/error.jsp</result>

 </global-results>

 

     

    在匹配结果时优先匹配局部结果,当局部结果不匹配时才会匹配全局结果。

3. 开发Action

(1) 实现Action

struts2 不要求Action类实现任何接口或继承任何类,但为了标准化编程,struts2提供了Action接口定义了规范化的Action类,并为其提供了一个ActionSupport实现类( com.opensymphony.xwork2.ActionSupport;),通常我们继承ActionSupport类并重写public String execute(void)方法。ActionSupport定义了数据校验,获取国际化信息的方法,在struts.xml的Action配置中若省略class属性则会使用ActionSupport作为实现类。

execute方法返回一个代表处理结果的字符串,并根据xml中的配置将其映射为物理视图。strust2定义了5个标准字符串:"SUCCESS","ERROR","LOGIN","INPUT","NONE";实际上仍可使用自定义的字符串作为处理结果。

 

 

(2) 访问Servlet API

 

1. 使用ActionContext

struts2的Action不再与Servlet API耦合,但提供了访问Servlet API的方法。struts2提供了ActionContect类,并通过该类访问Servlet API。

 

(1) ActionContext ctx = ActionContext.getContext(); 

getContext()方法可以获得ActionContext实例。

(2) Map session = ctx.getSession(); 

获得session实例。

(3) Map sctx = ctx.getApplication(); 

获得ServletContext实例

(4) void setSession(Map session); 

设置session。

(5) void setApplication(Map application) 

设置Application。

(6) Map getParameters() 

等价于HttpServletRequest.getParameterMap()方法,得到请求的参数。

(7) Object get(Object key) 

等价于HttpServletRequest.getAttribute(String key)方法。

 

2. 使用ServletActionContext

ServletActionContext提供静态方法获取相应对象。

(1)获得PageContext对象。

 static PageContext getPageContext() 

(2)获得HttpServletRequest对象。

 static HttpServletRequest getRequest() 

(3)获得HttpServletReponse对象。

 static HttpServletReponse getReponse() 

(4)获得ServletContext对象。

  static ServletContext getServletContext() 

3. 实现Aware系列接口

(1)ServletResponseAware

实现该接口该接口的类可以直接访问HttpServletResponse对象,但必须实现setServletResponse()接口。

 

技术分享
class MyAction 

implements Action, ServletResponseAware 

{

  private HttpServletResponse response;

  public void setServletResponse (HttpServletResponse response) {

    this.response = response;

    }

} 
技术分享

 

(2)ServletRequestAware

与ServletResponseAware类似,实现该接口的类可以访问HttpServletRequest对象,只要实现方法:

 public void setServletRequest(HttpServletRequest request) 

(3) ServletContextAware

与ServletResponseAware类似,实现该接口的类可以访问HttpServletContext对象,只要实现方法:

 public void setServletContext(HttpServletContext request) 

 

struts2基础篇

一、Struts2简介Struts2以WebWork优秀的设计思想为核心,吸收了Struts1的部分优点,建立了一个基于WebWork和Struts1的MVC框架。二、搭建Struts2开发环境2.1、通过官网下载最新版:http://struts.apache.org/download.cgi建议下载struts-xx.all.zip包,压... 查看详情

struts2概述开发环境搭建

一、概述  Struts2是在WebWork2基础发展而来的。和struts1一样同属于MVC框架。注意:struts2和struts1在代码风格上几乎不一样。 Struts2相比Struts1的优点:1、在软件设计上Struts2没有像Struts1那样跟ServletAPI和strutsAPI有着紧密的耦合。... 查看详情

struts2基础——需要注意的几点

...们减少运用MVC设计模型来开发web应用的时间。目录:一、struts2的工作原理及文件结构二、三种访问ServletAPI的方式三、struts接收参数的三种方式四、自定义拦截器一、struts2的工作原理及文件结构注:FilterDispatcher被替成StrutsPrepareA... 查看详情

struts2学习笔记

Struts2简介Struts2是Struts的下一代产品,是在WebWork的技术基础上开发了全新MVC框架。虽然Struts2号称是一个全新的框架,但这仅仅是相对Struts1而言。Struts2与Struts1相比,确实有很多革命性的改进。Struts2的优点:结构清晰,开发流程... 查看详情

struts2入门

---恢复内容开始---一丶Struts2基础学习总结  Struts2是在WebWork2的基础开发而来,它相比于Struts1的优点在于以下几点:    1.Strust2没有像Struts1那样跟ServletAPI耦合度很高。    2.Struts2提供了拦截器,利用拦截器可以进行AO... 查看详情

struts2基础使用教程:ognl

取自《JAVAWEB整合开发王者归来》是一种类似EL的语言,比EL强大的多能访问对象的方法,例如list.size()能访问静态属性与静态方法,方法是在类名前、方法前加上@。如@[email protected],@[email protected](‘foo%s‘,‘bar‘)支持赋... 查看详情

基础篇-三大框架之一(struts2框架的搭建)

Struts2是一种基于MVC的轻量级的WEB应用框架。 1.web应用框架,也就是说struts2的运行环境是一个web容器,运行于Web容器中的程序就必须遵循基本开发标准和规范:servlet标准和JSP标准(不同的Web服务器对于servlet标准和JSP的标准是... 查看详情

struts2+springmvc+hibernate开发。个人纪录

对于很多新手来说,都不太清楚应该怎么去放置代码并让他成为一种习惯。个人的总结如下:一、基础包类的功能1、dao:提供底层接口2、daoimpl:实现底层接口类,与底层交互3、entity:实体,继承基层实体,提供构造方法4、enti... 查看详情

struts2基础

Struts2不是Struts的升级版,而是Struts技术与webWork技术的结合,都收两者的优势。Struts2的配置在myeclipse或者eclipse中需要添加相应的架包,IDEA只需要导入相应的配置信息,两者中都需要在web.xml配置Struts2的过滤器web.xml配置<!--Struts... 查看详情

struts2基础demo1

我们都知道struts2是基于webframework出现的优秀的mvc框架,他和struts1完全没有联系。struts2是一个框架,啥叫框架呢?是一个优秀的半成品。web的框架在java中有webframework struts2 springmvc。。。。 struts2和struts1区别1、没有任... 查看详情

struts2基础知识

struts2 操作 action servlet,是通过在web.xml中配置一个filter实现的 12345678910111213<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.F 查看详情

和struts2框架的初体验

Struts2的基础知识问题一:什么是框架框架是一个基本概念上的结构用于解决复杂的问题,应用在特定的领域内。使用框架可以使代码的复用大大提高,开发效率和质量也得到提高;他提供统一的标准,使后期维护的时间大大降低。归... 查看详情

struts2基础

helloworld实例jsp页面:<%@pagecontentType="text/html;charset=UTF-8"%><%@taglibprefix="s"uri="/struts-tags"%><html><head></head><body> <h1>Struts2HelloWorldExample& 查看详情

struts2的执行流程

Struts2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。核心控制器FilterDispatcher是Struts2框架的基础,包含了框架内部的控制流程和处理机制。业务控制器Action和业务逻辑... 查看详情

基础篇-struts2的搭建

...ruts然后去到下载页面点击Download然后选择下载struts版本,struts2.5.2是最新版本  struts2.3.2   选择 查看详情

struts2开发者模式

在Struts2开发中,这应该是第一个学习配置的值。为了启用Struts 2的开发模式,可以通过自动配置显著增加Struts2的开发速度和属性文件加载,以及额外的日志和调试功能。 注:自动重新加载功能真的是一个方便的功能。每... 查看详情

自学java_struts2框架

一.Struts2基础   1.Struts2是有Apache在Struts1和Webwork的基础上研发出的新一代MVC框架。   2.Struts2开发环境的搭建:    打开https://struts.apache.org/download.html页面下载Struts2的版本,我使用是:s 查看详情

struts2是什么?struts2的优势有哪些?

Struts2是Apache软件组织推出的一个基于MVC模式的轻量级Web框架,自问世以来,就受到了广大Web开发者的欢迎。目前,Struts2在JavaWeb开发领域中已占据了十分重要的地位。今天小千来详解介绍下Struts2是什么?Struts2的... 查看详情