做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(这里有两种访问方式,一种是使用[]来进行访问,另外一种是使用"."来进行访问,两种访问效果是一样的。)


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



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



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

${all[‘id’]}
request.getPArameter("a");要方便很多。




    
----------------------------访问应用程序数据需要进行以下几个步骤:1.编写public类的static public 方法,只有static public的方法才能被标记表达试访问。----------------------------JSP2.0中定义和使用函数表达式语言允许你定义可在表达式中调用的函数。函数必须作为public类中的public static方法编写。同时要将文件映射到TLD标志库文件中。为了说明函数的使用,我们举一个简单的例子,把两个数相加。首先要编写求两数之和的Java方法代码,如代码示例所示,这里定义了一个静态方法,它接收两个字符串参数,把它们解析成整数并返回它们的和。示例文件:Compute.java
    
用javac把这段代码编译成功后,下一步就要把函数的签名映射到标签库。----------------------------2.将方法映射到TLD表中----------------------------配置标记库描述文件 函数描述符
    
现在我们就可以编写一个JSP页面来使用这个函数。代码示例5是包含两个字段的一个表单,用户输入两个数字并按下“求和”按钮,就会调用上面的函数并把两个数相加,结果在同一个页面中显示出来。----------------------------3.在JSP页面中调用要引用的Taglib标记,然后就可以在jsp页面中访问了。----------------------------代码示例5: math.jsp
    

  1. <%@ taglibprefix="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. <FORMaction="math.jsp"method="GET">
  10. X=<inputtype="text"name="x"value="${param["x"]}">
  11. <BR>
  12. Y=<inputtype="text"name="y"value="${param["y"]}">
  13. <inputtype="submit"value="Add Numbers">
  14. </FORM>
  15. <P>
  16. The sum is: ${my:add(param["x"],param["y"])}
  17. </BODY>
  18. </HTML>
  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>
  1. packagejsp2.examples.el;
  2. importjava.util.*;
  3. publicclassCompute {
  4. publicstaticintadd(String x, String y) {
  5. inta =0;
  6. intb =0;
  7. try{
  8. a = Integer.parseInt(x);
  9. b = Integer.parseInt(y);
  10. }catch(Exception e) {}
  11. returna + b;
  12. }
  13. }
  1. ${param["name"] } myname
  2. ${param.name} myname
  3. ${param["alies"] } now.net.cn
  4. ${param.alies} now.net.cn

web 前后台数据交互的方式相关推荐

  1. web前后台数据交互的四种方式

    利用cookie对象 Cookie是服务器保存在客户端中的一小段数据信息.使用Cookie有一个前提,就是客户端浏览器允许使用Cookie并对此做出相应的设置.一般不赞成使用Cookie. 后台代码 ...

  2. web前后台数据交互

    1.利用cookie对象 Cookie是服务器保存在客户端中的一小段数据信息.使用Cookie有一个前提,就是客户端浏览器允许使用Cookie并对此做出相应的设置.一般不赞成使用Cookie. (1) ...

  3. web实现数据交互的几种常见方式

    前言 在当今社会,作为一名前端程序猿,并不是一昧的去制作静态页面就可以满足滴:你说你会制作网页,好吧,只能说你算是一个前端程序猿.但这是你作为一个程序猿最基本的能力,并不会为你进行加分: 我们都明白, ...

  4. pycharm+python+bootstrap写一个登陆界面_Python--day56(前后台数据交互、bootstrap)

    1. 前后台数据交互 1.1 socket搭建后台 [注意点]: 1. 前台发送的数据是用\r\n进行换行 2. 路由:请求的路径,获得路由的途径是通过后台对前台发送的数据进行拆分(split)得到, ...

  5. Vue前后台数据交互实例演示,使用axios传递json字符串、数组

    Vue 前后台数据交互实例演示 第一章:后台实现 ① Python 启用 Flask 服务器 ② 后台启用成功验证 第二章:前台实现 ① Vue 使用 Axios 实现接收 json 字符串.数组数据 ...

  6. JAVA与SAP数据交互的方式总结

    JAVA与SAP数据交互的方式总结 RFC方式:Java程序直接通过RFC访问SAP的对象(或称函数,可能叫法不对)     SAP提供了BAPI(Business Application Progr ...

  7. easy-table-vue+Vue、SpringBoot+Mybatis实现MVVM模型前后台数据交互

    原文链接:https://www.cnblogs.com/wlovet/p/10980579.html 根据原贴在搭建过程中出现的问题,我在该博客https://blog.csdn.net/Sun_o ...

  8. easy-table-vue+VueJs、SpringBoot+Mybatis实现MVVM模型前后台数据交互

    该项目分为前端展示部分和后台服务部分. 前端部分 使用的技术是:NodeJs.Webpack.VueJs 使用的组件库是:IVIEW.easy-table-vue 使用的开发工具是:WebStorm ...

  9. 关于Web前端做前后台数据交互的那些事儿

    这里以用户登录为例,用户登录与退出功能应用在很多地方,而在有些项目中,我们需要使用Ajax方式进行登录,登录成功后只刷新页面局部,从而提升了用户体验度.本文将使用PHP和jQuery来实现登录和退出功 ...

最新文章

  1. android原生跳转到外网
  2. 华为正式发布5G商用芯片、5G终端!
  3. javascript:void(0)与#区别
  4. Spring + Struts + Hibernate联合开发(多对一关系)
  5. PHP短网址链接在线生成源码 带后台
  6. mysql事务管理及spring声明式事务中主动异常抛出使数据库回滚
  7. DevExpreess汉化使用方法及汉化包
  8. 实验1-6 输出带框文字
  9. HSRP热备份路由协议配置详解
  10. Excel字符串拼接
  11. 2021韩顺平图解linux_狗剩学习笔记
  12. 论文参考文献生成代码(2021.2.25)
  13. Calcite原理和代码讲解(一)
  14. R语言实现拟合神经网络; 神经网络包
  15. 启动虚拟机报错:.vmss”还原虚拟机状态时出错。 错误导致继续运行操作失败。请保留挂起状态并纠正错误,或放弃挂起状态。
  16. 深入理解空洞卷积:优点以及存在问题
  17. oracle crm系统叫什么,目前市场上的CRM系统有哪些
  18. 原生js.ajax内存溢出,【JS】解决内存溢出问题
  19. 彩灯控制单片c语言程序,基于51单片机的led彩灯设计。 9个灯(红绿蓝三色)。按键控制 c语言程序...
  20. python类对会计的帮助_python 会计

热门文章

  1. 面试时应该采取什么方法才能克服紧张的情绪?
  2. 从拜占庭将军问题到分布式系统的一致性
  3. SAP学习第一篇——SAP模块介绍
  4. Java中命令行调用大坑
  5. 电子商务行业数据集成案例介绍
  6. 《孙子兵法》国学智慧
  7. 几种背包问题(java实现)
  8. uAvionix 获得 FAA 批准进行 C 波段测试,并继续在几个新地点推出 SkyLine C2
  9. 连接器缓解安装困难,节省LED照明设计的空间
  10. Linux-bash特性详解