JSP和JavaScirpt数据交互及特殊字符处理

JSP数据和JavaScirpt数据交互
JSP数据和 JavaScirpt数据交互使用问题的一种解决方法对于WEB程序来说,前端(JavaScript)和后端(JSP/Servlet)是没法共用数据 的,只能是后端程序(JSP)把数据输出
,生成页面到前端,这时候生成的页面中的JavaScript代码才有可能得到所谓jsp的数据。同样的,只有把 JavaScript里的数据提交给后端JSP代码, JSP程序中才能得到 JavaScript的数据。 
那如何实现在页面的JavaScript中使用jsp中的数据或是在jsp中使用页面的JavaScript数据呢? 
一、页面中的JavaScript的数据如何提交给后台的jsp程序 
① 可以将JavaScript的数据以xxx.JSP?var1=aaa&var2=bbb的形式作为URL的参数传给JSP程序,此时在jsp中用 
<%String strVar1=request.getParameter("var1");%>就可以获取到JavaScript脚本传递过来的数据;                                                 
② 使用JavaScript通过在表单里加入隐藏域信息,然后用表单提交的方式把数据传递给JSP程序。 
参考下面的脚本: 
<script language="JavaScript"> 
/*************************************************************** 
* JavaScript脚本,放置在页面中的任何位置都可以 
* insertclick()函数获取JSP传递到页面中的变量varMC, 
* 然后就可以在JavaScript中修改这个变量的值,再通过 
* post的方式提交给JSP程序来使用。 
***************************************************************/ 
function insertclick(){ 
var1 = document.all.mc.value; //获取页面form中的变量值 
var1 = var1 + "名称"; 
document.insertForm.submit(); 
</script> 
<!-- html页面form表单,放置在html页面中的位置不限 --> 
<form name="insertForm" method="post" action="yourJSP"> 
<!-- 下面这一句是获取JSP程序中传递过来的变量值 --> 
<input type="hidden" name="mc" value="<%=varMC%>"> 
<input type="button" value="提交" οnclick="insertclick()"> 
</form> 

二、页面中的JavaScript的数据如何使用后台的JSP程序的数据 
这个比较简单,直接在JavaScript脚本中用<%=strVar1%>就可以把jsp程序中的数据传递给JavaScript脚本使用了。
 
比较常用的是用脚本表达式赋值给一个JS变量,但这种情况当表达式的内容中含有特殊字符(如:“‘ \r  \n 等等)时JS会解析错误而不能往下执行。原因:比如内容中有双引号时,会与最外面的包含表达式的双引号产生混淆,会产生引号不配对的情况,就报错JS执行终断,再比如:如果表达式中有 \r时,JS变量获得的值不在同一行,这时JS也是不能往往下执行的,形如:若表达式内容为:abcdef\rghilm
var  serverToPage = "<%=request.getAttribute("showContent ") %>";
如果表达式中有回车,则实际页面的情况是:
var  serverToPage = "abcdef
 
ghilm";
所以就报错了,中断了执行。但可以用以下第二种方法处理有特殊字符的情况。
1.用脚本表达式赋值给一个JS变量:应将表达式用双引号括起来如:

<script  type="text/javascript">

var string = "<%=request.getAttribute("userName") %>"
而在脚本中声明的不须要引号:
<%! String name = "sasa" %>
<script type="text/javascript">
   function land(){
      var aaa="<%=request.getAttribute("userName")%>";   当userName为空时判断其为空如:if(aaa=="null"){//...}  
      var bbb="${userName }" ;   //作用域中的均要用引号,否则取不出来 如:"${userName }"
      var ccc=<%=name %>;    //而在脚本中声明的不须要引号:
      alert(aaa);
      alert(bbb);
      alert(ccc);
   }
   </script>
2.先将表达式的值显示在一个隐藏的HTML标签中如:<div></div>,<h></h>等。然后再用JS代码从隐藏标签中取值,显示在最终目地地。
index.jsp页面:
  <body>
   <form action="txtServlet" method="post">
     <textarea rows="10" cols="30" name="txtContent" ></textarea>
     <textarea rows="10" cols="30" id="showContent"></textarea>
     <h1 id="txtTemp" style="display:none">content:<%=request.getSession().getAttribute("contentString") %></h1>
     <input type="submit"  value="提交"/>
    </form>
  </body>
</html>
<script type="text/javascript">
  var node = document.getElementById("showContent");
  var tempNode = document.getElementById("txtTemp");
  node.value = tempNode.innerHTML;
</script>
txtServlet代码:
        String txtString = request.getParameter("txtContent");
        request.getSession().setAttribute("contentString", txtString);
        response.sendRedirect("index.jsp");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值