JavaBean是java的软件组件模型,有点类似于Microsoft的COM组件概念。使用JavaBean的好处是提高代码重复利用性,使功能明确区分,保持代码整洁性,提高代码维护性。在jsp程序中常用语封装事务逻辑和数据库操作等等,可以很好的实现业务逻辑和前端程序的分离,使得系统更具健壮性和灵活性。
JavaBean需要满足如下设计原则:
为公有类提供一个无参公有构造方法属性私有提供属性的getter和setter方法如下为一个典型的JavaBean类
// 公开的类public class Book {// 书籍的相关属性,这里需要设置为私有权限 PRivate String isbn; private String name; private String author;// 共有无参构造函数 public Book(){ }// 所有属性的getter和setter public String getIsbn() { return isbn; } public void setIsbn(String isbn) { this.isbn = isbn; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; }}在JSP中有对JavaBean进行操作的动作,利用这些动作指令,可以提高代码的简洁性和代码复用率。对JavaBean操作的动作指令有如下3个:
<jsp:useBean>
: 寻找或者实例化一个JavaBean<jsp:setProperty>
:设置JavaBean的属性<jsp:getProperty>
:输出JavaBean实例的属性在jsp页面中实例化或者在指定范围内使用JavaBean。
这里的“JavaBean实例的作用范围”有4个值:page、request、session和application。详细的说明看文章最后一个部分。
给已经实例化的JavaBean对象的属性赋值。
该动作一共有四种形式,这里继续用我们上面Book类进行说明。
<!-- 与表单关联 --><jsp:setProperty name="JavaBean实例名" property="*" /><jsp:setProperty name="JavaBean实例名" property="JavaBean属性名" /><!-- 手动赋值 --><jsp:setProperty name="JavaBean实例名" property="JavaBean属性名" value="属性值" /><!-- 与request参数关联 --><jsp:setProperty name="JavaBean实例名" property="属性名" param="request对象中的参数名" />第一种:会将提交到该页面的表单的所有参数名字和JavaBean的所有属性进行一一匹配赋值。 第二种:会将提交到该页面的表单的参数名字和JavaBean的指定属性进行匹配赋值。 第三种:直接手动将value的值赋予指定的JavaBean的指定属性。 第四种:将request中的参数值赋予指定JavaBean的指定参数。request中的参数值并非来自表单参数,而可以来自url链接,如:index.jsp?page=2。这个param名字便是page,其值为2。
该指令可以直接获取指定JavaBean实例对象的指定属性值。
局部变量,在当前页面有效,即当前jsp文件里有效,所以设置scope为page的JavaBean无法从index.jsp传输到single.jsp。可以理解为其与“直接作为普通类使用“的使用方式具有很大的相似性。
局部变量,在一次请求的全过程(浏览器请求 -> 服务器处理 -> 返回响应)有效。这里需要明确的一点是服务器内部转发均属于服务器处理,并不会完成请求(可以看到转发发生时,浏览器的地址栏地址不会发生变化),所以该request范围的变量在一次请求的所有转发中都有效。JSP中的转发有:
<!-- forward动作 --><jsp:forward page="single.jsp" /><!-- Request操作 --><%Request.getRequestDispatch("single.jsp").forward(Request,Response);%>此外,重定向是在服务器返回结果之后浏览器再进行一次请求(可以看到转发发生时,浏览器的地址栏地址发生了变化,表示请求了另一个资源),因此,重定向之后为另一次请求了,request范围的变量在重定向之后无效。常用的重定向为:
<!-- 使用sendRedirect -->response.sendRedirect("single.jsp");<!-- 修改HTTP header的Location属性来重定向 -->String site = "http://blog.csdn.net/donespeak" ;response.setStatus(response.SC_MOVED_TEMPORARILY);response.setHeader("Location", site);用户全局变量,你可以理解为其有效性与session的有效性一致。每当用户访问网站时就会创建一个会话(session),只有在用户关闭浏览器时该会话才会结束。此外,session也会由于超过有效期或者手动删除而失效,对应变量也会因此失效。这里的全局只针对该会话的用户的所有页面,对其他用户无效。这一点区别于下面的application。
应用全局变量,对每个用户每个页面都有效,与application对象的作用范围相同。当应用启动便开始生效,只有应用结束或手动删除该变量,该变量才会失效。
使用useBean标签时,除了实例化对象,还将该对象放入了相应的生存范围中。如果使用直接实例化JavaBean对象的方法时,则需要在脚本中将该对象放入指定scope中。
<%/***** 可以通过相应的set方法将JavaBean实例放入指定scope *****/ // 创建JavaBean对象实例 Book book = new Book(); // 放入page的生存范围中 pageContext.setAttribute("book",book); // 放入request的生存范围中 request.setAttribute("book",book); // 放入session的生存范围中 session.setAttribute("book",book); // 放入application的生存范围中 application.setAttribute("book",book);/******* 可以通过相应的get方法获得放入的JavaBean实例 *******/ // 从page的生存范围中取出 Book book2 = (Book)pageContext.setAttribute("book",book); // 从request的生存范围中取出 Book book2 = (Book)request.setAttribute("book",book); // 从session的生存范围中取出 Book book2 = (Book)session.setAttribute("book",book); // 从application的生存范围中取出 Book book2 = (Book)application.setAttribute("book",book);%>【参考】 回看JSP——jsp:useBean的用法:http://blog.csdn.net/u011024652/article/details/52012435 jsp 的四个作用域 :page、request、session和application的区别:https://my.oschina.net/chape/blog/124128
新闻热点
疑难解答