Servlet和Jsp页面数据交互一:EL表达式和JAVA脚本
作者:强哥   类别:Web前端    日期:2017-12-08 16:12:39    阅读:2861 次   消耗积分:0 分


应部分学员要求,我把JAVA-WEB开发中常用的传值(servlet和jsp页面之间)和取值方式整理汇总。由于知识点较多,就选择连载的形式总结,这些文章是站在应用层面角度上分析和举例,所以没有追究底层代码。首先举例介绍从servlet向jsp页面传值和在jsp页面取值的情况。前端控制器Servlet接收和处理面提交的请求,在请求派发之前,一般会把页面需要展示或者处理的数据存放在HttpServletRequest的对象里面(一般对象名为request,在此举例也使用该名称)或者HttpSession对象里面。到底选择使用哪个对象,首先我们考虑是否满足需求,其次选择维护时间段的。大多数情况下使用request对象,因为它只在一个请求中有效,而session作用范围是一个会话,也因为如此,session经常用来做状态跟踪。。。下面使用request举例,其中涉及到EL表达式和JAVA脚本(新建Servlet和jsp文件、web.xml文件配置的步骤省略)。

 情况一:Servlet需要给页面传多个值,且这些值需要在页面显示。Servlet代码片段如下:int id = 20;

String userCode = "wnxy";  //要传到jsp页面上的值
String userName = "蜗牛学院";  //需要显示在页面上的值
request.setAttribute("id", id);
request.setAttribute("code", userCode);  //把值存储到reques对象中
request.setAttribute("name", userName);
request.getRequestDispatcher("jspPage/test.jsp").forward(request, response);

Jsp页面中使用EL表达式${attrName }的方式取值,attrName 表示Servlet中设置属性名称。以下是代码片段举例使用EL表达式取值并显示在页面:   

<table border="1"><tr>
<td> 编号:</td>
<td> ${id }</td>
</tr>
<tr>
<td> 用户编码:</td>
<td> ${code }</td>
</tr>
<tr>
<td> 用户名称:</td>
<td> ${name }</td>
</tr>
</table>

(Jsp代码片段结束)。EL表达式${attrName }的方式,可以把request对象里面某一个属性名对应的值赋给页面上的元素,比如把name属性对应的值赋值给一个input输入框。赋值方式:<input type="text" id="uName" value="${name }" />。除了使用上述方式外,还可以使用java脚本的方式取出request对象中的值,下面对其举例说明。<tr>
<td> 编辑名称:</td>
<% String userName = (String)request.getAttribute("name"); %>
<td> <input type="text" id="uName" value="<%=userName %>" /></td>
</tr>(举例代码片段结束)。该例中,先在java脚本中把request对象中name属性对应的值取出来,并赋值给String 类型的引用变量userName,然后把取出的值赋给页面元素。对比上面两种取值和赋值方式,EL表达式显得更简洁,在此建议大家尽量使用EL表达式。值得注意的是上面两种赋值的方式对下拉框是无效的,也就是说给下拉框的value属性赋值后,它显示的选项并不会是我们想要的一个结果。对下拉框赋值可以使用body标签的onLoad事件来完成。有些时候我们不想把Servlet传到页面上的值显示出来,但是页面中又需要,那就把这个值放在隐藏元素里面吧。隐藏元素的写法:<input type="hidden" id="uName" value="${attrName }" />。

在很多情况下,会把页面显示数据封装到一个javaBean中,然后再整个JavaBean的对象存在request对象中。接下来就介绍在jsp页面中取对象的属性值。

情况二:jsp页面中取单个对象的属性值。Servlet中使用request存放对象的方式和第一种情况的方式一样,这里不再赘述。现在我们是用Users对象举例,该对象定义如下:

public class Users {
    private Integer id;
    private String code; // 账号
    private String pass; // 密码   (get和set方法略去)}。在Servlet的service方法中实例Users对象并设置属性的值。代码片段:Users user = new Users();
    user.setId(10);
    user.setCode("wnxy");
    user.setPass("123456");
    request.setAttribute("user", user);
    request.getRequestDispatcher("jspPage/test.jsp").forward(request, response); 
}

(代码片段结束)。

在Jsp页面使用EL表达式的方式取值:

<tr>
<td> 编号:</td>
<td> ${user.id }</td>
</tr>
<tr>
<td> 用户编码:</td>
<td> ${user.code }</td>
</tr>
<tr>
<td> 用户名称:</td>
<td> ${user.pass }</td>
</tr>

(代码片段结束)。如果Users类定义了嵌套属性,EL表达式同样是有效的。另外,在jsp页面上可以使用java脚本来取Servlet传过来的对象,前提是已经在该jsp页面引入了Users类(引入方式:<%@ page language="java" import="wnxy.javaweb.demo.dao.po.*" %>)。代码片段如下:

<% Users user = (Users)request.getAttribute("user");%>
<tr>
<td> 编号:</td>
<td> <%=user.getId() %></td>
</tr>
<tr>
<td> 用户编码:</td>
<td> <%=user.getCode() %></td>
</tr>
<tr>
<td> 用户名称:</td>
<td> <%=user.getPass() %></td>
</tr>

(代码片段结束)。

这篇文章中值得注意的点有EL表达式、隐藏元素、java脚本。下期博客会讲解使用JSTL标签和JAVA脚本取集合对象和显示集合元素。

 


蜗牛学院,只为成就更好的你!

你!敢不敢!用你三个月的时间,换你不一样的未来!

赶快关注蜗牛学院官方微信,了解更多信息吧!

20181009_153045_341.jpg


   
版权所有,转载本站文章请注明出处:蜗牛笔记, http://www.woniunote.com/article/14
上一篇: 蜗牛学院企业商业项目——成都乐圈科技有限公司Android端app的软件研发
下一篇: 热烈欢迎大唐软件技术股份有限公司来蜗牛学院进行招聘宣讲会
提示:登录后添加有效评论可享受积分哦!
最新文章
    最多阅读
      特别推荐
      回到顶部