Struts2基础学习总结

AF3 ProteinDataset类的_patch方法解读 AlphaFold3 protein_dataset模块 ProteinDataset 类  _patch 方法的主要目的是围绕锚点残基(anchor residues)裁剪蛋白质数据,提取一个局部补丁(patch)作为模型输入。 阅读详情

全文结构

一、Struts2简介

参考《JavaEE 轻量级框架应用与开发—S2SH》

Struts框架是流行广泛的一个MVC开源实现,而Struts2是Struts框架的新一代产品,是将Struts1和WebWork两种技术进行兼容、合并的全新的MVC框架。Struts2框架充分发挥了Struts1和WebWork这两种技术的优势,抛弃原来Struts1的缺点,使得Web开发更加容易。

Struts1运行原理:

Struts1工作流程:
(1)客户端向Web应用发送请求,请求被核心控制器ActionServlet拦截;
(2)ActionServlet根据请求决定是调用业务逻辑控制器还是将请求转发给相应JSP页面;
(3)若调用业务逻辑控制器,则业务逻辑控制器再调用相应的模型来处理用户的请求;
(4)处理的结果再通过JSP呈现给用户

Struts1缺点:
(1)Struts1仅支持JSP作为表现层技术
(2)在Model2的基础上发展得来,完全基于Servlet API,与Servlet API严重耦合,一旦脱离Web服务器,Action的测试将变得非常困难
(3)Action类必须继承其提供的Action基类,实现处理方法时又必须使用Struts1的专有API,这种入侵式设计的最大弱点在于:一旦系统需要重构,这些Action类将没有价值。

Struts2结合Webwork的优势:
(1)Struts2支持更多表现层技术,有更好的适应性。
(2)Action无须跟Servlet API耦合,使得测试更加容易,同时提高代码重用性;而且不耦合任何Servlet API(拦截器机制)
(3)Struts2具有更好的模块化和可扩展性(插件机制)。

二、Struts2框架结构与工作原理

参考《JavaEE 轻量级框架应用与开发—S2SH》
博文推荐:struts2的核心与工作原理

Struts2是以WebWork为核心,采用拦截器机制对用户的请求进行处理

框架结构:

工作流程:
(1)客户端浏览器发送HTTP请求到Web应用
(2)Web容器将请求传递到标准ActionContextCleanUp过滤器以消除属性,而不让后续过滤器清楚,以延长Action中属性(包括自定义属性)的生命周期。ActionContextCleanUp作用
(3)再经过如stimesh等其他过滤器后,请求传递给StrutsPrepareAndExecuteFilter核心控制器
(4)StrutsPrepareAndExecuteFilter调用ActionMapper(Action映射器)确定调用哪个Action,再将控制权转移给ActionProxy代理
(5)ActionProxy代理调用配置管理器ConfigurationManager从配置文件struts.xml中读取配置信息,然后创建ActionInvocation对象
(6)ActionInvocation在调用拦截器链中的拦截器后再调用Action,根据Action返回的结果字符串查找对应的Result
(7)Result调用视图模板,再以相反的顺序执行拦截器链,返回HTTP响应
(8)HTTP响应以相反的顺序返回给核心控制器StrutsPrepareAndExecuteFilter以及其他web.xml中定义的过滤器,最终返回给客户端

三、一个Struts2的简易Demo

(1)导入Struts所需的Jar包,这里使用struts-2.3.31版本。下载地址
将struts-2.3.31\apps\struts2-blank.war解压出来,并在struts2-blank\WEB-INF\lib中获取运行struts2的最小包

特别注意版本对应问题,由于不同版本的框架封装的内容会有所不同,当跟着教程做的时候,如果步骤完全相同但是出现异常,那么很大可能是因为版本迭代修改了部分内容所致。

(2)在web.xml中配置核心控制器StrutsPrepareAndExecuteFilter
任何MVC框架需要与Web应用整合时都需要借助web.xml配置文件,由于StrutsPrepareAndExecuteFilter本质上是一个过滤器,在web.xml中用< filter>以及< filter-mapping>进行配置。而Web应用加载了StrutsPrepareAndExecuteFilter之后就有了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>Struts2Demo</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <!-- 配置StrutsPrepareAndExecuteFilter核心控制器 -->
  <filter>
      <!-- 过滤器名 -->
      <filter-name>struts2</filter-name>
      <!-- StrutsPrepareAndExecuteFilter核心控制器的实现类 -->
      <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>

配置核心控制器StrutsPrepareAndExecuteFilter就是用其实现类过滤所有的请求。Struts-2.5.8版本中的核心控制器实现类更改为org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter

(3)创建用户输入视图register.jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>用户注册</title>
  </head>
  <body>
    <form action="register.action" method="post">
        username:<input type="text" name="username"/><br/>
        password:<input type="password" name="password"/><br/>
        <input type="submit" value="注册"/><br/>
    </form>
  </body>
</html>

< form>标签中的action属性为表单参数提交到的地址

(4)创建业务Action

public class RegisterAction {
    private String username;
    private String password;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

    public String execute() throws Exception{
        if(username!=null&&username.length()>0&&password!=null&&password.length()>0){
            return "success";
        }else{
            return "fail";
        }
    }
}

如代码所示,RegisterAction是一个POJO,其属性应与input.jsp中的表单name属性对应。则当表单提交时,表单数据会通过setter()方法给Action对象赋值。
除此之外,Action类提供execute()方法返回结果字符串。

Struts2中的Action类优势:

  • Action类完全是一个POJO,从而提高代码的课重用率;
  • Action类无须与任何Servlet API耦合,便于测试和应用;
  • Action类的业务处理方法execute()将String作为返回值可以映射到任何视图上,也可以是Action

(5)在src下创建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>
    <!-- 指定Struts2处于开发阶段,可以进行调试 -->
    <constant name="struts.devMode" value="true"/>
    <!-- Struts2的Action都必须配置在package里。这里使用默认的package -->
    <package name="default" namespace="/" extends="struts-default">
        <action name="register" class="action.RegisterAction">
            <!-- 配置execute()方法返回值与视图资源之间的映射关系 -->
            <!--  
            <result name="success">/result.jsp</result>
            <result name="error">/error.jsp</result>
            -->
            <result name="success">/index.jsp</result>
        </action>
    </package>
</struts>

极客学院Struts2配置文件Wiki
MyEclipse环境中,在src下创建的struts.xml在部署时会自动发布到WEB-INF/classes目录下
当Struts2生成ActionProxy代理时,需要访问Struts2的配置文件,有struts.xml(配置Action相关信息)与struts.properties(配置Struts2全局属性)两种。
如上的struts.xml,用< constant>元素设置Struts2的全局属性,在< package>中定义了一个名为register的Action,并指定了实现类以及< result>元素用来指定execute()方法返回值与视图资源之间的映射关系。
而struts.properties则以key=value的形式存储全局属性。
如

#指定Web应用的默认编码集
struts.i18n.encoding=UTF-8
#当struts.xml修改后是否重新加载该文件,在开发阶段最好打开
struts.configuration.xml.reload=true
#设置浏览器是否缓存静态内容,在开发阶段最好关闭
struts.serve.static.browserCache=false

Struts2中的全局属性详解
注意:若使用MyEclispe开发,则struts.xml在第一行会报错,主要是因为MyEclipse没有找到对应的dtd文件,但这完全不会影响运行。强迫症可以把struts-2.3.31\src\core\src\main\resources目录下的dtd文件导入到MyElipse中,如何导入

Demo运行流程分析:
(1)用户在input.jsp中输入数据提交后,所发送请求被核心控制器StrutsPrepareAndExecuteFilter过滤
(2)StrutsPrepareAndExecuteFilter调用ActionMapper,根据表单中action地址来确定名为register的Action类处理该请求
(3)然后Struts2框架读取配置文件struts.xml信息生成ActionProxy
(4)ActionProxy根据package中action元素中的name和class属性确定Action实现类为RegisterAction,并调用
(5)表单中的数据被setter()方法赋值给RegisterAction对象
(6)ActionProxy根据execute()返回值以及action元素中的result元素来确定返回哪个视图资源给用户

四、Action业务处理

1、Action实现方式
Action是Struts2应用的核心,用于处理用户的请求。
而Struts2框架实现Action类有以下三种方式

  • 普通POJO类,通常包含返回值为字符串的无参execute()方法
  • 实现Action接口
  • 继承ActionSupport类

(1)POJO类
如demo所示,谨记Action中的属性名与表单中的元素属性名完全相同,且对于表单中的每个元素一定要有对应的getter/setter方法,这样Struts2才能够自动将请求参数赋值给对应的Action属性

(2)实现Action接口方式
Struts2提供了一个Action接口,定义了Action处理类应该实现的通用规范

/*
 * Action接口
 */
public interface Action {
    //定义Action接口中包含的一些结果字符串
    public static final String ERROR="error";
    public static final String INPUT="input";
    public static final String LOGIN="login";
    public static final String NONE="none";
    public static final String SUCCESS="success";

    //处理方法
    public String execute() throws Exception;
}
  • 定义了5个字符串常量,用于规范execute()方法的返回值
  • 定义了execute()方法,规范Action类应该包含execute()方法,且方法返回值是字符串

(3)继承ActionSupport类方式
Struts2框架为Action接口提供了一个实现类ActionSupport,该类提供了很多默认方法,如默认处理用户请求的方法、数据校验的方法、获取国际化信息的方法等
ActionSupport类是Struts2的默认Action处理类,如果配置Action类时没有指定class属性,系统自动默认使用ActionSupport类作为Action的处理类,对用户的请求进行处理。
API文档位置:struts-2.3.31/docs/xwork-apidocs/com/opensymphony/xwork2/ActionSupport.html

2、结合ServletAPI
有些时候Action类不访问ServletAPI是不能实现业务逻辑的,例如跟踪HTTP Session的状态。Struts2也提供了一些方法访问ServletAPI
(1)通过ActionContext
在Struts2框架中,Action可以通过ActionContext类来访问ServletAPI
API文档位置:struts-2.3.31/docs/xwork-apidocs/com/opensymphony/xwork2/ActionContext.html

(2)通过实现访问ServletAPI的接口并重写相应方法

接口名描述
ServletContextAware实现该接口的Action可以直接访问Web应用的ServletContext实例
ServletRequestAware实现该接口的Action可以直接访问用户请求的HttpServletRequest实例
ServletResponseAware实现该接口的Action可以直接访问服务器响应的HttpServletResponse实例

Struts2的特色是Action不再与任何ServletAPI耦合,所以不推荐这种方式直接访问Servlet API

(3)通过ServletActionContext工具类
API文档位置:struts-2.3.31/docs/struts2-core-apidocs/org/apache/struts2/ServletActionContext.html

五、Struts2配置详解

参考《JavaEE 轻量级框架应用与开发—S2SH》
配置文件降低了各组件之间的耦合,是联系整个Struts2框架的纽带,通过配置文件将Struts2的核心控制器StrutsPrepareAndExecuteFilter、业务控制器Action以及视图等组件关联在一起,实现相应的功能。虽然Struts2提供了Convention插件来管理Action、result,但大多数情况下配置文件采用XML形式。

1、全局属性的配置
可以通过配置全局属性来改变Struts2框架的一些默认行为,在Struts2中可以使用struts.xml、struts.properties以及web.xml进行配置
如果三个文件同时存在,则会按照struts.xml、struts.properties、web.xml的顺序加载常量,后面的会覆盖前面的,不过通常都在struts.xml中配置。
此外,struts.xml以及struts.properties应该保存在WEB-INF/classes目录下,MyEclipse环境下可以保存在src下
(1)通过< constant>元素在struts.xml中定义常量

<struts>
    <!-- struts.i18n.encoding的值默认为UTF-8 -->
    <constant name="struts.i18n.encoding" value="GBK">
</struts>

(2)在struts.properties中定义

struts.i18n.encoding=GBK

(3)通过元素在web.xml中配置

<filter>
    <init-param>
        <param-name>struts.i18n.encoding </param-name>
        <param-value> GBK</param-value>
    </init-param>
</filter>

2、通过包< package>对核心组件进行组织和管理
如demo代码所示,Struts2配置文件中的包,是由多个Action、多个拦截器、多个拦截器引用组成的集合

<struts>
    <!-- Struts2的Action都必须配置在package里。这里使用默认的package -->
    <package name="default" namespace="/" extends="struts-default">
        <action name="register" class="action.RegisterAction">
            <result name="success">/index.jsp</result>
        </action>
    </package>
</struts>

其中常用属性如下:
(1)name
指定包的名字,当存在多个包时作为唯一标识

(2)extends
指定包所继承的其他包。
struts-default是Struts2框架默认的抽象包,包含了大量结果类型的定义、拦截器及其引用定义等,是配置Action的基础,因此定义包时都要继承struts-default包。
定义时,父包要先于子包;Action相同,后面的覆盖前面

(3)namespace
指定包的命名空间,没有指定namespace值则为默认命名空间”/”
Struts2以命名空间的方式来管理Action,同一个命名空间不能有同名的Action
若namespace=”/”,则访问Action的URL为:http://ip:port/applicationname/register.action
若namespace=”/user”,则访问Action的URL为:http://ip:port/applicationname/user/register.action

配置命名空间后,Struts2按照以下顺序搜索Action:
- 指定命名空间,不存在则往下搜索
- 默认命名空间,不存在则往下搜索
- 报错

3、< include>元素包含其他配置文件
常用于团队模块化开发后的整合

<struts>
    <include file="struts-others.xml"/>
</struts>

< include>元素引用的xml文件必须是完整的Struts2配置文件,实际上在< include>元素引用文件时,会单独解析每个xml文件

4、< action>配置
Struts2使用package下的action元素来配置Action,配置时需要指定action元素的name和class属性
- name:指定该Action所处理请求的URL,如name=register,则处理的URL为register.action
- class:指定Action实现类,如果没有指定,则默认使用ActionSupport类

除此之外,action元素还可以使用method属性让Action调用指定方法而不是execute()方法来处理用户请求。
有时候,一个Action类中包含多个处理业务的方法,而不是execute()方法,如

public class UserAction {
    private String user;
    public String getUser() {
        return user;
    }
    public void setUser(String user) {
        this.user = user;
    }

    public String add() throws Exception{
        return "add";
    }
    public String del() throws Exception{
        return "del";
    }
}

若要调用add方法以及del方法,则要通过method属性

<action name="addUser" class="action.UserAction" method="add"></action>
<action name="delUser" class="action.UserAction" method="del"></action>

像这种情况,Struts2还支持 * 通配符以减少冗余。利用通配符在定义Action的name属性时使用模式字符串 * ,接下来就可以在class、method属性以及< result>子元素中使用{N}的形式代表前面的第N个 * 所匹配的字符串。
如上述代码可转化为下面的代码:

<action name="*User" class="action.UserAction" method="{1}"></action>

有了通配符以及{N},就可以通过设计name来大大简化代码的编写

5、result配置
Struts2框架通过配置文件中< action>的< result>子元素配置逻辑视图名和物理视图资源之间的映射关系。
配置< result>元素时通常需要指定name和type属性:
- name属性指定逻辑视图名,也就是execute()返回的结果字符串
- type属性指定结果类型,默认为dispatcher,表示请求转发到JSP页面。

(1)作用范围:局部result与全局result

  • 局部result——< result>元素作为< action>元素的子元素,针对该Action有效
<struts>
    <package name="default" namespace="/" extends="struts-default">
        <action name="register" class="action.RegisterAction">
            <result name="success">/index.jsp</result>
        </action>
    </package>
</struts>
  • 全局result——< result>元素作为< global-results>元素的子元素,针对所有Action有效
<struts>
    <package name="default" namespace="/" extends="struts-default">               
                    <global-results>
            <result name="success">/index.jsp</result>
        </global-results>
        <action name="register" class="action.RegisterAction"></action>
    </package>
</struts>

如果一个Action中包含了与全局result同名的局部result,则局部result会覆盖全局result。亦即Action会首先搜索局部result,没有匹配项再搜索全局result。

(2)结果类型
通过设置type属性值来确定返回的结果类型
Struts2学习之结果类型总结
Struts2返回JSON对象的方法总结

6、异常处理
Struts2框架提供了声明式异常处理方式,通过在struts.xml文件中配置< exception-mapping>元素,指定exception与result属性确定映射关系
- exception属性,用于指定Action出现异常所映射的异常类型
- result属性,用于指定Action抛出异常时,系统转入属性值对应的< action>或< global-results>中的< result>元素

根据作用范围的不同,又可分为
- 局部异常映射——< exception-mapping>作为< action>的子元素,针对该Action
- 全局异常映射——< exception-mapping>作为元素的子元素,针对所有Action
与result作用范围类似,先局部,再全局

六、过滤器与拦截器

1.过滤器Filter
过滤器Filter是Servlet中较为实用的一种技术,允许Servlet对用户请求进行预处理,并对Servlet响应进行后续处理.
在Struts2中,其核心控制器StrutsPrepareAndExecuteFilter就是一个过滤器,用来对用户请求进行预处理以及后处理
参考详谈Filter过滤器

2.拦截器Interceptor
和过滤器类似,拦截器用于在Action被调用之前对请求进行预处理,以及Action被调用后进行后续处理
参考Struts2拦截器
此外,众多默认拦截器的用法可参考拦截器详解

3.案例:Struts2权限验证功能的过滤器实现与拦截器实现
Struts2 角色权限

七、Struts2标签库与OGNL表达式

在JSP中,为了减少JSP中嵌入大量的Java代码,JSP规范制定了JSP标准标签库JSTL(JSP Standard Tag Library),提高了JSP页面的可读性和可维护性。
而Struts2也有自己独特的标签库,而且更为强大,不仅可以替代JSTL标签库,还适用于任何表示层技术(如Velocity、FreeMarker等)

解压Struts2提供的struts2-core-x.x.x.jar文件,可以在META-INF目录下找到struts2标签库描述文件struts-tags.tld
在JSP中使用标签库时,需要使用taglib指令引入标签库

<%@ taglib prefix="s" uri="/struts-tags" %>

其中prefix=”s” 指定了标签库的前缀,uri=”/struts-tags”指定了标签库描述文件的路径。
如果Sevlet规范版本是2.3及以下,还需要在web.xml中增加对标签库的定义

<taglib>
    <taglib-uri>/struts-tags</taglib-uri>
    <taglib-location>/WEB-INF/lib/**struts2-core-2.0.11.1.jar**</taglib-location>
</taglib>

然后就可以使用Struts2标签库的标签了。Struts2标签库整理
此外,Struts2的标签库都是使用OGNL表达式来访问ActionContext中的对象数据的。Struts2中的OGNL详解

八、尾声

至此,Struts的基础学习就结束了,关于该框架的使用还有很多很多地方没有去尝试,所谓实践出真知,多动手编写代码才能更好地理解这个框架。
同时,我们不能满足于会使用就好了,还要进一步地阅读源码,了解这个框架的设计思想以及封装的内容、这样才能更好地理解框架,根据自己的需要去修改框架甚至搭建出自己的一套框架。
本文如有错误欢迎指出,也希望能有大神指点一下本菜鸟的学习之路。

YOLOv11改进 | 损失函数篇 | YOLOv11引入引MPDIoU, GIoU,DIoU, CIoU, SIoU,EIoU, WIoU, LMPDIoU等损失函数 到此本文的正式分享内容就结束了,在这里给大家推荐我的YOLOv11改进有效涨点专栏,本专栏目前为新开的,后期我会根据各种前沿顶会进行论文复现,也会对一些老的改进机制进行补充,如果大家觉得本文帮助到你了,订阅本专栏,关注后续更多的更新~1. YOLOv11中添加MPDIoU, GIoU,DIoU, CIoU, SIoU等损失函数的方式。文件中用给出的代码替换掉。 阅读详情

相关推荐

SpotBugs使用

spotbugs命令行参数解析

javajingling的专栏 2946

Struts基础复习笔记

一.环境搭建 1.1 maven搭建,只需要引入一个核心包即可     org.apache.struts     struts2-core     2.3.16.1     commons-logging     commons-logging     1.1.3     log4j     log4j     1.2.17 下

Lincstyle的博客 277

HarmonyOS NEXT 开发者预览版Beta招募应知测试

本次HarmonyOS NEXT 开发者预览版 Beta 招募活动为开发者预览版尝鲜升级,主要供开发者进行应用调测使用,除部分系统应用外,其他所有应用将被清除,因此在进行HarmonyOS NEXT 开发者预览版升级前,需进行数据备份。通过应知测试,并提交了参加HarmonyOS NEXT 开发者预览版招募 Beta 活动的报名信息,就会立刻审核通过并且收到新版本。手机在参加HarmonyOS NEXT 开发者预览版 Beta 招募活动前,需要对应机型升级到招募要求对应的基线版本,并预留内存空间。

长久公子的博客 8648

关于Struts2中的execute方法

分两种情况。 1)如果你的Action类是继承自ActionSupport的话,确切的说是重写了execute方法,ActionSupport里的默认实现就是返回"success"视图。因此,你可以不实现execute方法,只要你的struts.xml里有"success"对应的result即可。 2)如果你的Action类没有继承ActionSupport,而你又没有在struts.

聆听你的心声 2115

美团外卖mtgsig 1.2逆向工程:从补环境到签名生成全解析

本文深入解析了美团外卖mtgsig 1.2签名算法的逆向工程全流程。从环境检测原理与补环境实战入手,详细拆解了签名JSON中每个关键字段的生成逻辑,并重点剖析了核心签名a2的生成步骤,涉及设备指纹、MD5、AES加密等关键技术。最后提供了构建签名生成器的实践思路与常见坑点,为理解复杂风控体系提供了完整的技术视角。

weixin_29324401的博客 1753

忘记安卓锁屏密码怎么办?3种方法教你用ADB恢复访问(含gesture.key解密)

本文详细解析了安卓设备锁屏密码的存储与加密机制,特别是gesture.key文件的解密原理。针对遗忘密码的常见问题,提供了三种核心恢复方法:利用ADB调试接口删除密码文件、对gesture.key进行离线分析与解密,以及应对高版本系统的替代方案。重点介绍了通过ADB工具在Recovery模式下操作的具体步骤,帮助用户在合法合规前提下恢复设备访问权限。

php55的博客 955

Spring(1)

1.Spring简介 spring是一个轻量级的JavaEE应用框架。 对比EJB(Enterprise Java Beans)技术是官方制定的重量级的JavaEE解决方案。 EJB问题: 开发调试麻烦 和ejb容器耦合,不利于后期的维护 Spring构建于众多优秀的设计模式之上,比如:工厂设计模式、代理设计模式、模板方法设计模式、策略设计模式…。 设计模式:前人总结的,用于解决特定问题的优秀的方案。 学习Spring,本质上就是在学这些设计模式解决了哪些问题? 2.工厂设计模式 工厂设计模式:使用工厂

qq_46411309的博客 223

AS7341光谱传感器实战:如何用STM32F103精准测量环境色温(附完整代码)

本文详细介绍了如何使用STM32F103驱动AS7341光谱传感器实现环境色温的精准测量。从硬件连接到驱动开发,再到色温计算算法的实现,提供了完整的代码示例和优化建议,帮助开发者在智能照明、农业监测等领域快速应用AS7341进行高精度色温检测。

weixin_30352645的博客 477

Java网课基础笔记(30)19-08-12

struts2执行流程 1. 执行的流程 编写的页面,点击超链接,请求提交到服务器端。 请求会先经过Struts2的核心过滤器(StrutsPrepareAndExecuteFilter) 过滤器的功能是完成了一部分代码功能 就是一系列的拦截器执行了,进行一些处理工作。 咱们可以在struts-default.xml配置文件中看到有很多的拦截器。可以通过断点的方式来演示。 ...

fenger_c的博客 298

PCL 八叉树的使用

八叉树(Octree)是一种空间划分的数据结构,广泛应用于三维点云的处理和分析。八叉树通过将空间递归地划分为八个子区域,可以有效地组织和索引三维点数据,提升点云的查询、降采样和配准等操作的效率。

纵马踏花向自由 1658

90. 将 SAP ABAP 内表内容本地导出成 Excel 文件

这里文件扩展名为 csv,全称是 Comma-Separated Values,意思是这种类型的文件内容,由逗号分隔。除了 ASC 之外,另一个可用的选项是 BIN,适用于 PDF,EXE 等二进制文件的导出。支持海量的输入和输出参数,我们这个简单的本地导出场景里,大部分参数都用不上。这个分隔符的添加逻辑,编写在上图红色高亮矩形框内,使用的语法是。本教程有学习者向我提问,询问如何将 ABAP 某某函数的某某输出参数的值,导出成本地 Excel 文件。把这个内表的内容,下载到本地,以本地文件的方式保存。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1742

web.xml 配置文件

web.xml 文件 web.xml是web项目的配置文件,一般的web工程都会用到web.xml来配置,方便大型开发。web.xml主要用来配置Filter,Listener,Servlet等。但是web.xml并不是必须的,一个web工程可以没有web.xml文件。 web.xml 的加载过程 web 容器的加载顺序: ServletContext -> context-para...

Noteligiable的博客 340

PHM2010刀具磨损预测完整实现

本文介绍了PHM2010刀具磨损预测项目的完整实现方案。项目采用PHM2010公开数据集,包含6个子数据集,记录了铣削加工过程中7个通道的传感器数据(切削力、振动和声发射信号)。技术路线包括数据预处理(截取中间10万点、小波降噪)、特征提取(时域9个、频域4个特征)、特征融合和皮尔逊相关系数筛选,最终使用BiLSTM模型进行训练和评估。环境配置基于Python 3.9,依赖NumPy、Pandas、PyTorch等库。数据加载和预处理阶段重点处理了传感器信号分段和磨损标签对齐问题,为后续建模奠定基础。

huanghm88的专栏 416

第20章 J2EE SSH基础学习-Struts2原理图示-SMS表现层升级-2

dai xu

下雨天@博客 283

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

JAVA中Struts2基础学习

Struts 2是在WebWork2基础发展而来的。 注意:struts 2和struts 1在代码风格上几乎不一样。 Struts 2 相比Struts 1的优点: 1、在软件设计上Struts 2 没有像Struts 1那样跟Servlet API 和 struts API 有着紧密的耦合。 Struts 2的应用可以不依赖于Servlet API和Struts API 。

Smile丶不忘初心 764

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

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

Struts2学习基础

Struts2简介:Strut2是java web开发中的经典MVC框架。理论上讲Strut2可以单独使用,就可以实现MVC的框架,但是在一般应用中一般和Spring和Hibernate一起使用,组成更完善的MVC框架。用Hibernate取代Structs中的JavaBean和EJB实现的M部分,而Spring是一个轻量级的IoC(控制反转)和AOP(面向切面)的容器框架,可以使Struts和Hi

waitblog 750

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

struts2基础学习总结

Struts2 是一个标准的MVC框架Struts2相比Struts1的优点:1、在软件设计上,没有像Struts1那样跟servlet API 和Struts API有着紧密的耦合,Struts2的应用,可以不依赖于servlet API 和Struts API 2、Struts2提供了拦截器 Interceptor ,利用拦截器可以进行AOP编程 3、Struts2提供了类型转换器 4、S

SoPiaZiJiang的博客 498

struts2 基础学习

Struts 2是在WebWork2基础发展而来的。 注意:struts 2和struts 1在代码风格上几乎不一样。 Struts 2 相比Struts 1的优点: 1、在软件设计上Struts 2 没有像Struts 1那样跟Servlet API 和 struts API 有着紧密的耦合。      Struts 2的应用可以不依赖于Servlet API和S

乐在克里特的博客 405

Java最全后端开发基础-Struts2框架学习-003—Struts2注解开发使用示例,阿里官方推荐

现在正是金三银四的春招高潮,前阵子小编一直在搭建自己的网站,并整理了全套的**【一线互联网大厂Java核心面试题库+解析】:包括Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等**本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取。

2401_84688317的博客 1029
上一篇: 浅谈数据结构与算法分析学习及如何进行算法分析
下一篇: 经典内部排序算法学习总结(算法思想、可视化、Java代码实现、改进、复杂度分析、稳定性分析)
LAVAGUE
博客等级 码龄10年 11粉丝 4原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值