struts2知识总结

Android14_MTK调试LCD屏功能 android14 MTK平台调试LCD屏 阅读详情

好吧.总结一下自己的struts2的笔记.

Struts2: struts 和WebWork的技术基础上进行合并产生的

1.      web.xml配置:
基本配置:<filter><filter-mapping><welcome-file-list><listener>
struts2.0和struts2.0的<filter-class>是不同的

2.     struts.xml配置:
   常量配置:

<constant name=”struts.devMode” value=”true”>
<constant name=”struts.i18n.encoding” value=”GBK”/>
<constant name=”struts.ognl.allowStaticMethodAccess” value=”true”/>

<constant name=”struts.ui.theme” value =”simple”/>

可以使用通配符*和{}占位符进行相应的配置
例子:

<action name=”Student*” class=”temp.StudentAction” method=”{1}”>
   <result>/Student{1}_success.jsp</result>
</action>

可以使用<include file=”login.xml”>进行xml文件的包含
定义定义默认action

<default-action-ref name=”index”></default-action-ref>

<action>

  <result>/default.jsp</result>

</action>

 

 

 

 

 

Result类型:

dispatcher:用于页面转发,页面跳转过程一直是同一个线程,Action中的数据一直保存在。这个是默认的;

redirect:可用于返回一个页面、一个action、链接到一个网址。
缺点:redirect把一个http返回码(SUCCESS)以及返回的页面位置一起重新发给web服务器,容纳后由web服务器产生一个新的HTTP请求,就会产生一个新的线程,保存在原来Action执行的线程中的数据就无法访问。
所以,result需要包含Action的数据,那么redirect不是一个可行的办法。因为新的HTTP请求时在Servlet容器的新的线程中处理的,ActionContext中的所有状态都不会存在。

chain:功能与redirect的action转发类似,不过与redirectaction转发功能不同的是它可以将Action中的数据一直保存在同一个HTTP请求中。

 

 

3.    Struts的源代码: src/core/src/main/java

                        文档: docs/struts2-core/apidocs

  配置xml命名空间: struts-core.jar解压里面有个struts-2.0dtd文件

4.     struts大概执行过程:client->tomcat->web.xml->filter->action->视图

5    .页面显示相关:
使用struts2的标签库: <%@taglib prefix="s" uri="/struts-tags" %>
路径问题:struts2中的路径是根据action路径而不是jsp路径来的.所以解决方法就是统一使用绝对路径
<%basePath=getServletContext.getRealPath()%>
加上<base href=”<%=basePath%>”>
struts标签:
<s:set name=”” value”” scope>在action中传参数,可以用var从先定义参数的name,scope默认是action范围就是actionContext和request两个范围.而且很好用name关键字,一般用直接用var关键字

注意点:
<s:param name=”name” value=”’billy’”></s:param>这样’billy’就是一个字符串
<s:set>还可以设置list map等集合类型
$#%的区别

a)$用于i18n和struts配置文件

b)#去的ActionContext的值

c)%将原本的文本属性解析为ognl,对于本来是ognl的属性不起作用

iterator遍历:

<s:iterator value=”{1,2,3}”>

  <s:property/>

</s:iterator>

iterator遍历+自定义变量

<s:iterator value=”{‘aaaa’,’bbb’,’ccc’}”  var=”x”>

   <s:property value=”#x.toUpperCase()”/>

</s:iterator>

使用status:

<s:iterator value=”{‘aaaa’,’bbb’,’ccc’}”  stats=”x”>

  遍历过的元素总数 <s:property value=”#x.index()”/>|

  遍历过的元素索引<s:property value=”#x.even()”/>|

  当前是偶数?<s:property value=”#x.odd()”/>|

  是第一个元素吗?<s:property value=”#x.first()”/>|

  是最后一个元素吗?<s:property value=”#x.last()”/>|

</s:iterator>

遍历map

<s:iterator value=”#{1:’a’,2:’b’,3:’c’}”>

  <s:property value=”key”/>|<s:property value=”value”/><br/>

</s:iterator>

遍历map+变量

<s:iterator value=”#{1:’a’,2:’b’,3:’c’}” var=”x”>

  <s:property value=”#x.key”/>|<s:property value=”#x.value”/><br/>

</s:iterator>

 

 

 

 

date:<s:property value=”d”><br/>

<s:date name=”d” format=”yyyy/MM/dd HH:mm:ss/>struts自带的日期格式化

浏览器中list传值:?interestsmath*interests=english

浏览器中map传值:?users[‘a’]=usera& users[‘b’]=userb

然后在页面中取值

<s:property value=”interests”/><br/>

<s:property value=”users”/>

5.      动态方法调用:在浏览器中”感叹号+方法名”

6.      在1.5里面实现的实现interface不能写@override(一个bug)

7.      关于action:
Action属性的不同将它分为两类:Field-Driven(属性驱动) Action和Model-Driven(模型驱动) Action
action中属性设置:
第一种方式:直接在action中写属性,用?name=”a”&age=”1”的方式传入
第二种方式:建一个类抽象出属性.用?user.name=a&user.age=1传入
第三种方式:action实现ModelDriven<User>这个接口,传值同方式一
     在action中要一个private User user = new User()对象;
     还要覆写getModel()方法

8.      addFiledError(name,value)添加错误信息到value statck,虽然好用但是格式难控制.一般就自己写css或者重写它自己的css类.或者自定义自己的模板.
用<s:property value=”errors.name[0]”>可以取出添加的错误信息
用<s:debug></s:debug>可以查看value statck信息

在action中取得request,session,application对象有四种方式

①:
定义属性:

private Map request

private Map session

private Map application


在构造方法中使用

request=(Map)ActionContext.getContext().get(“request”);

session=ActionContext.getContext().getSession();

application=ActionContext.getContext().getApplication();

②implements RequestAware, SessionAware,ApplicationAware(常用)

定义属性:

private Map<String,Object >request;

private Map<String,Object >session;

private Map<String,Object >application;

加入setter和getter

覆写方法

setRequest();setSession();setApplication();

③定义属性

private HttpServletRequest request;

private HttpSession session;

private ServletContext application;

构造方法初始化

request=ServletActionContext.getRequest();

session=request.getSession();

application=session.getServletContext()

④implements ServletRequestAware

定义属性

private HttpServletRequest request;

private HttpSession session;

private ServletContext application;

覆写方法:

@override

public void setServletRequest(HttpServletRequest request){

this.request=request;

this.session=request.getSession();

this.application=session.getServletContext();

}


ServletRequestAware这个接口中的方法是setServletRequest(HttpServletRequest request) 可以获得这次请求的request对象

RequestAware这个接口中的方法是setRequest(Map request) 它只能够获得这次请求中包含request对象中全部attributes的一个map对象

public class UserAction extends ActionSupport implements SessionAware, ServletRequestAware, ServletResponseAware {

    private HttpServletRequest request;

    private HttpServletResponse response;

    public void setServletRequest(HttpServletRequest request) {

        this.request = request;

    }

    public void setServletResponse(HttpServletResponse response) {

        this.response = response;

    }

    public String execute() {

        HttpSession session = request.getSession();

        return SUCCESS;

    }

}

 培训的时候写的一个代码

public class VsServlet3 implements ServletRequestAware, ServletResponseAware {

    private HttpServletRequest request;

    private HttpServletResponse response;

    private ServletContext application;

    private HttpSession session;

    // 方式一:ActionContext

    public String scope() {

       ActionContext.getContext().put("request", "request");

       ActionContext.getContext().getSession().put("session", "session");

        ActionContext.getContext().getApplication().put("application","application");

       return "success";

    }

    // 方式二:ServletActionContext

    public String scope2() {

       ServletActionContext.getServletContext().setAttribute("applicaiton",

              "application");

       ServletActionContext.getRequest().setAttribute("request", "request");

       ServletActionContext.getRequest().getSession().setAttribute("session",

              "session");

       return "success";

    }

    // 方式三.倚靠继承的接口,继承这个接口struts框架会在指定动作之前将对象的Servlet对象注入进来

    @Override

    public void setServletRequest(HttpServletRequest request) {

       this.request = request;

       this.session=request.getSession();

       this.application=session.getServletContext();

    }

    @Override

    public void setServletResponse(HttpServletResponse response) {

       this.response = response;

    }

}

 

9.      ongl表达式:略

10.上传下载

下载:action中

public class DownloadAction extends ActionSupport {

    private InputStream is;

    public InputStream getIs(){

       return is;

    }

    public String execute(){

       //下载文件

       //得到文件的真实路径

       String realPath = ServletActionContext.getServletContext().getRealPath("/images/3.jpg");

       try {

           is = new FileInputStream(new File(realPath));

       } catch (FileNotFoundException e) {

           e.printStackTrace();

       }

       return SUCCESS;

    }

}

struts.xml

    <action name="download" class="xxxxx.xxx.xxx">

           <result type="stream">

           <param name="inputName">is</param>

           <param name="contentDisposition">attachment;filename=1.jpg</param>

           <param name="bufferSize">1024</param>

           <param name="contentType">application/octet-stream</param>

           </result>

       </action>

上传:action

private File image;// 文件

    private String imageFileName;// 文件名

    private String imageContentType;// 文件类型

public String execute() {

       ActionContext.getContext().put("message","上传成功");

       // 保存路径

       String realSavePath = ServletActionContext.getServletContext()

              .getRealPath("/images");

       // 实例化文件

       File file = new File(realSavePath,imageFileName);

       if (!file.exists()) {

           file.mkdirs();

       }

       try {

           FileUtils.copyFile(image, file);

       } catch (IOException e) {

           e.printStackTrace();

       }

       return "success";

    }

 

 

11.  sturts设计约定(编码规定)

a)      原则:简单就是美

b)      库名:项目名

c)      表:_Modle名

d)      字段:保持和属性名一直,要避免同关键字相同

e)      用层划分包
                      action层
                      model(bean)层
                      dto(vo)层

12.  开发大致过程

a)      建立界面原型

b)      建立struts.xml

                    i. 确定namespace

                   ii. 确定package

                  iii. 确定action名称

                  iv. 确定result

                   v. 修改界面原型

                  vi. 测试

c)      建立数据库(或者实体类)

d)      建立Model层

e)      建立Service层

WPS接入DeepSeek,实现AI辅助功能 总的来说,借助 WPS 中宏功能与 DeepSeek 大模型的结合,文档处理、内容创作和数据分析等任务都能更加智能化、自动化。这不仅大幅提升了工作效率,也为办公场景带来了全新的智能化办公体验。 阅读详情

相关推荐

C++利用spdlog生成日志

C++利用spdlog生成日志下载编译spdlog配置并使用 环境:Win10-x64+VS2015 spdlog是一个快速的C++日志库,能够兼容C++11,具备快速、无需依赖第三方库、支持多线程、多平台的优良特性! 下载编译spdlog 1.第一步,下载spdlog 下载spdlog,下载地址:https://github.com/gabime/spdlog#header-only-version,从Github上下载zip压缩包。下载完成后会获取一个名为spdlog-1.x.zip的压缩包 2.第二步

weixin_42975610的博客 3223

struts2 <allowed-methods > 标签配置

1.在struts2 2.5版本中添加了对方法访问的权限,如果没有被添加到<allow-method> 方法的标签,将会报一下错误 5:05:18.078 [http-apr-8020-exec-8] ERROR org.apache.struts2.dispatcher.Dispatcher - Could not find action or result: /core/...

weixin_30730053的博客 835

集成库仑计移动电源设计:从原理到实战,实现精准电量管理

在电池供电设备中,精准的电量计量是提升用户体验和产品可靠性的核心技术。传统基于电压估算的方法因受温度、负载和老化影响误差较大,而库仑计技术通过直接测量充放电电流并对时间积分,实现了电荷量的直接计量,从根本上提升了精度。这项技术的核心价值在于为设备提供了真实、可靠的电量状态数据,是智能电池管理系统的基础。其应用场景广泛,从消费电子如移动电源、智能穿戴,到工业与汽车领域如储能系统、新能源汽车的电池管理都不可或缺。本文以移动电源为例,深入解析了集成库仑计方案的硬件设计要点,特别是围绕高精度采样电阻与差分放大器的电

weixin_33453726的博客 552

Struts2之Action与配置文件

一.Struts2配置文件 1.struts.properties 在学习Action之前先学下Struts2的配置文件,与Struts2相关的配置文件有好几个,常用的有Struts.xml,web.xml,这两个在MyStruts2的项目中也有使用,其实还有一个可选的配置文件,主要配置Struts2的一些属性,struts.properties.它主要用来配置一些参数,每个可配置的参数都有默认值...

weixin_33967071的博客 257

在pycharm2021.2中学习opencv图像处理,基于python3.9.7、pycharm完成配置

在pycharm中学习opencv图像处理安装python下载python安装包开始安装安装pycharm社区版下载pycharm开始安装如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 安装python 使用pycharm学习opencv应该是最简单的了,对新手比较友好,

steveqobs 7710

泛微OA E9文档管理优化:临时文件清理与存储配置指南

本文深入解析了泛微OA E9系统性能下降的常见原因——临时文件堆积,并提供了完整的优化配置指南。文章详细介绍了临时文件的产生机制,并手把手指导管理员如何通过修改存储路径、调整保留时间、设置白名单等关键配置,有效清理与管理系统临时文件,从而释放存储空间,提升系统运行效率与稳定性。

tree8的博客 432

转载[struts2知识点梳理]

struts2知识点梳理

程序员大海的博客 132

Windows系统下复现PointNet++算法

本文详细介绍了如何在Windows系统下复现PointNet++算法,内容包括程序下载、环境配置、数据集准备以及三个主要任务(语义分割、分类、部件分割)的实现步骤和常见报错解决方法。通过遵循本文的指导,用户可以顺利完成PointNet++算法的复现。

LingYi_5的博客 4326

Struts2基础知识整理

Struts2是基于MVC设计模式的WEB框架,这个框架的的核心就是J2EE的过滤器Filter,通过Filter把所有请求转交给Struts2来处理 要使用Struts首先我们先要导入JAR包,同样的,我把完整的Struts分享给大家:                    链接:https://pan.baidu.com/s/1rQQAlusPkggK4SODJz2tNA 密码:6fi3 ...

weixin_42668719的博客 412

华为OD机试真题 2026-9-2【查找幸运数】

华为OD机试真题 新系统【查找幸运数】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【查找幸运数】多语言题解。

qq_45776114的博客 505

实现画布拖拽算子排布,通过flink实现算子编排计算,如何实现?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1072

Struts|Struts2知识点总结思维导图

Struts|Struts2知识点总结思维导图。工作之后就再也没用过了,^-^

不甩锅的码农 2394

AI应用架构师实战:半导体器件仿真AI智能体系统搭建

半导体器件仿真(如MOSFET、FinFET等)是芯片设计的核心环节,传统流程依赖专家手动调参、多物理场仿真引擎(如TCAD)耗时(小时级至天级)、经验难以沉淀,导致研发周期长、成本高。如何构建一个AI智能体系统,实现仿真任务的自动化调度、参数智能优化、结果分析与知识沉淀,成为提升半导体研发效率的关键挑战。

移动开发前沿的博客 1224

Struts2框架基本知识

Struts2框架的概述: 什么是框架: 框架是一个软件的半成品,通过完成部分的功能. 什么是Struts2框架: Struts2是Struts的下一代产品,是在struts1和WebWork的技术基础上进行了合并的全新的Struts2框架。其全新的Struts2的...

chuoyuan3350的博客 177

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Struts2知识总结

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33932129的博客 88

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

struts2知识点总结

记录下struts2的学习过程中的错误和知识点...... 一、配置一个简单的struts2 web.xml <web-app id="starter" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchem

跟派大星学编程 889

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Struts2的知识点,学习编程我的思路一般是这样的:

今天来总结一下Struts2的知识点,学习编程我的思路一般是这样的:     ① why ?为什么要学这个技术(有什么优秀的地方,可以解决哪些问题?)。     ②what ? 这个技术是什么玩意?有什么牛逼的地方值得我们学习,这个技术的核心是什么。     ③How ? 怎么学?基本技术都是自己自学的,我的学习思路就是,看视频,拿例子来学习知识,在敲代码的过程中理解问题。在此期间如果遇到...

li123128的博客 170

struts2知识整理

一、struts2的基础知识 1. struts2的使用优势 自动封装参数 参数校验 结果的处理(转发和重定向) 国际化 显示等待页面 表单的防止重复提交 2. 搭建struts2框架 2.1 导包 2.2 书写action类 public class Hel...

diaogu9242的博客 163

【自学】struts2知识点

struts2知识点 1、动作类 继承ActionSupport 类 public class CustomerAction extends ActionSupport { public String save(){ System.out.println(“保存操作”); return SUCCESS; } public String update(){ System.out.println(“更...

太多_的博客 176

Struts2基础知识

1.Struts2工作流程 2.拦截器和过滤器知识

隔岸闻烟火的专栏 554

Struts2入门1 Struts2基础知识

Struts2入门1 Struts2基础知识 20131130 代码下载:链接: http://pan.baidu.com/s/11mYG1 密码: aua5 前言: 之前学习了Spring和Hibernate框架知识,因为Spring可以将Struts和Hibernate框架集成,所以还是要学习一些Struts框架技术。本章主要是Struts的简单介绍。 1.Stru...

weixin_33872660的博客 161

struts 2——基础知识

struts 2——基础知识目录说明struts2 核心拦截器struts2 基本配置在struts.xml中配置常量action的实现拦截器的实现访问action的三种方式1)在配置文件指定action标签的method属性2)用感叹号的方式3)在配置文件中使用通配符的方式获取请求页面数据的三种方式1)在action类中定义与表单项一一对应的属性2)在action类中定义 表单项一一对应属性的实...

qq_37051166的博客 544

struts2知识点

学习struts2差不多一年了,今天早上总结了一下struts2的所有知识点。 1.struts2的工作原理及流程 2.struts2的配置文件:命名空间,通配符,result的type,拦截器 3.action类:execute默认方法原理,获得设置与对象值(request  response session),三者的区别与共同点 4.struts2标签OGNL:s标签使用,值的获取#s

小牛的成长史 718

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

红星娃娃头 510

Struts2 知识点梳理

一、Struts2简介   1.概念:轻量级的MVC框架,主要解决了请求分发的问题,重心在控制层和表现层。低侵入性,与业务代码的耦合度很低。Struts2实现了MVC,并提供了一系列API,采用模式化方式简化业务开发过程。   2.与Servlet对比     优点:业务代码解耦,提高开发效率     缺点:执行效率偏低,需要使用反射、解析XML等技术手段,结构复杂   3.不...

amj47851的博客 313

Struts2 知识体系

1、struts2是什么   struts2是用于企业级Web开发的框架,基于struts2开发Web应用程序,在开发效率、可扩展性、可维护性上都会大有提升。 2、struts2的优点   struts2框架是典型的实现了MVC架构的框架,使用struts框架,通过struts2.xml文件配置非常容易的将数据层(模型)、控制层和视图展现层分离,开发出架构清晰的项目。 3、struts2的...

weixin_30472035的博客 88
上一篇: Java JDBC 理论笔记
下一篇: Hibernate知识总结
billycoder
博客等级 码龄17年 171粉丝 188原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值