【Head First Servlets and JSP】笔记22:直接从请求到JSP & 获取Person的嵌套属性
直接从请求到JSP,不经过servlet
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
body { font-family:'comic sans ms',sans-serif; }
</style>
</head>
<body>
<form action="TestBean.jsp">
<p>Name:</p>
<p><input type="text" name="userName"></p>
<p>ID#:</p>
<p><input type="text" name="userID"></p>
<p><input type="submit"></p>
</form>
</body>
</html>
我们现在需要在JSP中设置person的属性,
使用Java脚本可以很容易地做到这一点;
<body>
<%-- 这个时候相当创建了一个引用名为 person 新的对象 --%>
<jsp:useBean id="person" type="com.demo.Person" class="com.demo.Employee" />
<%
person.setName(request.getParameter("userName"));
%>
</body>
甚至可以在JSP标准动作标签中插入Java脚本;
<body>
<%-- 这个时候相当创建了一个引用名为 person 新的对象,由于这个bean以前不存在,所以不能省略class! --%>
<jsp:useBean id="person" type="com.demo.Person" class="com.demo.Employee">
<jsp:setProperty name="person" property="name" value="<%= request.getParameter("userName") %>" />
</jsp:useBean>
</body>
不过,不管怎么改,只要用到Java脚本,代码都显得特别冗长~
有没有办法让代码好看一点呢?(想办法除掉JSP中的Java脚本!)
<body>
<%-- 这个时候相当创建了一个引用名为 person 新的对象,由于这个bean以前不存在,所以不能省略class! --%>
<jsp:useBean id="person" type="com.demo.Person" class="com.demo.Employee">
<jsp:setProperty name="person" property="name" param="userName" />
</jsp:useBean>
</body>
JSP标准动作标签的param属性可以很好的解决这个问题,如上所示。
事实上,你甚至不需要手动设置,只需要保证【html中的name】与【JavaBean的property】一致,赋值将自动完成!
<form action="TestBean.jsp">
<p>Name:</p>
<p><input type="text" name="name"></p>
<p>ID#:</p>
<p><input type="text" name="userID"></p>
<p><input type="submit"></p>
</form>
<body>
<%-- 这个时候相当创建了一个引用名为 person 新的对象,由于这个bean以前不存在,所以不能省略class! --%>
<jsp:useBean id="person" type="com.demo.Person" class="com.demo.Employee">
<jsp:setProperty name="person" property="name" />
<%-- 如果请求的参数名与property的值相同,就不需要手动设置这个属性 --%>
</jsp:useBean>
</body>
如果你乐意,还可以更简单~
<form action="TestBean.jsp">
<p>Name:</p>
<p><input type="text" name="name"></p>
<p>ID#:</p>
<p><input type="text" name="empID"></p>
<p><input type="submit"></p>
</form>
<jsp:useBean id="person" type="com.demo.Person" class="com.demo.Employee">
<jsp:setProperty name="person" property="*" />
</jsp:useBean>
ps:不用担心String与int类型不匹配,只要在【String、基本类型】的范畴内,类型转换将自动发生,不过万一得到一个类似于“xds232”的非法输入,那么程序很可能会挂掉,一种解决的办法是在客户端使用JavaScript检查后再发送。
然而,JSP标准动作标记还不是尽善尽美!无脚本的故事还在继续。
获取Person的嵌套属性
创建一个狗类;
package com.demo;
public class Dog {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
给Person类加上狗属性;
package com.demo;
public class Person implements java.io.Serializable {
private String name;
private Dog dog;
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
public Person() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
我们通过一个Servlet把一个狗对象set到Person对象中;
package com.demo; import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException; public class addDog extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Person p = new Person();
p.setName("Jack"); Dog dog = new Dog();
dog.setName("Spike");
p.setDog(dog); req.setAttribute("person", p); RequestDispatcher view = req.getRequestDispatcher("result.jsp");
view.forward(req, resp);
}
}
现在要在JSP页面中获得狗的名字,直接给出代码和运行结果:
<%@ page import="com.demo.Person" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>result</title>
</head>
<body>
<p>Dog Name:</p>
<p>scriptlet out----->>>><%=((Person)request.getAttribute("person")).getDog().getName()%></p>
<jsp:useBean id="person" class="com.demo.Person" scope="request" />
<p>std action out----->>>><jsp:getProperty name="person" property="dog" /></p>
<p>EL out----->>>>${person.dog.name}</p>
</body>
</html>

看来不用脚本要取得狗的名字只能用EL了
【Head First Servlets and JSP】笔记22:直接从请求到JSP & 获取Person的嵌套属性的更多相关文章
- [Java] JSP笔记 - EL、JSTL 常用标签
一. 什么是 EL 语言 表达式语言(EL)是 JSP 2.0 引入的一种计算和输出 Java 对象的简单语言. 二.EL 语言的作用 为了使JSP写起来更加简单.表达式语言的灵感来自于 ECMASc ...
- Ext.Net学习笔记22:Ext.Net Tree 用法详解
Ext.Net学习笔记22:Ext.Net Tree 用法详解 上面的图片是一个简单的树,使用Ext.Net来创建这样的树结构非常简单,代码如下: <ext:TreePanel runat=&q ...
- SQL反模式学习笔记22 伪键洁癖,整理数据
目标:整理数据,使不连续的主键Id数据记录变的连续. 反模式:填充断档的数据空缺. 1.不按照顺序分配编号 在插入新行时,通过遍历表,找到的第一个未分配的主键编号分配给新行,来代替原来自动分配的伪主键 ...
- JAVA自学笔记22
JAVA自学笔记22 1.操作基本数据类型的流 DataInputStream DataOutputStream 数据输出流允许应用程序以适当方式将基本的Java数据类型写入输出流中.然后,应用程序可 ...
- [原创]java WEB学习笔记14:JSP的9 个隐含对象 及 JSP 的基本语法
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- jsp笔记
Jsp Web服务器访问jsp的过程. 如果是第一次访问jsp文件,web服务器会把jsp翻译成一个servlet文件.再将其编译成一个.class文件.然后加载到内存.蓝色的地方也是为什么jav ...
- JSP 笔记
<%@ page contentType="text/html;charset=UTF-8"%> <!-- 字符编码为utf-8,不然会乱码.... --> ...
- web —— jsp笔记
cookies 的使用 1.首先确保客户机上允许使用cookie,一般在浏览器的 隐私 设置项里可以设置. 2.下面给出具体的例子 a)index.jsp中如果没注册过,让游客注册,如果注册了,拿出贮 ...
- jsp笔记总结
第一章 JavaWeb简介 1.什么是Web应用程序 什么是Web应用程序是一种通过Web访问的应用程序.Web应用程序一个最大优点就是用户很容易访问.用户只需要有浏览器即可,不需要再安装其他软件.W ...
随机推荐
- Dynamics CRM 系统自己定义部分的语言翻译
Dynamics CRM 自带语言切换功能,在官网下载所需语言包安装后,在设置语言中就能看到你所加入的语言.勾选要启用的语言应用就可以.再打开系统设置--语言就能看到可更改用户界面语言的显示了. wa ...
- 蓝桥杯 第三届C/C++预赛真题(9) 夺冠概率(手工计算概率)
足球比赛具有一定程度的偶然性,弱队也有战胜强队的可能. 假设有甲.乙.丙.丁四个球队.根据他们过去比赛的成绩,得出每个队与另一个队对阵时取胜的概率表: 甲 乙 丙 丁 甲 - 0.1 0.3 0.5乙 ...
- socket文件权限变更引起crs无法启动故障
Crs无法正常启动,也无法关闭.[root@rac101 ~]# crsctl stop crsStopping resources. This could take several minutes. ...
- Hadoop2的HA安装(high availability):nfs+zookeeper
前面介绍过hadoop的简单安装和FA安装,在这里将介绍几种hadoop2中HA(高可用性)安装,HA技术使hadoop不再存在单点namenode的故障. 先来第一种:nfs+zookeeper H ...
- cygwin下编译zlib源代码
本文介绍在cygwin下编译zlib源代码的方法步骤,这个过程尽管简单,但还是有一些须要注意的地方. zlib源代码下载地址: http://www.zlib.net/ 下载后.解压就会生成zlib- ...
- poj1699(状态压缩dp)
可能没有完全读懂题意. 个人觉得 acca aa 答案应该是4. 然后就是dp了..这题数据量小很多方法都可以,数据也水暴力据说都能过.. 还有就是我竟然没有用扩展kmp优化下... 太无耻了,我是因 ...
- sql查询用nolock
大家在写查询时,为了性能,往往会在表后面加一个nolock,或者是with(nolock),其目的就是查询是不锁定表,从而达到提高查询速度的目的. 什么是并发访问:同一时间有多个用户访问同一资源,并发 ...
- 在window把项目上传到github
作为一个开发者,写博客,上传项目到github好像是不可不会的技能,很多有经验的老司机都会这么建议你.本宝宝第一次要把项目传到github的时候,确实有点蒙蔽,什么鬼,传个东西有必要这么难吗? git ...
- 【Python之路】第十二篇--JavaScript
JavaScript 历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.(客户端执行的语言) Net ...
- Python菜鸟之路:Django 分页
Django的分页没有多少需要说的,有一点需要关注,在自定制分页功能的时候,需要通过python代码来生成每一页的a标签链接,这个时候需要关注一点:默认情况下,为了安全考虑,防范XSS攻击,Djang ...