Java Web学习(16):JSP动作元素(一)

一JSP动作元素概述

(1)JSP动作元素简介

与JSP指令元素不同的是,JSP动作元素在请求处理阶段起作用。JSP动作元素是用XML语法写成的。利用JSP动作

可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码。

JSP动作元素(action elements),动作元素为请求处理阶段提供信息。动作元素遵循XML元素的语法,有一个包

含元素名的开始标签,可以有属性、可选的内容、与开始标签匹配的结束标签。

动作元素只有一种语法,它符合XML标准:

<jsp:action_name attribute="value" />

动作元素基本上都是预定义的函数,JSP规范定义了一系列的标准动作,它用JSP作为前缀,可用的标准动作元素

如下:

(2)JSP动作元素常见的属性

所有的动作要素都有两个属性:id属性和scope属性。

1)id属性

id属性是动作元素的唯一标识,可以在JSP页面中引用。动作元素创建的id值可以通过PageContext对象来调

用。这些我们会在下面的实例中进行演示。

2)scope属性

scope属性用于识别动作元素的生命周期。 id属性和scope属性有直接关系,scope属性定义了相关联id对象的

寿命。 scope属性有四个可能的值:page、request、session和application,这是JSP的四个作用域。

(3)JSP动作元素分类

JSP动作元素包含五类:

第一类是与JavaBean有关的,包括3个动作元素:

<jsp:useBean>  <jsp:getProperty>  <jsp:setProperty>

第二类是JSP1.2就开始有的基本元素,包括6个动作元素:

<jsp:include>  <jsp:foward>  <jsp:param>  <jsp:plugin>  <jsp:params>  <jsp:fallback>

第三类是JSP2.0新增加的元素,主要与JSP Document有关,包括6个动作元素:

<jsp:root>  <jsp:declaration>  <jsp:scriptlet>  <jsp:expression> <jsp:text>  <jsp:output>

第四类是JSP2.0新增加的元素,主要是用来动态生成XML元素标签的值,包括3个动作元素:

<jsp:attribute>   <jsp:body>   <jsp:element>

第五类是JSP2.0新增加的元素,主要使用在Tag Filter中,包括2个动作元素:

<jsp:invoke>  <jsp:dobody>

二JavaBean

(1)JavaBean简介

JavaBean就是符合某种特定的规范的Java类。使用JavaBean的好处是解决代码重复编写,减少代码冗余,功能

区分明显,提高了代码的可维护性。

(2)JavaBean设计原则

先使用图示来说明JavaBean的四个设计原则:

1)公有类

JavaBean其实就是Java程序,只不过需要在JSP页面中应用,不定义成public类型的,当不是在同一个包下时(项

目里一般会把JavaBean放在单独的文件夹下,所有不可能在同一包下了)不可以访问。

2)属性私有

定义成私有变量实际上是出于安全性的考虑,把变量封装起来,所以需要public的getter和setter方法访问这些

私有属性。

3)无参的公有构造方法

一般不显式的写出构造方法,那么类都会默认的创建一个无参的公有构造方法,这是为了方便创建类的实例对

象。

4)getter和setter方法

对类的私有属性进行重构,得到这些私有属性的getter和setter方法,为的是获取属性值和设置属性值。

实例:设计一个符合JavaBean设计原则的类

package com.entity;

/**
 * 用户实体类的访问属性是public
 * @author Administrator
 * @date 2016年7月11日
 */
public class Users {
	//私有属性
	private String username;
	private String password;

	//无参构造器
	public Users(){

	}

	//通过重构得到setter和getter方法
	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

}

三JSP页面中使用JavaBean

(1)像使用普通Java类一样,创建JavaBean类实例

实例:在JavaBean项目下的Java Resources目录下创建一个JavaBean类Users,在WebContent目录下创建

index.jsp页面。

JavaBean类Users的代码为如上个例子中创建的Users类。

index.jsp页面源代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- 导入包 -->
<%@ page import="com.entity.Users" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JavaBean实例</title>
</head>
<body>
      <h1>使用普通方式创建JavaBean的实例</h1>
      <hr>
      <%
        Users user = new Users();  //创建JavaBean类的实例user
        user.setUsername("admin");  //设置用户名
        user.setPassword("123456");  //设置密码
      %>
      用户名:<%=user.getUsername() %><br>
      密码:<%=user.getPassword() %><br>
</body>
</html>

运行结果:

(2)在JSP页面中通常使用JSP动作元素使用JavaBean类

1)<jsp:useBean>动作元素

作用:在JSP页面中实例化或者在指定范围内使用JavaBean。<jsp:useBean>动作元素用来加载一个将在JSP页

面中使用的JavaBean。这个功能非常有用,因为它使得我们可以发挥JavaBean组件复用的优势。

最简单的语法为:

<jsp:useBean id="标识符" class="Java类名" scope="作用范围" ></jsp:useBean>

在JavaBean类载入后,我们既可以通过<jsp:setProperty>动作元素和<jsp:getProperty>动作元素来修改和检索Bean的属性。以下是useBean动作元素相关的属性列表:

在给出具体实例前,让我们先来看下<jsp:setProperty>动作元素和<jsp:getProperty>动作元素。

2)<jsp:setProperty>动作元素

<jsp:setProperty>动作元素用来设置已经实例化的Bean对象的属性,有两种用法。首先,你可以在<jsp:setProperty>动作元素的外面(后面)使用<jsp:setProperty>动作元素,如下所示:

<jsp:useBean id="myName" ... ></jsp:useBean>
...
<jsp:setProperty name="myName" property="someProperty" .../>

此时,不管<jsp:setProperty>动作元素是找到了一个现有的Bean类,还是新创建了一个Bean类例,<jsp:setProperty>动作元素都会执行。第二种用法是把<jsp:setProperty>动作元素放入<jsp:useBean>动作元素的内部,如下所示:

<jsp:useBean id="myName" ... >
   ...
   <jsp:setProperty name="myName" property="someProperty" .../>
</jsp:useBean>

此时,<jsp:setProperty>动作元素只有在新建Bean类实例时才会执行,如果是使用现有实例则不执行<jsp:setProperty>动作元素。

<jsp:setProperty>动作元素有下面四个属性,如下表:

3)<jsp:getProperty>动作元素

<jsp:getProperty>动作元素提取指定Bean类属性的值,转换成字符串,然后输出。

语法格式如下:

<jsp:useBean id="myName" ... /><jsp:useBean>
...
<jsp:getProperty name="myName" property="someProperty" .../>

下表是与getProperty相关联的属性:

实例

依然使用上面例子中的JavaBean类Users类。

新建的useBean.jsp页面源代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JavaBean实例</title>
</head>
<body>
      <h1>使用useBean方式创建JavaBean的实例</h1>
      <hr>
      <jsp:useBean id="myUsers" class="com.entity.Users" scope="page"></jsp:useBean>
      
      <!-- 使用setProperty方式来设置用户名和密码 -->
      <jsp:setProperty property="username" name="myUsers" value="admin"/><br>
      <jsp:setProperty property="password" name="myUsers" value="123456"/><br>
      
      <!-- 使用传统的表达式来获取用户名和密码 -->
      用户名:<%=myUsers.getUsername() %><br>
      密码:<%=myUsers.getPassword() %><br>
      
      <hr>
      <!-- 使用getProperty方式来获取用户名和密码 -->
      用户名:<jsp:getProperty property="username" name="myUsers"/><br>
      密码:<jsp:getProperty property="password" name="myUsers"/><br>
</body>
</html>

运行结果:

(3)对于<jsp:setProperty>动作元素的延伸

<jsp:setProperty>动作元素作用:给已经实例化的JavaBean对象的属性赋值,一共有四种形式:


//跟表单关联
<jsp:setProperty name="JavaBean实例名" property="*" />

// 跟表单关联
<jsp:setProperty name="JavaBean实例名" property="JavaBean属性名" />

//手工设置属性值
<jsp:setProperty name="JavaBean实例名" property="JavaBean属性名" value="BeanValue" />

//跟request参数关联
 <jsp:setProperty name="JavaBean实例名" property="propertyName" param="request对象中的参数名" />

实例:

照常使用JavaBean类Users类。

login.jsp页面源代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录页面</title>
</head>
<body>
     <h1>登录表单</h1>
     <hr>
     <form name="loginForm" action="dologin.jsp" method="post">
         <table>
              <tr>
                  <td>用户名:</td>
                  <td><input type="text" name="username" value="" /></td>
              </tr>
              <tr>
                  <td>密码:</td>
                  <td><input type="password" name="password" value="" /></td>
              </tr>
              <tr>
                  <td colspan="2" align="center"><input type="submit" value="登录" /></td>
              </tr>
         </table>
     </form>
</body>
</html>

dologin.jsp页面源代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录页面</title>
</head>
<body>
      <%
        //防止中文乱码
        request.setCharacterEncoding("utf-8"); 
       %>
      <h1>setProperty动作元素的使用</h1>
      <hr>
      <jsp:useBean id="myUsers" class="com.entity.Users" scope="page"></jsp:useBean>
      
      
      <!-- 通过request对象得到属性值 -->
      用户名:<%=request.getParameter("username") %><br>
      密码:<%=request.getParameter("password") %><br>
      
      <hr>
      <!-- 根据表单自动匹配所有属性 -->
      <jsp:setProperty property="*" name="myUsers"/>
      用户名:<%=myUsers.getUsername() %><br>
      密码:<%=myUsers.getPassword() %><br>
      
      <hr>
      <!-- 根据表单匹配部分的属性 -->
      <jsp:setProperty property="username" name="myUsers"/>
      <jsp:setProperty property="password" name="myUsers"/>
      用户名:<%=myUsers.getUsername() %><br>
      密码:<%=myUsers.getPassword() %><br>
      
      <hr>
      <!-- 跟表单无关,通过手动赋值给属性 -->
      <jsp:setProperty property="username" name="myUsers" value="Rose" />
      <jsp:setProperty property="password" name="myUsers" value="888888" />
      用户名:<%=myUsers.getUsername() %><br>
      密码:<%=myUsers.getPassword() %><br>
      
</body>
</html>

运行结果:

对于最后一种我们这样修改:

在login.jsp中的表单中做出如下修改:

在dologin.jsp页面全部注释掉上述代码,重新写入下述代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录页面</title>
</head>
<body>
      <%
            //防止中文乱码
            request.setCharacterEncoding("utf-8"); 
       %>
      <h1>setProperty动作元素的使用</h1>
      <hr>
      <jsp:useBean id="myUsers" class="com.entity.Users" scope="page"></jsp:useBean>
      
      <hr>
      <!-- 通过URL传参数给属性赋值 -->
      <jsp:setProperty property="username" name="myUsers" param="user" />
      <jsp:setProperty property="password" name="myUsers" param="pass" />
      用户名:<%=myUsers.getUsername() %><br>
      密码:<%=myUsers.getPassword() %><br>
      
</body>
</html>

运行后我们输入用户名:李四,密码:123456,最后的结果是:

时间: 07-14

Java Web学习(16):JSP动作元素(一)的相关文章

java web学习笔记-jsp篇

转载自:http://www.cnblogs.com/happyfans/archive/2015/03/17/4343571.html 1.java web简介 1.1静态页面与动态页面   表现形式 所需技术 静态网页 网页内容固定,不会更新 html,css 动态网页 网页内容由程序动态显示,自动更新 html,css,DB,java/c#/php,javascript,xml,主流的动态网页脚本(jsp,asp.net,php) 1.2搭建java web开发环境 jdk1.7+tomc

java web 学习笔记 - jsp用的文件上传组件 SmartUpload

---恢复内容开始--- 1. SmartUpload 此控件在jsp中被广泛的使用,而FileUpload控件主要是用在框架中 2. 如果想要使用,需要在tomcat的lib目录中,将SmartUpload的jar包拷贝进来 3.通过表单上传文件,由于文件动不动就是几百k, 表单的方法必须是post,不可能用get方法进行地址重写. 另外,如果要上传文件的话,需要对表单进行封装 mutipart/form-data 以下是smartupload_demo01.jsp 表单封装之后,无法通过re

Java学习-036-JavaWeb_005 -- JSP 动作标识 - forward

JSP 动作主要作用是根据指定的动作进行相应的处理. 一.param 动作 用来给 HTML 文件和 JSP 文件传递参数的,经常和 forward.include.plugin 动作结合使用,语法格式为:<jsp:param name="username" value="admin"/> 二.forward 动作 forward 动作是用来请求信息转发到另一个页面的,它只有一个 page 属性,语法格式为:<jsp:forward page=&q

Java学习-037-JavaWeb_006 -- JSP 动作标识 - include

这个动作是指在当前的页面中包含一个或多个 JSP 页面或者 HTML 文件,语法:<jsp:include file="../jsp/login.jsp" flush="true"/> 其中,file 为加载文件所在的相对路径,flush 属性设置为 true,则自动刷新加载页面.若加载的文件或网页时需要传递参数,则语法格式如下所示: <jsp:include file="../jsp/login.jsp" flush=&quo

Java学习-038-JavaWeb_007 -- JSP 动作标识 - plugin

plugin 动作时用来在 JSP 页面中加载 Java Applet 或者 JavaBean 组件,语法格式如下所示: <jsp:plugin type="bean|applet"/> [code="classFileName"] [codebase="classFileDirectoryName"] [name="instanceName"] [align="left|top|right|bottom

Java web 学习之旅

java web学习之旅 来公司十天了,感觉已经慢慢地融入了这个环境中,几个学长人都很好,都是在他们帮助下,我才能比较顺利的开始了学习java web的旅途. 来这里学习的第一个阶段是做一个简单的用户管理系统,其实,这对于我这个刚开始接触java web的“新手”来说还是有一点挑战的,所以在最开始制定学习计划的时候,我有意识的把时间拖的比较长,希望我又足够的时间来完成这个项目.而情况却比我想象的要好很多,现在8号我已经完成了,比预期的22号提前了十多天,可能是学习的过程因为有学长的帮助,比较简单

Java Web(3):JSP基础

JSP:Java Server Pages JSP 源代码包含了 JSP 元素和 Template data(<% %>标签以外的部分) JSP 文件最终都会转换成 Servlet 去执行,执行过程: JSP 语法:1.编译器指令:2.脚本语法:3.动作语法 注释: <!-- HTML注释 --> <%-- JSP注释 --%> <!-- <%=new java.util.Date()%> --> 编译器指令:包含在<%@  %>中

[原创]java WEB学习笔记6:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

java web 学习路线

Java Web学习路线   Java分成J2ME(移动应用开发),J2SE(桌面应用开发),J2EE(Web企业级应用),所以Java并不是单机版的,只是面向对象语言.建议如果学习Java体系的话可以这样去学习:   *第一阶段:Java基础,包括Java语法,面向对象特征,常见API,集合框架: *第二阶段:Java界面编程,包括AWT,事件机制,SWING,这个部分也可以跳过,用的时候再看都能来及: *第三阶段:Java API:输入输出,多线程,网络编程,反射注解等,Java的精华部分: