Struts2核心

掌握Struts2框架:必备六个核心包详解 本文还有配套的精品资源,点击获取 简介:Struts2是一个基于MVC设计模式的Java Web应用框架。本文深入分析了构建Struts2应用程序所必需的六个核心包的详细作用和相关知识点。了解这些包及其内部组件是高效利用Struts2框架并掌握其高级特性的关键。 1. Struts2框架概述 Struts2框架的发展历史与特点 Struts2框架作为J... 阅读详情

MVC框架及Struts2介绍
Struts2核心
Struts2拦截器
Struts2值栈和OGNL表达式
Struts2标签库

1 xml文件模块化管理

  大部分应用中,随着应用规模的增加,系统中Action的数量也会大量增加,导致struts.xml配置文件变得很大。为了避免struts.xml文件过大,提高struts.xml文件的可读性,可以将一个struts.xml配置文件分解成多个配置文件,然后在struts.xml主文件中引入其他配置文件。配置文件的基本格式与struts.xml文件一样,写在resources文件(Source Folder文件)中。
  struts.xml中<include>引入其他配置文件:

<struts>
    <package name="default" namespace="/" extends="struts-default">
    ...
    </package>
    <!-- 引入struts-system.xml文件 -->
    <include file="struts-system.xml"></include>
</struts>

2 <package>标签

  在配置文件中,需要将<action>标签写在<package>中,<package>类似Java中的包,可以唯一确定一个包中的<action>,不同包中<action>可以同名,同包中不能同名。<package>的目的是为了进行模块化管理。

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

  name:包名,在整个应用中不能重复;
  namespace:包命名空间,访问该包中action时额外加的路径;
  extends:继承,继承其他包的配置文件,通常继承struts-default.xml中的;
  abstract:当前包是抽象的包(用来被继承的,struts-default.xml中为”true”)。

  访问action
  http ://ip:port/<appContextPath>/<packageNamespace>/<actionName>[.action]
  http ://ip:端口/<上下文路径>/<包的命名空间>/<action名称>[.后缀名]
  如果上下文路径path=”“,namespace=”/”,则不需要加/<上下文路径>/<包的命名空间>。

3 Action的查找流程

  简单查找流程

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

  访问的uri:http ://localhost/system/hello
  uri分为两部分:
  packageNamespace : /system
  actionName:hello
  查找Action时,首先通过packageNamespace在配置文件中查找对应的<package>标签,然后通过actionName在<package>标签中查找对应<action>。

  复杂查找流程

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

  访问uri:http ://localhost/path1/path2/hello
  先找<package>:
  先会通过/path1/path2找对应的<package namespace=”/path1/path2”…>包,如果没有这个包,就退一级找/path1对应的<package namespace=”/path1”…>包,如果没有这个包,就找到<package namespace=”/”…>根包。

  再找<action>:
  如果找到包,就在当前包下面找Action,如果没有找到Action,不会退级找,而是到默认包中查找Action,如果还没有就报错。namespace=”/”代表根包,namespace=”“代表默认包。

4 Struts配置文件

4.1 配置文件

Struts2框架加载配置顺序
  1.default.properties:该文件在struts2-core-2.3.20.jar/ org.apache.struts2中,配置中很多常量在其中;
  这里写图片描述
  2.struts-default.xml:该文件在struts2-core-2.3.20.jar中,可以查看配置方式;
  这里写图片描述
  3.struts-plugin.xml:该文件在struts2项目的lib包中,比如struts2-spring-plugin-2.3.20.jar,保存着一些插件;
  4.struts.xml:web应用默认的struts配置文件;
  5.struts.properties:struts的默认配置文件(一般配置不写在其中);
  6.web.xml:web应用的配置文件(一般配置不写在其中)。

  前三个文件是Struts2默认的配置文件,不能进行修改,如果多个文件配置了同一个常量,后一个配置文件会覆盖前一个配置文件的常量。

4.2 常量配置

  常量配置在default.properties文件中,可以通过struts.xml配置常用常量(也可以在web.xml和struts.properties配置,但是不推荐)。
  开发者模式
  修改配置不需要重启服务器

<constant name="struts.devMode" value="true"/>

  开发时使用,项目上线前需要关闭。

  设置系统编码

<constant name="struts.i18n.encoding" value="utf-8"></constant>

  设置后缀名

<constant name="struts.action.extension" value="action,do,,"></constant>

  后缀名之间用逗号分隔,一般留下一个空串,访问时使用actionName.action、actionName.do或actionName。

4.3 默认配置

  package继承了struts-default包,在struts-default.xml中配置了<action>和<result>标签的默认值。

<package name="default" namespace="/" extends="struts-default">
    <action name="index">
        <result>/index.jsp</result>
    </action>
</package>

  <action>
  class属性可以不写,但一般写上,默认的属性值为:
  <default-class-ref class=”com.opensymphony.xwork2.ActionSupport” />
  method属性可以不写,默认值为:execute

  <result>
  name属性可以不写,默认为:success
  type属性可以不写,默认为:dispatcher

5 Struts2获取ServletAPI

  Struts2可以在不使用ServletAPI的情况下获取参数,也可以通过结果视图进行页面跳转。但是在一些特殊情况中依然需要获取request、response对象,比如获取浏览器的信息,获取当前项目所在的实际路径等。

5.1 ActionContext/ServletActionContext
public class ApiAction {
    public String execute(){
        // 通过ActionContext获取作用域对象
        Map<String, Object> session = ActionContext.getContext().getSession();
        Map<String, Object> application = ActionContext.getContext().getApplication();
        // 通过ServletActionContext获取请求和响应对象
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpServletResponse response = ServletActionContext.getResponse();
        return "success";
    }
}

  通过ActionContext获取作用域对象Session时,获取的实际上是SessionMap,底层中封装了HttpSession对象,通过Map设置或获取值时实际上是往当前请求的Session中设置或获取值。这种方式更简单,类本身脱离了ServletAPI,通常使用这种方式。

5.2 ServletRequestAware/ServletResponseAware
public class ApiAction implements ServletRequestAware,ServletResponseAware {
    private HttpServletRequest request;
    private HttpServletResponse response;
    public String execute(){
        return "success";
    }
    // request
    @Override
    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }
    // response
    @Override
    public void setServletResponse(HttpServletResponse response) {
        this.response = response;
    }
}

  通过Action类实现ServletRequestAware、ServletResponseAware接口获取请求与响应对象,只要Action实现了Aware(可感知)接口,Struts2就能感知到,框架就可以调用接口对应的方法。

6 Struts2返回类型

6.1 视图返回类型

  在struts-default.xml配置文件中,Struts2定义了很多返回结果类型,并且为每个结果类型封装了一个类:
  这里写图片描述
  dispatcher:请求转发,默认类型
  redirect:重定向
  redirectAction:重定向到Action
  velocity、freemarker:在模版中使用

  结果视图的完整写法

<result name="success" type="dispatcher">
    <param name="location"> index.jsp</param>
</result>

  <result>标签中的属性:
  name:指定配置逻辑视图名(和Action方法返回值对应),默认值为success;
  type:指定结果类型,默认值为dispatcher。
  标签中的内容为视图路径地址。

  struts.xml中新增结果类型名称

<package name="default" namespace="/" extends="struts-default">
    <result-types>
        <result-type name="forward" class="org.apache.struts2.dispatcher.ServletDispatcherResult"/>
    </result-types>
</package>

  定义在<package>标签中,class为struts2为结果类型封装的类,替代dispatcher。

  redirectAction
  1.同包中跳转到Action

<package name="result" namespace="/result" extends="struts-default">
    <action name="result01" class="cn.wenwen.action._01RedirectAction">
        <result name="success" type="redirectAction">
            result02
        </result>
    </action>
    <action name="result02" class="cn.wenwen.action._02RedirectAction">
        <result name="success">
            /index.jsp
        </result>
    </action>
</package>

  ”result01”跳转到”result02”,跳转结果为Actionname,无需加”/”

  2.异包中跳转到Action

<package name="result" namespace="/result" extends="struts-default">
    <action name="result02" class="cn.wenwen.action._02RedirectAction">
        <result name="success">
            /index.jsp
        </result>
    </action>
</package>

<package name="res" namespace="/res" extends="struts-default">
    <action name="result01" class="cn.wenwen.action._01RedirectAction">
        <result name="success" type="redirectAction">
            <param name="namespace">/result</param>
            <param name="actionName">result02</param>
        </result>
    </action>
</package>

  ”result01”跳转到另一个包中的”result02”时,需要在<result>中设置参数,通过namespace找到另一个包,然后通过actionName找到包中的Action。

  3.使用redirect也可以跳转到其它Action

<package name="default" namespace="/" extends="struts-default">
    <action name="result01" class="cn.itsource._04_result.ResultAction01">
        <result name="success" type="redirect">
            /result/result02
        </result>
    </action>
</package>

<package name="result" namespace="/result" extends="struts-default">
    <action name="result02" class="cn.itsource._04_result.ResultAction02">
        <result name="success">
            /success.jsp
        </result>
    </action>
</package>

  结果视图内容为:/其它包namespace/其它action的name。

6.2 全局视图

  局部视图只能在当前的<action>中使用,如果一个包中多个需要使用同一个结果视图,就需要定义全局视图。

<package name="default" namespace="/" extends="struts-default">
    <global-results>
        <result name="login">
            /login.jsp
        </result>
    </global-results>
    ...
</package>

  将全局视图<global-results>配置在<package>中,包中的所有<action>都可以使用。如果局部视图中有一个结果视图与全局中的结果视图名称相同,会使用局部视图。
  如果写一个返回视图给几个包都使用,可以使用包之间的继承来实现。

7 Struts2实现Action的方式

7.1 普通Action类

  使用POJO(JavaBean)类,并提供public修饰的无参方法。

public class MethodAction {
    public String execute(){
        return null;
    }
}

  struts.xml配置

<package name="method" namespace="/method" extends="struts-default">
    <action name="methodAction" class="cn.wenwen.MethodAction " method="execute">
    </action>
</package>

  访问
  http ://localhost/method/methodAction

7.2 实现Action接口

  实现com.opensymphony.xwork2.Action接口,并覆写方法:

public class MethodAction implements Action {
    @Override
    public String execute() throws Exception {
        return NONE;
    }
}

  在Action中,封装了SUCCESS、ERROR、INPUT、LOGIN、NONE字段以及execute()方法。

7.3 继承ActionSupport类

  继承ActionSupport类,并覆写execute()方法。

public class MethodAction extends ActionSupport {
    @Override
    public String execute() throws Exception {
        return NONE;
    }
}

  ActionSupport实现了Action类,同时定义了表单域校验、错误信息设置和获得国际化信息等方法。

  最佳实践
  写一个BaseAction继承ActionSupport,可以继承ActionSupport的功能,也可以扩展一些公共的常量和方法。让其它的Action来继承BaseAction,这样就可以使用自定义的常量和方法。

8 Action多方法配置

  在一个Action中会有CRUD等多个方法,这时需要通过在struts.xml中配置,调用Action中不同的方法。

8.1 动态调用

  采用”/Actionname!方法名”调用,需要开启动态调用的配置。

<package name="dynamic" namespace="/dynamic" extends="struts-default">
    <!-- 开启动态调用 -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <action name="method" class="cn.wenwen.MethodAction " method="execute">
        ...
    </action>
</package>

  访问add()方法:http ://localhost/dynamic/method!add
  动态调用的安全性不高,通常不使用。

8.2 使用通配符*

  单通配符

<package name="default" namespace="/" extends="struts-default">
    <action name="method_*" class="cn.wenwen.MethodAction" method="{1}">
        ...
    </action>
</package>

  ”method_*”中星号表示一个通配符,根据传入的方法名在Action中匹配,{1}表示第一个通配符。访问add()方法:http ://localhost/method_add,如果访问的是execute()方法,可以不加_*直接用/method。

  多通配符

<package name="default" namespace="/" extends="struts-default">
    <action name="*_*" class="cn.wenwen.{1}Action" method="{2}">
        ...
    </action>
</package>

  {1}表示第一个通配符,替代部分类名,{2}表示第二个通配符,代表方法名。
  访问add()方法:http: //localhost/Method_add

9 接收参数方式

9.1 普通参数

  接收普通参数如name、password:

public class ParamAction extends ActionSupport {
    private String name;
    private String password;

    public String execute() {
        return NONE;
    }

    public void setName(String name) {
        this.name = name;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

  写一个Action类继承ActionSupport覆写方法,定义需要接收的参数,只需提供set()方法,框架会匹配属性设置值。这种方式如果参数过多就会变得复杂。

  struts.xml配置

<package name="default" namespace="/" extends="struts-default">
    <action name="params" class="cn.wenwen.ParamAction"></action>
</package>

  前台页面

<form action="/params" method="post">
    用户名:<input type="text" name="name" /> <br />
    密码:<input type="password" name="password" /> <br />
    <input type="submit" value="...提交..." />
</form>
9.2 接收对象

  如果参数过多,需要将数据封装为对象,比如User对象。

public class User {
    private Long id;
    private String name;
    private String password;
    // set、get方法
    ...
}

  方式一:Action中将User实例化

public class ParamAction extends ActionSupport {
    private User user = new User();

    public String execute() {
        return NONE;
    }

    // 框架获取User对象,然后调用User里面setter方法设置值
    public User getUser() {
        return user;
    }
}

  框架会通过getUser()获取User对象,然后调用User中的setter方法把值设置到对象属性中。

  方式二:提供set方法。

public class ParamAction extends ActionSupport {
    private User user;

    public String execute() {
        return NONE;
    }

    // 框架获取User对象,然后调用User里面setter方法设置值
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
}

  如果没有实例化User,无法直接获取User对象,框架会通过反射创建一个User对象,调用setUser()方法将对象设置进去,然后获取User对象并设置属性值。

9.3 实现ModelDriven接口

  实现ModelDriven(模型驱动)接口

public class ParamAction extends ActionSupport implements ModelDriven<User> {
    private Long id;
    private User user = new User();

    public String execute() {
        return NONE;
    }

    @Override
    public User getModel() {
        return user;
    }

    public void setId(Long id) {
        this.id = id;
    }
}

  实现ModelDriven接口后,框架在设置参数时就会先调用getModel()方法来获取对象,然后调用对象中的setter方法设置属性值。这种方法可以和普通参数方法结合使用,利用普通参数方法设置id。如果一个Action中只封装了一个对象,就可以用这种方式。

Struts2核心库与依赖项详解及配置指导 Struts2是一个用于开发基于MVC模式的Web应用的框架,以其灵活和可扩展性而闻名。随着企业级应用需求的增加,Struts2框架作为一种成熟的解决方案,被广泛应用于构建复杂的Web应用程序。通过采用Struts2框架,开发者可以将业务逻辑、数据访问和用户界面分离,实现清晰的代码结构和高效的项目协作。Freemarker是一个用于生成文本输出的Java库,通常用于生成HTML Web页面,也可以用来生成XML或其他格式的文件。它最显著的特点是支持MVC设计模式中的视图层。 阅读详情

相关推荐

Struts2框架核心Jar包清单与功能介绍

本文还有配套的精品资源,点击获取 简介:SSH(Spring、Struts2和Hibernate)是Java Web开发中常用的开源框架组合。本资源主要关注Struts2框架所需的基本jar包,这些包是构建企业级应用程序的核心。Struts2作为MVC框架,在应用中负责HTTP请求处理和业务逻辑管理。本文介绍了Struts2框架的核心jar包,包括struts2-core....

weixin_30336531的博客 981

【Struts2基础】——核心与工作原理

Struts2是Struts的下一代产品。实际上Struts1.x与Struts2并没有什么血缘关系,Struts2的体系结构与Struts1的体系结构差别巨大。Struts2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开。 Struts2是Struts社区和WebWork社区的共同成果,可以说Struts2是WebWork的升级版,它采用的是WebWork的核心。Struts2虽然面世晚,但并不能决定它是一款不成熟

梵高先生 1079

Struts2框架核心JAR包组件解析

在Web开发的世界里,框架作为提高开发效率和保障项目质量的重要工具,始终扮演着关键角色。Struts2作为其中之一,是在众多项目中广泛使用的成熟框架。本章节旨在为读者提供Struts2框架的基础知识概览,帮助理解其在Web开发中的地位和作用。在Struts2框架中,拦截器是可插拔的组件,可以根据需要进行自定义和扩展。自定义拦截器需要实现接口,或者继承类。以下是一个简单的自定义拦截器的实现示例:@Override// 在执行Action之前执行的逻辑// 调用下一个拦截器或Action。

weixin_34718952的博客 1169

Struts2核心技术 (一)

struts2struts2发展历史      经过很多年发展,Struts1已经成为了高度成熟的框架,但随着时间的发展,Struts1的局限性和缺点不断的暴露出来。      现在Struts已经分化成了两个框架      -第一个是在Struts1的基础上,融合了另一个web框架Webwork的Struts2.Struts2实质上是以Web

春水上行的博客 2万+

Struts2框架核心JAR包详解及应用

Struts2是Apache Software Foundation旗下一个用于开发Java EE Web应用的MVC框架。作为Struts的继承者,Struts2提供了更为灵活和强大的功能,它基于拦截器的处理机制,允许开发者将业务逻辑与表示层分离,从而提高了代码的可维护性和可扩展性。Struts2以其易于学习和使用的特性,广泛应用于企业级应用开发中。随着技术的不断进步,Web应用的开发框架也在持续演变。Struts2框架自推出以来,经历了多次版本迭代,不断融入新的技术元素,以适应快速变化的开发需求。

weixin_33308579的博客 863

Struts2框架必备核心jar包指南

拦截器是XWork中一个非常灵活的特性,它可以在Action执行前后执行一些特定的逻辑。开发者可以自定义拦截器,通过实现Interceptor接口或继承AbstractInterceptor类来创建自己的拦截器。// 在Action执行前的逻辑// 调用下一个拦截器或Action// 在Action执行后的逻辑。

weixin_42126677的博客 700

struts2的核心和工作原理

在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处? 设计目标     Struts设计的第一目标就是使MVC模式应用于web程序设计。在这儿MVC模式的好处就不在提了。 技术优势     Struts2有两方面的技术优势,一是所有的Struts2应用程序都是基于client/server HTTP交换协议,The Java Servlet

蒋倩兰——蕙质兰心 38万+

Struts2的核心概念

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。

struts2核心技术

Struts2两个重要组成部分 struts2核心就是核心控制器和业务控制器。 核心控制器StrutsPrepareAndExecuteFilter StrutsPrepareAndExecuteFilter作为一个filter运行在web应用中,负责拦截所有用户请求,该filter 会过滤用户请求,然 后将请求都交给struts2框架处理。 拦截器会默认拦截扩展名为.action的请求,...

scry_945的博客 437

BIDS数据存储格式介绍与dcm2bids安装与使用

BIDS格式&dcm2bids安装与使用

machinelearning_er的博客 7318

BIM Revit教程(六)尝试安装 Revit 时显示“Autodesk Revit 已安装。”

在安装Revit或RevitLT时,若系统提示“AutodeskRevit版本已安装”,通常是由于旧版本残留文件未完全清除所致。解决方案包括:1.通过控制面板或Windows设置卸载旧版本Revit,确保所有相关组件被移除;2.使用Autodesk卸载工具(AdskUninstallHelper)进一步清理;3.谨慎操作注册表,删除与Revit相关的残留项;4.确保系统有至少30GB的可用磁盘空间;5.完成上述步骤后,重新尝试安装Revit。此外,文章还提到了一个免费功能商店,供用户寻找提效工具,并鼓励粉丝

ZOZO_888的博客 2129

Struts的核心

Action, ActionForm, ActionForward 三个对象构成了Struts 的核心。 1、ActionServlet       概念:ActionServlet类是Struts框架的内置核心控制器组件,它继承了javax. servlet.http.HttpServlet类,Struts的启动一般从加载ActionServlet开始,因此它在MVC模型中扮演中央控制器的角

胡图图的鼻涕 947

零中频架构实战:用Matlab模拟AD9361收发信号(附完整代码)

本文详细介绍了如何使用Matlab模拟AD9361射频收发器的零中频架构,解决镜像干扰等关键挑战。通过完整的代码示例和系统级建模方法,帮助工程师掌握RFIC设计中的自适应校准算法和性能优化技巧,特别适用于SDR系统开发。

weixin_30733003的博客 542

struts2的核心

struts2

xingyundemoxiaoguai的博客 525

pip——【Fatal error in launcher: Unable to create process】的深度排查与修复指南

本文深度解析了Python包管理工具pip报错【Fatal error in launcher: Unable to create process】的根本原因与解决方案。该错误通常由Python解释器路径变更、虚拟环境损坏或多版本冲突导致。文章提供了从快速排查到彻底修复的完整指南,包括使用`python -m pip`命令绕过启动器、修复或重装pip、重建虚拟环境等核心方法,并给出了预防此错误的最佳实践。

weixin_29306261的博客 598

J204B接口数据链路的建立

介绍J204B数据链路层的建立方式

QUACK_G的博客 6550

Struts2核心源代码

qq_41607054的博客 213

MCAL中MCU的配置

MCAL配置中MCU配置,PLL计算配置,系统时钟以及各模块参数配置

dhyw12399999的博客 3795

Struts2核心接口、类

Struts2核心接口和类 ActionMapper:根据请求的URL查找是否存在对应Action调用; ActionMapping:保存调用Action的映射信息,如namespace、name等; ActionProxy:在Xwork和真正的Action之间充当代理; ActionInvocation:表示Action的执行状态,保存拦截器、Action实例; Inteceptor:在请求处理之

北京Java青年 2028

手把手教你学Simulink实例:基于Simulink的锂电池管理系统(BMS)仿真

是确保锂电池安全、高效运行的关键组件。BMS 主要功能包括监控电池的状态(如电压、电流、温度)、估算荷电状态(State of Charge, SOC)、健康状态(State of Health, SOH),以及实现电池均衡和保护机制等。Simulink 提供了一个强大的仿真环境,可以用来设计、分析和验证锂电池管理系统的控制策略。常见的均衡方法包括被动均衡(通过电阻放电)和主动均衡(通过开关电容或变压器)。通过本教程,我们详细介绍了如何使用 Simulink 进行锂电池管理系统的仿真实例。

MHD0815的博客 539

泛微系统流程表单获取节点操作者

泛微系统流程表单获取节点操作者 select typename 流程类型, workflowname 流程名称, nodename 节点名称, (case when nodetype=0 then '创建' when nodetype=1 then '审批' when nodetype=2 then '提交' when nodetype=3 then '归档' else '' end) as 节点类型, groupname 节点操作组, (case when type=1 then '部门+安

烧硬盘 4616

struts2核心组件图示

ghostlvs的专栏 358

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Struts2的核心组件

本篇主要讲Struts2的核心组件,核心组件如下: 1、前端控制器  2、OGNL/ VS:OGNL/ ValueStack  3、Action:动作 4、Result:结果  5、Interceptor:拦截器  6、Tags:标签库 一、Struts2 的工作流程 1、所有请求提交给 前端控制器。 2、根据配置信息确定要调用的 Action。 3、创建一个 ValueS

hangshao的博客 3108

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

struts2核心过滤器

struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /* 在web.xml中进行配置。

李春丽的博客 1805

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

详谈Struts2的核心概念

<br />详谈 Struts2 的核心概念<br /><br /> 本文将深入探讨Struts2 的核心概念,首先介绍的是Struts2 的体系结构和几个重要的配置文件,并会举例说明Struts2 的核心对象如何配置。然后介绍Struts2 最重要的3 个组成部分Action 、Result 、Interceptor (拦截器)的原理和使用方法。<br /><br /> 1  术语概述<br /><br /> •          Action 在Struts2 中是负责Web 应用程序中具体逻辑实

☆笑→莫问☆ 2197

Struts2之核心概念

声明:并非原创 主要介绍三个组成部分Action、Result、Interceptor的原理和使用方法 1 Struts体系结构   工作机制:   2 Struts配置文件 web.xml struts.xml 等   3 Struts 常用配置解析 3.1>使用标签重用配置文件 默认是struts.xml,但如果package、action、interceptors等

bruce_sky的专栏 748
上一篇: MVC框架及Struts2介绍
下一篇: Struts2拦截器
Winston_D
博客等级 码龄10年 4粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值