Struts2 笔记一

泛微系统流程表单获取节点操作者 泛微系统流程表单获取节点操作者 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 '部门+安 阅读详情
1. Struts2 开发步骤

这里使用的版本是:Struct2.3.1
这里写图片描述

导入jar包:
把 \apps\struts2-blank\WEB-INF\lib下的jar都导入eclipse中
这里写图片描述

配置web.xml

这里写图片描述

配置struts.xml ; 该文件放到src根目录下

这里写图片描述

扩展添加源代码路径:
E:/BaiduYunDownload/share/0750_Struts2.3.1/soft/struts-2.3.15.1/src/core/src/main/java

这里写图片描述

添加DTD约束,使得在eclipse开发中Struts2可以有代码提示

这里写图片描述

2. Namespace

namespace决定了action的访问路径,默认为”“,可以接收所有路径的action
namespace可以写为/,或者/xxx,或者/xxx/yyy,对应的action访问路径为/index.action, /xxx/index.action,或者/xxx/yyy/index.action.
namespace最好也用模块来进行命名

3 .Action

具体视图的返回可以由用户自己定义的Action来决定
具体的手段是根据返回的字符串找到对应的配置项,来决定视图的内容
具体Action的实现可以是一个普通的java类,里面有public String execute方法即可
或者实现Action接口
不过最常用的是从ActionSupport继承,好处在于可以直接使用Struts2封装好的方法

执行流程:

这里写图片描述

Action执行的时候并不一定要执行execute方法
可以在配置文件中配置Action的时候用method=来指定执行哪个方法 也可以在url地址中动态指定(动态方法调用DMI)(推荐)

!+需要调用的方法名
DMI 方式: 如:
http://localhost:8080//Struts2_0500_ActionMethod/user/user!add

路径问题
struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。
建议使用绝对路径

String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
//再给所有的href前加上该路径   
<base href="<%=basePath%>" />

即是,例如:http://localhost:8080/Struts2_0300_Action/ 获得以上这样的路径

使用通配符
这里写图片描述

可以给action name属性指定通配符* 第一个星号 代表{1} , 第二个星号代表{2}…
*内容,则是在请求路径中传入。

Action通过属性接收参数
请求方式:http://localhost:8080/Struts2_0700_ActionAttrParamInput/user/user!add?name=a&age=18

通过给Action 设置属性,对应参数名,并且带有get set方法,Struct2 会自动把参数值,通过调用setXX方法填充到相应的字段

public class UserAction extends ActionSupport {

private String name;
private int age;

public String add() {
    System.out.println("name=" + name);//name=a
    System.out.println("age=" + age)//age=18
    return SUCCESS;
}

public String getName() {
    return name;
} .......  

用域模型(DomainModel)接收参数(最常用)

这里写图片描述

并且可以直接用以下请求方式对属性赋值
http://localhost:8080/Struts2_07011_ActionAttrParamInput/user/user!add?user.name=a&user.age=18

相当于// setUser(User user).setName(String name)

当参数与属性不一致时候,可以使用DTO(数据传输对象)匹配为一致。

相当于 // newUser(UserDTO dto)

通过ModelDriven接收参数 (比较少用, 思想很好)

请求方式:
http://localhost:8080/Struts2_0712_ActionAttrParamInput/user/user!add?name=a&age=18

这里写图片描述

这里写图片描述

中文编码问题 可以使用常量 struts.i18n.encoding 解决

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

数据校验

使用addFieldError方法和s:fieldError标签简单处理数据校验 ——添加用户

这里写图片描述

这里写图片描述

Struct2 把所有属性放进 Value Stack里面,可以通过s:property 标签取值

这里写图片描述

Structs2 访问web元素

Stack Context (Action Context)

使用IOC 访问web元素

IOC(inverse of control 控制反转)或者 DI (dependency injection 依赖注入)

Struts2 从filter开始,获得HttpRequest 对象, 把这个对象内容放到一个Map里,也起个名字叫request。即: Map 和HttpRequest之间做了映射,转成一个 Map request
这里写图片描述

这里写图片描述

request属性依赖于容器(Struct2) 调用 setRequest(Map String, Object> request) 把相关的值注入进去,谁调用,谁负责注入对象。(最常用)

include 文件

这里写图片描述

Action 总结:

这里写图片描述

result_type

type=“dispatcher”服务器跳转,只能跳到html,jsp freemarker,不能是action。(常用)

type=”redirect”(常用)客户端跳转,请求地址将改变。

type=”chain” 可以调到action。

type=”redirectAction” 客户端跳到action,请求地址将改变。

这里写图片描述

当使用type=“chain”时,跳转到不同包下的action 可以这样写

<param name="actionName">dashboard</param>
<param name="namespace">/secure</param>

带参数的结果集
例子:

    <result type="redirect">/user_success.jsp?t=${type}</result>

如何取得t的值呢?
从ActionContext中,通过#parameters.X 取得参数值的内容
这里写图片描述

Result总结:
这里写图片描述

OGNL表达式 (对象图导航语言)

这里写图片描述

<li>访问值栈中的action的普通属性: username = <s:property value="username"/> </li>
        <li>访问值栈中对象的普通属性(get set方法):<s:property value="user.age"/> | <s:property value="user['age']"/> | <s:property value="user[\"age\"]"/> | wrong: <%--<s:property value="user[age]"/>--%></li>
        <li>访问值栈中对象的普通属性(get set方法): <s:property value="cat.friend.name"/></li>
        <li>访问值栈中对象的普通方法:<s:property value="password.length()"/></li>
        <li>访问值栈中对象的普通方法:<s:property value="cat.miaomiao()" /></li>
         <li>访问值栈中action的普通方法:<s:property value="m()" /></li>
        <hr />

        //格式  @+完整类名+@+方法名或属性名
        <li>访问静态方法:<s:property value="@com.bjsxt.struts2.ognl.S@s()"/></li>
        //@@max
        <li>访问Math类的静态方法:<s:property value="@@max(2,3)" /></li>
        <hr />
        <li>访问普通类的构造方法:<s:property value="new com.bjsxt.struts2.ognl.User(8)"/></li>
        <hr />
        <li>访问List:<s:property value="users"/></li>
        <li>访问List中某个元素:<s:property value="users[1]"/></li>
        <li>访问List中元素某个属性的集合:<s:property value="users.{age}"/></li>
        <li>访问List中元素某个属性的集合中的特定值:<s:property value="users.{age}[0]"/> | <s:property value="users[0].age"/></li>
        <li>访问Set:<s:property value="dogs"/></li>
        // 由于set是无序的,所以取不到值
        <li>访问Set中某个元素:<s:property value="dogs[1]"/></li>
        <li>访问Map:<s:property value="dogMap"/></li>
        <li>访问Map中某个元素:<s:property value="dogMap.dog101"/> | <s:property value="dogMap['dog101']"/> | <s:property value="dogMap[\"dog101\"]"/></li>
        <li>访问Map中所有的key:<s:property value="dogMap.keys"/></li>
        <li>访问Map中所有的value:<s:property value="dogMap.values"/></li>
        <li>访问容器的大小:<s:property value="dogMap.size()"/> | <s:property value="users.size"/> </li>
        <hr />
        //{?#或者^#或$#开头} this: 遍历users里面的每一个对象,当前对象
        //?:过滤条件 ^开头那个,$是结尾那个
        <li>投影(过滤):<s:property value="users.{?#this.age==1}[0]"/></li>
        <li>投影:<s:property value="users.{^#this.age>1}.{age}"/></li>
        <li>投影:<s:property value="users.{$#this.age>1}.{age}"/></li>
        <li>投影:<s:property value="users.{$#this.age>1}.{age} == null"/></li>
        <hr />
        //[0]意思:值栈中的object从第0个开始到栈底这个集合
        //[0].username  找里面的Action,如果第一个没有,找第二个
        //当result  tyep="chain",就可以有多个action
        <li>[]:<s:property value="[0].username"/></li>

Struts-Tags
这里写图片描述
这里写图片描述

    <li>property: <s:property value="username"/> </li>
        //取值为字符串:加个单引号,表示普通字符串
        <li>property 取值为字符串: <s:property value="'username'"/> </li>
        <li>property 设定默认值: <s:property value="admin" default="管理员"/> </li>
        //escape="false"  不要解析成字符串,按照原来HTML标签左右解析
        <li>property 设定HTML: <s:property value="'<hr/>'" escape="false"/> </li>
        <hr />
        //把var变量adminName既放到request里面,又放到ActionContext里面
        <li>set 设定adminName值(默认为request 和 ActionContext): <s:set var="adminName" value="username" /></li>
        <li>set 从request取值: <s:property value="#request.adminName" /></li>
        <li>set 从ActionContext取值: <s:property value="#adminName" /></li>

        <li>set 设定var,范围为ActionContext: <s:set var="adminPassword" value="password" scope="session"/></li>
        <li>set 使用#取值: <s:property value="#adminPassword"/> </li>
        <li>set 从相应范围取值: <s:property value="#session.adminPassword"/> </li>

<li>bean 查看debug情况:    //name: new 哪个对象,var:放到ActionContext里面
            <s:bean name="com.bjsxt.struts2.tags.Dog" var="myDog">
                //设置Dog对象里面的name属性的默认值为 'oudy'  需要加引号表示字符串
                <s:param name="name" value="'oudy'"></s:param>
            </s:bean>
            拿出值:
            <s:property value="#myDog.name"/>

        </li>
        <hr />

        //include标签(少用)
        <li>include _include1.html 包含静态英文文件
        <s:include value="/_include1.html"></s:include>
        </li>

        <li>include _include2.html 包含静态中文文件
        <s:include value="/_include2.html"></s:include>
        </li>

        //%{}将原本的文本属性解析为ongl
        <li>include _include1.html 包含静态英文文件,说明%用法
        <s:set var="incPage" value="%{'/_include1.html'}" />
        <s:include value="%{#incPage}"></s:include>
        </li>
    <hr />

        <li>if elseif else: 
        age = <s:property value="#parameters.age[0]" /> <br />
        <s:set var="age" value="#parameters.age[0]" />
        <s:if test="#age < 0">wrong age!</s:if>
        <s:elseif test="#parameters.age[0] < 20">too young!</s:elseif>
        <s:else>yeah!</s:else><br />

        <s:if test="#parameters.aaa == null">null</s:if>
        </li>

        <hr />

        <li>遍历集合:<br />
        <s:iterator value="{1, 2, 3}" >
            <s:property/> |
        </s:iterator>
        </li>
        <li>自定义变量:<br />
        <s:iterator value="{'aaa', 'bbb', 'ccc'}" var="x">
            <s:property value="#x.toUpperCase()"/> |
        </s:iterator>
        </li>
        <li>使用status:<br />
        <s:iterator value="{'aaa', 'bbb', 'ccc'}" status="status">
            <s:property/> | 
            遍历过的元素总数:<s:property value="#status.count"/> |
            遍历过的元素索引:<s:property value="#status.index"/> |
            当前是偶数?:<s:property value="#status.even"/> |
            当前是奇数?:<s:property value="#status.odd"/> |
            是第一个元素吗?:<s:property value="#status.first"/> |
            是最后一个元素吗?:<s:property value="#status.last"/>
            <br />
        </s:iterator>

        </li>

        <li>
        <s:iterator value="#{1:'a', 2:'b', 3:'c'}" >
            <s:property value="key"/> | <s:property value="value"/> <br />
        </s:iterator>
        </li>

        <li>
        <s:iterator value="#{1:'a', 2:'b', 3:'c'}" var="x">
            <s:property value="#x.key"/> | <s:property value="#x.value"/> <br />
        </s:iterator>
        </li>

这里写图片描述

设计约定

这里写图片描述

这里写图片描述

I18N

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

相关推荐

C语言入门—初识C语言

一、C语言概述 1、什么是C语言 语言是用来交流沟通的,有一方说,有一方听。必须要两方参与。(自言自语的除外) 语言是人与人交流,而C语言是人与机器交流 语言有独特的语法规则和定义,双方必须遵循这些规则和定义才能实现真正的交流。 接下来首先了解下计算机的组成: 2、计算机介绍 2.1、计算机结构组成 2.2、计算机系统组成 2.3、程序的指令 指令是对计算机进行程序控制的最小单元 计算机的指令系统是指所有指令的集合 程序是指为完成某一项特定任务而用某种言语编写的一组指令序列 3、C语言发展历程 3.

jun319817的博客 1035

Struts2使用之Action注解的配置

所期望的父package的字符串值Results“Result”注解列表Result提供了Action结果的映射,它有四个属性:?name ——action方法的结果名?type—— 结果类型?value——任意的结果值。可以是rediect结果类型对应的action名,也可以是dispatcher结果类型对应的JSP?parameters ——字符串参数组成的数组Action注解配置使用方式如下:Java代码@Results({})

2401_84046876的博客 903

从零到一:移远EC200UCN_LA OpenCPU开发中的‘避坑’实战指南

本文详细介绍了移远EC200UCN_LA 4G通信模块的OpenCPU开发实战指南,涵盖开发环境搭建、项目构建、通信接口开发、调试技巧及固件升级等关键环节。通过避坑经验和实用技巧,帮助开发者高效完成二次开发,提升4G通信模块的应用开发效率。

weixin_29159711的博客 505

Struts2错误:There is no Action mapped for namespace... 解决方法

今天在使用 Struts2.1 做注解操作的时候,一直出现这个问题。花了半天时间才解决,错误原因真是让人蛋疼! 错误提示: 项目结构: 使用注解的位置: package com.service; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletReques

Techzero 3478

基于Matlab-Simulink的大林算法控制系统设计与振铃消除实验

本文详细介绍了基于Matlab-Simulink的大林算法控制系统设计与振铃消除实验。通过分析纯滞后系统的控制难题,探讨大林算法在工业控制中的应用优势,并提供Matlab-Simulink环境搭建、控制器D(z)设计、振铃消除及仿真实验的完整流程。文章还对比了大林算法与PID控制的性能差异,为工程实践提供参考。

dropout6artist的博客 796

Claude Code 实战指南:从入门到高效编程

本文是一份Claude Code实战指南,旨在帮助开发者从入门到精通这款AI编程助手。文章详细讲解了如何通过清晰的指令公式与Claude Code高效沟通,并展示了如何将其深度集成到日常开发工作流中,例如理解陌生代码、调试和生成测试文档。指南还提供了避坑建议与最佳实践,并通过构建一个天气查询CLI工具的完整案例,演示了如何利用Claude Code加速开发进程,实现从设计到代码的高效人机协作。

weixin_28339967的博客 485

structs2之Action与ActionContext

Action Action原型 ActionContext ServletActionContext 线程安全 servlet和Structs2 servlet分析 structs2分析 Actionstructs2的核心功能就是action,主要是编写一个个action来处理逻辑。 action类通常都要实现com.opensymphony.xwork2.Action接口,并实现该接口中的exe

chen1218chen的专栏 980

ANSYS Maxwell:从RMxprt到3D轴向磁通电机的无缝建模指南

本文详细介绍了如何利用ANSYS RMxprt作为高效起点,快速构建3D轴向磁通电机的有限元分析模型。通过RMxprt内置模板输入关键参数并完成磁路法计算后,可一键生成包含几何、材料、绕组及边界条件的即用型Maxwell 3D模型,极大简化了复杂三维结构的建模流程,使工程师能专注于性能优化与仿真分析。

weixin_29281941的博客 555

Struts2中的ActionContext

ActionContext(Action上下文)ActionContext介绍通过上面用户注册例子的学习,我们知道Xwork与Web无关性,我们的Action不用去依赖于任何Web容器,不用和那些JavaServlet复杂的请求(Request)、响应(Response)关联在一起。对请求(Request)的参数(Param),可以使用拦截器框架自动调用一些get()和set()方法设置到

zsf0615020117的专栏 810

手动以及使用torch.nn实现前馈神经网络实验

手动以及使用torch.nn实现前馈神经网络 手动实现前馈神经网络解决上述回归、二分类、多分类任务 利用torch.nn解决上述回归、二分类、多分类任务 在多分类任务中使用至少三种不同的激活函数 对多分类任务中的模型评估隐藏层层数和隐藏单元个数对实验结果的影响

m0_52910424的博客 9372

EMB电子机械制动系统和EHB电子液压制动系统控制功能的对比

EMB电子机械制动系统相比EHB液压制动系统具有显著优势:响应速度更快(<100ms)、控制精度更高(±2N·m)、能实现单轮独立控制,支持0.1%级制动力调节。在ABS、ESC等安全功能上表现更优,制动平顺性和NVH性能更好,同时提升能量回收效率15%-20%。特别适合智能驾驶需求,可使AEB等系统响应时间缩短50ms,紧急制动距离减少1米以上。EMB系统完美契合高阶自动驾驶对快速响应和精准控制的要求。

m0_59012156的博客 886

struts2框架中ActionContext对象详解

一、了解OGNL表达式:       (1) Object Graphic Navigation language(对象图形导航语言)的缩写,它是一种功能性极强的表达式语言,使用它可以存取任意属性,调用对象中的方法。其作用的就是为了简化访问对象中的属性值!     (2) OGNL表达式的解析都是围绕OGNL上下文进行的,OGNL表达式是一个map对象,其中包含多个java对象,其中有一个对象

蜜蜂采蜜 1万+

科研——ICONIP论文修改和提交

ICONIP说明文档

Blackoutdragon的博客 6647

Struts2学习笔记(一) struts2的下载以及jar包的导入

一、struts2的下载 struts2下载地址:https://struts.apache.org 进入后点击download即可进入下载页面 在这里我们可以选择不同版本的struts2进入下载 下载时我们选择第一个,第一个中包括了下面所有的 这里我们以2.3.37版本为例,下载完成后我们对压缩包进行解压 二、struts2的基本jar包导入 在这之后我们就可以去创建一个Dynamic ...

showadwalker的博客 6448

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【Struts2笔记整理一】HelloWorld

如果说的专业点,Struts2 是一款基于 MVC 设计模式的 Web 应用框架,它本质上相当于 Servlet,它是作为控制器(Controller)来建立模型与视图的数据交互。说白了它就是用来 进行 WEB 开发的框架 而已。

小异常的博客 619

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Struts2 学习笔记一

 1.      Struts1 与 Struts2的区别Struts2从字面上来看似乎是Struts1的升级,但实事上可以说Struts2与Struts1几乎没有什么关系,除了名字相同外;说实在的,Struts2可以看作是WebWork的升级,因为无论从编程风格的相似性还是所引用到的jar包,到处可以看到WebWork的身影。下面就来比较下Struts1与Struts2到底有哪些区别吧:

dangdanglili的专栏 794

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Struts2学习笔记一

本次学习笔记参考传智播客Struts2黎活明老师的视频。 一、Struts2 简单的认识     Struts2实在WebWork2的基础上发展而来的。属于MVC框架。相比于Struts1,Struts2有以下的几个优点。(我没有学习Struts1,直接来学Struts2)。     1)在软件设计上Struts2没有像Struts1那样Servlet PAI和Struts API有着紧密的

hyz_116的专栏 697

web39Struts2笔记一

1 开发环境的配置: 首先第一步是导包 这里新建的项目是web项目,接着就是新建一个action类 然后是在src目录下配置struts2的核心配置文件,配置文件首先是导入约束, ...

dream_follower的博客 206

Struts2学习笔记一(Struts2入门)

这是笔者在学习过程中的知识记录,可能有错误的地方,仅供参考 #Struts2的入门 Struts2的简介 在Javaee开发中,我们一般将整个项目分成表现层,业务层,和持久层,在持久层就是和数据库打交道,之前的Hibernate就是属于这个层的,在表现层我们在没有框架之前是使用jsp+servlet+javabean的MVC设计模式来实现的,Struts2框架就是用来代替之前表现层的开发模式...

水中无名鱼的博客 181

Struts2笔记一之简单了解Struts2

1、Struts2所需要的jar为: commons-fileupload-1.2.1.jar、 commons-io-1.3.2.jar、 commons-logging-1.0.4.jar、 freemarker-2.3.13.jar、 ognl-2.6.11.jar、 struts2-core-2.1.6.jar、 xwork-2.1.2.jar、

edifiergl的专栏 617

Struts2学习笔记(一)

Struts学习笔记(一) 文章目录Struts学习笔记(一)1 回忆使用Filter作为控制器的MVC应用2 struts2初识概述3 Struts2搭建环境4 Struts2第一个应用程序5 Struts2第一个应用程序解析6 Action概述6.1 通过ActionContext获取WEB资源6.2 通过Aware接口获取WEB资源6.3 Struts2通过和Servlet API耦合的方式获取WEB资源 1 回忆使用Filter作为控制器的MVC应用 2 struts2初识概述 3 Struts2搭

m0_50763265的博客 344

Struts2框架学习笔记一:Struts2框架搭建、配置详解

文章目录Struts2框架学习笔记一:Struts2框架搭建、配置详解Struts2框架搭建Struts2拦截器的重要性struts2常量配置struts2动态调用struts2的默认值配置Action类的操作 Struts2框架学习笔记一:Struts2框架搭建、配置详解 Struts2框架搭建 创建一个Dynamic web project项目 在lib文件下导入相应的包,解压Struts压...

公子&小白的博客 1151

Struts2笔记(一):Struts2概述

1.Web技术的发展 如图:2.MVC思想及其优点MVC结构图:如下图 MVC思想将一个应用分成三个基本部分:Model(模型)、View(视图)和Controller(控制器),这三个部分以最少的耦合协同工作,从而提高应用的可扩展性及其维护性。MVC优点:·多个视图对应一个模型。·模型返回的数据与显示逻辑分离。·应用被分隔为三层,降低各层间的耦合性。·控制层概念。·MVC更符合软

路人甲的专栏 2590

struts2拦截器_Struts2 学习笔记(一)

1. Struts的概述1.1 什么是Struts2Struts2是一个基于MVC设计模式的Web应用框架,它的本质就相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts2是在Struts和WebWork的技术的基础上进行合并的全新的框架。Struts2以WebWork为核心,采用拦截器的机制来处理的请求。这样的设计...

weixin_39653622的博客 273

Struts2巩固笔记一

[b]开发流程:[/b] 1.搭建开发和运行环境 Eclipse JavaEE 3.6.2 Struts 2.0包:[list] [*]commons-logging-1.0.4.jar [*]freemarker-2.3.15.jar [*]ognl-2.7.3.jar [*]struts2-core-2.1.8.1.jar [*]xwork-2.1.6.jar [/l...

学习-积累的过程 171

Struts2框架教程笔记一

struts 2 是基于OpenSymphony的网络工程框架,所以struts的类基本都在OpenSymphony的子包下。 在Struts 2 中的模型(model),视图(vi

dearbaba_8520的博客 457
上一篇: JSP笔记一
下一篇: Spring笔记一
Winge_Fish
博客等级 码龄11年 6粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值