web 前后台数据交互的方式

article/2025/9/16 20:12:35

做web开发,很重要的一个环节就是前后台的数据的交互,数据从页面提交到contoller层,数据从controler层传送到jsp页面来显示。这2个过程中数据具体是如何来传送的,是本节讲解的内容。

   首先说一下数据如何从后台的contorller层传送到页面jsp上。




如上图,在使用struts的情况下上图就是我们在jsp页面上能获取到的对象,我们想将后台数据传到jsp必须将这些数据放到这些对象中才行。

那么我们就有2种方法了,一种是放到request对象里面作为一个属性,例如:request.setAtribute(“别名”,对象名);

还有一种方法 就是存放到valueStack里面去。 我们只需要在外面的action里面设置一个属性值,写上set和get方法,在我们进行业务逻辑处理的时候为该属性值赋值,那么stutrts就会自动将我们这个action中的属性值放到valueStack里面去,并最终传送到jsp页面上。


到了jsp后,我们如何显示呢?


以前有通过java代码来显示的,但那样不好,jsp 2.0以后就不允许直接在jsp页面上写java 代码了,取而代之的是EL,也就是表达式语言。


下面具体聊聊jsp中用于显示的EL。
jsp 2.0 EL:
jsp  2.0的EL 规定,可以在jsp页面上通过${属性名}这样的语法来访问传送到页面上的对象的属性值。
并且提供了内置的一些对象方便用户访问不同范围内的属性值:


如果在不同的属性范围内,保存了同一个属性的话,按照page-request-session-application进行优先顺序输出级别最高的那个


例如,url 后面接的参数,在页面上可以通过${param.*}获取到。
在后台通过request.setAttribute("all",all);设置的值,在页面上可以通过${all[0]}得到(假设all是一个list类型),如果是map则使用
,如果只是一个对象,那么可以使用
${all.属性}.

内置的11个隐含对象:

为方便的获得WEB应用程序的相关数据,EL表达式语言定义了一些隐含对象。隐含对象共有11个对象,(JSP中具有9个隐含对象,EL比JSP中具有更多的隐含对象,这样EL比JSP更方便的获取数据) 使用这些对象可以很方便的访问Web 程序数据。

隐含对象包括Session(获得当前web程序的Session值),cookie(获得WEB程序的Cookie值),header,headerValues(获得用户的Http数据访问头部信息),Param和ParamValues(获得用户提交数据参数)等。

使用${隐含对象名称["元素"]} 就可以获得这个值了,例如${header("host")} 可以显示http头部中host的值,${param("username")},可以获得显示用户表单提交的用户. 使用${empty(param("username")} 可以判断用户提交表单是否为空等。(这样比jsp1.2中使用request.getParamter("username") 要简化和方便很多了)

----------------------------

隐含对象及隐含对象访问实例

EL 表达式定义了11个隐含对象,使用这11个对象可以很方便的读取到session,cookie,HttpHeader,用户提交表单(param)等

隐含对象 内容

applicationScope 应用程序范围内的scoped变量组成的集合

cookie 所有cookie组成的集合

header HTTP请求头部,字符串

headerValues HTTP请求头部,字符串集合

initParam 全部应用程序参数名组成的集合

pageContext 当前页面的javax.servlet.jsp.PageContext对象

pageScope 页面范围内所有对象的集合

param 所有请求参数字符串组成的集合

paramValues 所有作为字符串集合的请求参数

requestScope 所有请求范围的对象的集合

sessionScope 所有会话范围的对象的集合

下面是获取HTTP访问头部数据和用户提交数据的示例

EL表达式 运算结果

${header["host"]} 这里得到HTTP连接头部的host值

${header["accept"]} 这里获得HTTP头部的accept值

${header["user-agent"]} 这里获得HTTP头部的user-agent值

----------------------------

访问应用程序数据

除了可以方便的访问内置的隐含对象外,EL还可以方便的到应用程序数据,访问应用程序数据使用两种方式 . (点号运算符)访问对象的属性,也可以使用[] 来访问数组元素(实际上EL中访问隐含对象数据也是使用这两种方式的)

表达式${data}表示名为data的scoped变量。可以使用点号(.)或方括号([])运算符从集合中检索属性值:(两种数据访问方式演示)

点号运算符用于访问命名的属性,比如表达式${customer.name}表示scoped变量customer的name属性;

方括号运算符可用于检索命名的属性,比如在${customer[“name”]}中。也可以通过${customers[0]}的形式来访问集合customers中的第一项。

EL表达式语言同时还统一了对点号和方括号运算符的处理,因此${customer.name}与${ customer[“name”]}是等价的。

----------------------------

以下可以读取用户提交的信息,假设用户提交信息为 ?name=myname&alies=now.net.cn(这里有两种访问方式,一种是使用[]来进行访问,另外一种是使用"."来进行访问,两种访问效果是一样的。)

    
  1. ${param["name"] } myname   
  2. ${param.name} myname   
  3. ${param["alies"] } now.net.cn   
  4. ${param.alies} now.net.cn  

----------------------------

访问应用程序数据需要进行以下几个步骤:

1.编写public类的static public 方法,只有static public的方法才能被标记表达试访问。

----------------------------

JSP2.0中定义和使用函数

表达式语言允许你定义可在表达式中调用的函数。函数必须作为public类中的public static方法编写。同时要将文件映射到TLD标志库文件中。

为了说明函数的使用,我们举一个简单的例子,把两个数相加。首先要编写求两数之和的Java方法代码,如代码示例所示,这里定义了一个静态方法,它接收两个字符串参数,把它们解析成整数并返回它们的和。

示例文件:Compute.java

    
  1. package jsp2.examples.el;   
  2. import java.util.*;   
  3. public class Compute {   
  4. public static int add(String x, String y) {   
  5. int a = 0;   
  6. int b = 0;   
  7. try {   
  8. a = Integer.parseInt(x);   
  9. b = Integer.parseInt(y);   
  10. }catch(Exception e) {}   
  11. return a + b;   
  12. }   
  13. }  

用javac把这段代码编译成功后,下一步就要把函数的签名映射到标签库。

----------------------------

2.将方法映射到TLD表中

----------------------------

配置标记库描述文件 函数描述符

    
  1. < function>   
  2. < description>add x and y< /description>   
  3. < name>add< /name>   
  4. < function-class>jsp2.examples.el.Compute   
  5. < /function-class>   
  6. < function-signature>int   
  7. add(java.lang.String,java.lang.String)   
  8. < /function-signature>   
  9. < /function>  

现在我们就可以编写一个JSP页面来使用这个函数。代码示例5是包含两个字段的一个表单,用户输入两个数字并按下“求和”按钮,就会调用上面的函数并把两个数相加,结果在同一个页面中显示出来。

----------------------------

3.在JSP页面中调用要引用的Taglib标记,然后就可以在jsp页面中访问了。

----------------------------

代码示例5: math.jsp

    
  1. < %@ taglib prefix="my"   
  2. uri="http://jakarta.apache.org/tomcat/jsp2-example-taglib %>   
  3. < HEAD>   
  4. < TITLE>Functions< /TITLE>   
  5. < /HEAD>   
  6. < BODY>   
  7. < H3>Add Numbers< /H3>   
  8. < P>   
  9. < FORM action="math.jsp" method="GET">   
  10. X = < input type="text" name="x" value="${param["x"]}">   
  11. < BR>   
  12. Y = < input type="text" name="y" value="${param["y"]}">   
  13. < input type="submit" value="Add Numbers">   
  14. < /FORM>   
  15. < P>   
  16. The sum is: ${my:add(param["x"],param["y"])}   
  17. < /BODY>   
  18. < /HTML>  



上面 说的都是jsp EL,其实它还可以和JSTL 标签结合起来使用, 也就是说 放在JSTL的value属性中来使用。



大家需要注意的是,要把Jsp EL和ONGL的表达式区别开来,这2者很类似,但是在一般的jsp页面中使用的其实都是jsp 的
EL。



下面说说,页面数据如何提交后台,页面的form里面的数据都是通过request对象 传送到后台的,在后台可以通过 request.getPArameter("a");来得到前台页面传入的值。 在使用struts的情况下,struts 还会将这些放入到request的值取出来,自动映射到action的 同名属性上去,所以 ,我们也可以直接通过在action里面设置和页面form里面的域同名的属性来直接使用struts为我们自动填充进去的页面提交值了,这样比通过 
request.getPArameter("a");要方便很多。




  
${all[‘id’]}

http://chatgpt.dhexx.cn/article/C9FFLebZ.shtml

相关文章

(Web前端)后台管理系统框架收集

一、&#xff08;Web前端&#xff09;常用的后台管理系统框架 1、使用vue-element-admin https://panjiachen.github.io/vue-element-admin-site/zh/guide/ 模板建议使用 vueAdmin-template &#xff0c; 桌面端 electron-vue-admin 1.包含功能 登录/注销 权限验证 侧边栏…

什么是前端什么是后端?什么是前台后台

前台&#xff1a;呈现给用户的视觉和基本的操作。简单来说就是访问网站的人看到的内容和页面。下图以百度为例&#xff0c;我们看到的界面就是前台 后台&#xff1a;指程序的使用人员&#xff0c;管理人员经过密码或其他验证手段之后才可以看到的内容&#xff0c;一般可以进行一…

什么是前端、JavaWeb、Web前端、前台、后台

JavaWeb是java开发中的一个方向 Java有搞安卓的&#xff0c;搞Web的&#xff0c;搞嵌入式的&#xff0c;等等。。 JavaWeb就是指搞web方向的&#xff0c;JavaWeb分两块一块是服务器端 叫后端&#xff0c;另一块叫前端&#xff0c;也就是Web前端。前端就是用户能看到的部分&am…

(Web前端)十分优秀的后台管理框架收集

Web 开发中几乎的平台都需要一个后台管理&#xff0c;但是从零开发一套后台控制面板并不容易&#xff0c;幸运的是有很多开源免费的后台控制面板可以给开发者使用&#xff0c;以下是我整理的一些UI框架模板&#xff0c;可以拿来稍加改造就能直接使用 1、vue-element-admin h…

web 后台学习介绍

什么是后台 后台&#xff0c;指网站后台&#xff0c;有时也称为网站管理后台&#xff0c;是指用于管理网站前台的一系列操作&#xff0c;如&#xff1a;产品、企业信息的增加、更新、删除等。动态网页一般指的就是后台和静态页面结合的网页。例如&#xff0c;我们最常用的淘宝…

有关Web前端和后台的部分简介

有关Web前端和后台的部分简介 Web前端简述 1&#xff1a;Web前端是什么 Web前端技术包括JavaScript&#xff0c;ActionScript&#xff0c;CSS,xHTML等“传统”技术与Adobe RIA,Google Gears,以及概念性较强的交互式设计&#xff0c;艺术性设计较强的视觉设计等等。它所涵盖的…

java oozie任务状态_Oozie工作流分析

我们在实际的生成操作中经常需要将一些任务在晚上开启进行定时执行&#xff0c;或者多个作业&#xff0c;例如hive,mapreduce,shell等任务的组合调用。 我们可以使用linux的contab spervisor inotify-tool进行任务的配值&#xff0c;但是操作起来麻烦&#xff0c;而且没有可视…

Oozie--安装部署

Oozie的部署 1、上传解压2、配置Hadoop代理用户3、重启Hadoop集群4、解压lib包5、引入extjs6、修改oozie配置文件7、创建oozie元数据库8、初始化oozie为什么要将oozie的这些jar包放到hdfs上? 9、生成web项目10、配置环境变量11、Oozie的启动与关闭12、修改界面默认时区 参考&a…

【Oozie】CDH集群的oozie手把手快速入门

背景 在今天中午&#xff0c;本人快乐的干饭的时候&#xff0c;领导打电话过来询问oozie是个什么样的东西&#xff0c;能不能有个用例&#xff1f;在本人的理解里面&#xff0c;oozie主要是个调度工具。所以本篇为CDH集群的oozie的快速入门教程 环境准备 CDH集群一套CDH集群…

Oozie5.2.1源码编译及安装部署

Oozie5.2.1源码编译 一、准备工作二、开始编译三、安装部署四、运行测试五、总结六、编译后得版本 说明&#xff1a; 官网下载最新版本:https://oozie.apache.org/依赖环境&#xff1a;CentOS7JDK1.8maven-3.6.3pig-0.17.0参考官网 一、准备工作 下载maven、安装、修改setting…

关于oozie

一、定义 1.oozie是一个管理apache hadoop作业的工作调度系统 2.oozie的workflow jobs是由actions组成的有向无环图(DAG) 3.oozie的coordinate jobs是由时间(频率)和数据可用性的重复的workflow jobs . 4.oozie 与hadoop生态圈的其他部分及车鞥在一起&#xff0c;支持多种类型…

任务调度之Oozie详解

利用shell脚本通过crontab进行定时执行&#xff0c;这样实现的话比较简单&#xff0c;但是随着多个job复杂度的提升&#xff0c;无论是协调工作还是任务监控都变得麻烦&#xff0c;我们选择使用oozie来对工作流进行调度监控。 1. Oozie的特点 Oozie是管理hadoop作业的调度系统…

Oozie简介

在Hadoop中执行的任务有时候需要把多个Map/Reduce作业连接到一起&#xff0c;这样才能够达到目的。[1]在Hadoop生态圈中&#xff0c;有一种相对比较新的组件叫做Oozie[2]&#xff0c;它让我们可以把多个Map/Reduce作业组合到一个逻辑工作单元中&#xff0c;从而完成更大型的任务…

Oozie

文章目录 **一、** **Apache Oozie****1&#xff0e;** **Oozie概述****2&#xff0e;** **Oozie的架构****3&#xff0e;** **Oozie**基本原理**3.1&#xff0e;** **流程节点** **4&#xff0e;** **Oozie工作流类型****4.1&#xff0e;** **Work**Flow**4.2&#xff0e;** *…

工作流调度工具--Oozie

一、背景 一个完整的数据分析系统通常是由大量的任务单元组成&#xff0c;Shell脚本、Java程序、MapReduce程序、Hive脚本等等&#xff0c;各个任务单元之间存在时间先后及前后依赖关系。 为了很好的组织这样的复杂执行计划&#xff0c;需要一个工作流调度系统来调用执行。 简…

Oozie基础入门

前言&#xff1a; 因为工作需要用到oozie&#xff0c;但是网上的资料越看越迷茫&#xff0c;经过很大的努力&#xff0c;终于折腾清楚了&#xff0c;这里&#xff0c;做一个总结&#xff0c;帮助后来者更好地进行入门&#xff0c;当然&#xff0c;粗鄙之言&#xff0c;难免疏漏…

大数据调度工具oozie详细介绍

背景&#xff1a; 之前项目中的sqoop等离线数据迁移job都是利用shell脚本通过crontab进行定时执行&#xff0c;这样实现的话比较简单&#xff0c;但是随着多个job复杂度的提升&#xff0c;无论是协调工作还是任务监控都变得麻烦&#xff0c;我们选择使用oozie来对工作流进行调…

oozie详解

1、什么是Oozie Oozie是一种java web应用程序&#xff0c;它运行在java servlet容器中&#xff0c;并使用数据库来存储一下内容&#xff1a; ①工作流定义 ②当前运行的工作流实例&#xff0c;包括实例的状态和变量 Oozie工作流失放置在控制依赖DAG(有向无环图)中的一组动作&am…

大数据Hadoop之——任务调度器Oozie(Oozie环境部署)

文章目录 一、概述二、Oozie架构三、Oozie环境部署&#xff08;Oozie与CDH集成&#xff09;1&#xff09;添加服务2&#xff09;将 Oozie 服务添加到 CDH3&#xff09;自定义角色分配4&#xff09;数据库设置5&#xff09;审核更改6&#xff09;开始自动安装并自启 四、CDH的 H…

Java并发编程(一):多线程与并发原理回顾

今天来聊一聊经典的Java技术&#xff0c;并发编程。并发是程序的灵魂&#xff0c;一个优秀的Java程序一定会支持高并发&#xff0c;并且&#xff0c;并发编程也是面试环节中经常会问到的一个问题&#xff0c;那么今天我们以一道经典的Java面试题回顾一下Java的并发编程。废话不…