新建structs2 web应用及structs.xml常用基础配置

建立一个structs2 web应用程序

1. 创建一个基本的web应用程序

2. 添加structs2的jar文件到Class Path

将structs2的最小jar包拷到WEB-INF/lib目录,包括以下文件:

 1 asm-x.x.jar
 2 asm-commons-x.x.jar
 3 asm-tree-x.x.jar
 4 commons-fileupload-X.X.X.jar
 5 commons-io-X.X.X.jar
 6 commons-lang3-X.X.X.jar
 7 commons-fileupload-X.X.X.jar
 8 freemarker-X.X.X.jar
 9 javassist-X.X.X.jar
10 ognl-X.X.X.jar
11 struts2-core-X.X.X.X.jar
12 xwork-core-X.X.X.jar

3. 为structs2添加Servlet Filter

只有在WEB-INF/web.xml中添加了structs2的Servlet Filter和filter-mapping后stucts2才能运行。

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

4. 添加structs.xml

如果不显示指定,运行时structs.xml的默认位置为Source Folder on Build Path(源文件默认src目录)的编译输出位置(默认WEB-INF/lib/classes)。如果要更改structs.xml的位置,需要在web.xml中更改structs2 Servlet Filter的初始化属性。

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    <init-param>
        <param-name>config</param-name>
        <!-- 指定structs.xml位置为WEB-INF/classes/structs/structs.xml,也就是对应源文件位置src/structs/structs.xml -->
        <param-value>struts/struts.xml</param-value>
    </init-param>
</filter>

structs.xml常用基本配置

1. 常用的基本标签

  • <const name="....." value="..." />。 设置常量值
  • <include file="包含的其它structs配置文件.xml" />
  • <package name="package名称" extends="该package继承自" namespace="命名空间(请求地址action的父级)"></package>
  • <action name="action名(请求地址中action名)或者带通配符*" class="处理该请求的Action类的全限定名" method="处理该请求的Action类的中的方法名(如前前面有通配符,用{1}指代第1个通配符)"></action>
  • <global-results></global-results>。放在某个package里,里面存放全局的<result>,如果局部没有对应的<result>标签则查找全局<result>
  • <result name="Action类中方法处理的返回结果" type="">要转向的页面或action</result>。局部<result>标签可以作为<action>的子元素,也可以作为<global-results>的子元素
  • <interceptors></interceptors>。放在某个package里,里面存放所有的<interceptor>和<interceptor-stack>
  • <interceptor name="inteceptor名称" class="该inteceptor对应的类(继承MethodFilterInterceptor或AbstractInterceptor等)全限定名" />
  • <interceptor-stack name="拦截器栈的名称">。
  • <interceptor-ref name="被引用的interceptor名" />。存放一个interceptor的引用,如果该标签定义在<action></action>内,表示拦截指向该action的请求。继承自struct-default的package里的action都会调用名为defaultStack的interceptor,除非在<action>内定义有interceptor-ref,或者重新定义一个名为defaultStack的interceptor-stack,或者设置<default-interceptor-ref>。
    另外,<interceptor-ref>标签内可以设置参数:<param name="excludeMethods">不需要拦截的地址(可以用逗号隔开不同地址、带通配符*)</param>。
  • <default-interceptor-ref name="interceptor-stack名"/>。用来设置该package中的默认拦截器

2. Action类的实现

structs2中不要求Action类需要继承自哪些structs2的某些基类或实现structs2的某些接口,因此是低侵入性的。但一般为了设计的方便都会让它继承ActionSupport类并重载execute方法。structs2中Action的参数传递一般分为两种方式:属性驱动和模型驱动;Action中访问Servlet API是通过ActionContext实现的;一个Action通过不同方法处理多个请求时可以通过设置请求url="action!|方法名"或设置<action>标签的method属性实现。

2.1 Action参数传递方式

属性驱动:即是通过Action封闭请求的参数,Action中需要有传递的参数(以及返回结果)属性且都必须有getter和setter方法。如此一来,用户向Servlet发送的请求数据就需要是这种格式:name:....,pwd:....。而Action就要用name、pwd属性以及两者的getter和setter方法。

模型驱动:也就是通过javaBean实现参数的传递。需要有一个传递的参数的类,另外Action必须实现ModelDriven<传递参数的类型>。假设我们要向Action传递一个User类对象(包含name和pwd),那么用户发送请求时,参数的格式就是usr.name:....,usr.pwd:....;同时Action里有一个usr属性和usr的getter和setter方法。

2.3 ActionContext

ActionContext里存储了当前Action的上下文信息。每一个由于用户请求而创建的线程都对应一个有效的ActionContext对象。静态方法ActionContext.getContext()返回当前线程的ActionContext。常用的方法有get/set, getParameters, get/setSession等。另外可以用Action.getContextMap获取ActionContext中存储的Map数据。

2.4 一个Action处理多个请求

如果要实现动态方法调用,需要在structs.xml中设置常量struts.enable.DynamicMethodInvocation为true

第一种方式:structs.xml中action的配置如下,调用时只须直接userlogin即可。

<action name="userlogin" class="com.nics.action.LoginAction" method="doNotNeedInterceptor_userLogin">

第二种方式:structs.xml中的配置如下,调用时则需要userlogin!|loginFunction。其中loginFunction是LoginAction里的一个方法

<action name="userlogin" class="com.nics.action.LoginAction">
时间: 2024-08-18 00:18:04

新建structs2 web应用及structs.xml常用基础配置的相关文章

struts.xml常用元素配置和结果集配置

1.struts.xml的常用元素配置介绍 (1).<package/>元素:表示包整个概念,和代码中的package没有关系: 仅仅是从逻辑上将<action>,<interceptors/>等元素做模块管理. package的常见的属性: a>name:逻辑分包的名字,应用中有多个<package>元素,得保证name属性的唯一性. 因为该名字可以用来别别的<package>元素所继承. b>extends:比如A<pack

在Linux上设置web站点(二)——httpd2.2的基础配置

一.httpd2.2的组成: /etc/httpd:服务器的根目录 conf/httpd.conf,conf.d/*:配置文件 conf/magic:MIME的配置文件 logs:日志文件的存放路径,符号链接/var/log/httpd modules:动态模块文件的存放路径,符号链接/usr/lib64/httpd/modules run:httpd主进程pid的存放路径,符号链接/usr/run/httpd httpd的主配置文件:/etc/httpd/conf/httpd.conf 在此配

Maven pom.xml 常用打包配置

<build> <!-- 指定JAVA源文件目录 --> <sourceDirectory>src</sourceDirectory> <!-- 配置资源文件--> <resources> <resource> <directory>src</directory> <includes> <include>*/*.xml</include> <include&

maven新建Spring MVC + MyBatis + Oracle的Web项目中pom.xml文件

<project xmlns="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 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion&

用Eclipse新建一个web项目没有自动生成web.xml

我们首先打开Eclipse,如下:   我们可以看到在"WEB-INF"文件夹下没有web.xml文件.   这是是什么原因呢,我们来看看,我们首先来新建一个web工程,如下:   我们点击"文件",如下:   我们点击上图中标出的位置,如下:   我们再点击"下一步",而不是直接点"完成",如下:   我们再点击"下一步",如下:   问题的关键就在上图中标出的位置,我们勾选该选项即可.我们再点击&quo

web.xml常用标签整理(不定期更新)

1 <?xml version="1.0" encoding="UTF-8"?><!-- 标明使用的XML版本和文档编码,此项必须位于第一行,之前是空行注释都不行 --> 2 3 <!-- 4 web.xml学名为配置部署文件,是web应用的入口文件,用于声明系统的各项配置,此文件不是必须的,但也只是最简单的静态项目才没有. 5 xml文件中大小写敏感,书写次序敏感,自上而下加载,所以配置此文件时要注意标签的顺序和大小写. 6 --&g

初学者很实用:Web.xml常用元素

java web开发中最基本的配置本件:Web.xml,很多新手看不大懂,没关系,一起来看看常用的配置有哪些? 首先我们来看一个最精简的Struts2+Spring+hibernate集合框架的Web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee&quo

Structs2 structs.xml配置

<struts> <package name="action" namespace="/action" extends="struts-default"> <action name="LoginAction" class="action.LoginAction" method="execute"> <result name="teach

Maven入门1-在Eclipse中新建Maven Web项目

在eclipse中新建Maven Web项目 很多时候开发效率低下,大部分原因是IDE环境不熟悉.配置不会配置:因此在学习一项技能之前,有必要对基本的环境配置有所了解,正所谓磨刀不误砍柴工.这篇文章主要针对初次接触Maven,不熟悉配置的研究人员. 1.Maven配置及介绍 Maven官网:http://maven.apache.org/ 以前开发Java Web工程时,需要导入很多依赖包,但是随着工程逐渐变大,所管理的包越来越多,有必要使用工具来管理这些包,这样不需要我们手动导入:Maven就