前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JSP总结二(动作元素)

JSP总结二(动作元素)

作者头像
爱撒谎的男孩
发布2019-12-31 14:30:47
4550
发布2019-12-31 14:30:47
举报
文章被收录于专栏:码猿技术专栏码猿技术专栏

文章目录

  1. 1. JSP总结二(动作元素)
    1. 1.1.
    2. 1.2.
    3. 1.3.
    4. 1.4. JavaBean的存活范围
      1. 1.4.1. 在page范围
      2. 1.4.2. 在request范围
      3. 1.4.3. 在session范围内
      4. 1.4.4. 在application范围内
      5. 1.4.5. 重要的属性
    5. 1.5. 参考文章

JSP总结二(动作元素)

<jsp:include>

前面介绍了一种指令元素include,那是一种静态包含JSP文件,这个标签是动态包含一个JSP页面,也就是被包含的JSP页面和原JSP将合并在一起,转译为一个Servlet类。这是有一定的局限性的,如变量的定义不能重复。 动态的包含JSP文件即是被包含的JSP和原JSP分别转译为一个Servlet类,这就保证了其中的变量可以重复定义了,因为并不是在一个类中了 <jsp:include page="相对的文件路径"></jsp:include>这种标签转译为Servlet和指令元素include是一样的

代码语言:javascript
复制
<%--动态导入在编译的时候是两个jsp文件各自编译成一个Servlet文件,因此其中的变量是不可以共享的,在当前页面中还是可以定义导入页面定义的变量 --%>
<jsp:include page="form.jsp">
    //定义的param可以在form.jsp中使用request.getParameter(String name)取得其中的值
    <jsp:param value="陈加兵" name="username"/>
    <jsp:param value="123456" name="password"/>
</jsp:include>

<jsp:forward>

这是将请求转发给另外一个JSP或者Servlet文件处理,这个和RequestDispatcher是一样的原理,就是Servlet中转发 //绑定属性,在login.jsp中可以获取 request.setAttribute("username","陈加兵"); //当前页面的请求将会交给login.jsp文件处理 <jsp:forward page='login.jsp'></jsp:forward>

<jsp:useBean>

这个动作元素是用来搭配JavaBean组件的标准标签。 JavaBean必须满足下面的条件:

  • 必须实现Java.io.Serializable接口
  • 没有公开的(public)类变量
  • 具有无参构造函数(默认的都有)
  • 具有公开的设置方法(setter)与取值方法(getter

下面就是一个JavaBean组件

代码语言:javascript
复制
package com;

import java.io.Serializable;

public class Person implements Serializable {

    //这里的变量的值一定要和表单的中的name属性的值一样,否则不能获取
	private String username;
	private String password;
	private int age;

	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;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	
	public Boolean Checkout(){
		return "陈加兵".equals(username)&&"123456".equals(password);
	}

}

使用JavaBean的目的是减少Scriptlet的使用。其中搭配<jsp:useBean>来使用这个JavaBean,并且使用<jsp:setProperty><jsp:getProperty>javaBean进行设值与取值 注意javaBean一定要搭配表单使用,因为设值的值其实是隐式的调用request.getParameter(String name)来获取表单的值 下面是一个登录的表单(注意这里的input中的name属性的值一定要和JavaBean组件类的成员变量的名字一样)

代码语言:javascript
复制
<%@ 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>Insert title here</title>
</head>
<body>

<!--提交给Demo1.jsp处理,下面就实现Demo1.jsp-->
<form action="Demo1.jsp">
	<label>姓名:</label>
	<input type="text" name="username">
	<label>密码:</label>
	<input type="password" name="password">
	<input type="submit" value="提交">
</form>

</body>
</html>

下面我们写一个JSP文件设置JavaBean

代码语言:javascript
复制
<%@ 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>Insert title here</title>
</head>
<body>

	<%--使用JavaBean person是Person创建的对象,相当于 Person person=new Person() 
		其中class是JavaBean的类所在的路径(在com包下的Person文件中)
		id就是相当于创建的对象
	--%>
	<jsp:useBean id="person" class="com.Person"></jsp:useBean>
	
	<%--为username和password设置值,相当于下面的语句
	person.setUsername(request.getParameter("username"));
	person.setPassword(request.getParameter("password"));
	JavaBean中的变量一定要和表单中的值一样,否则就不能对应,出现错误 
	其中name就是指定上面的id,即是使用的对象,property就是指定变量
	--%>
	
	<jsp:setProperty property="uesrname" name="person"/>
	<jsp:setProperty property="password" name="person"/>
	
	<%--age是另外的变量,并没有对应着表单的name属性,因此我们可以单独的为其设置值,使用value实行即可设置,这里不必考虑类型,因为在内部会自动转换成JavaBean中的类型 --%>
	<jsp:setProperty property="age" name="person" value="20"/>
	
	<%--获取设置的值,相当于下面的语句:
		person.getUsername();
		person.getPassword();
		person.getAge();
	 --%>
	<h1><jsp:getProperty property="username" name="person" /></h1>
	<h1><jsp:getProperty property="password" name="person" /></h1>
	<h1><jsp:getProperty property="age" name="person" /></h1>

</body>
</html>

其实我们还可以不但可以将表单中的值赋值给变量,还可以使用valueparam自己设置

代码语言:javascript
复制
<%-- 将请求的url中的password的值赋值给username,注意这里的使用的get的请求的话,提交的时候url会有请求值的
		http://localhost:8080/web2/JSP/Demo1.jsp?username=%E9%99%88%E5%8A%A0%E5%85%B5&password=123456
	 --%>
	<jsp:setProperty property="username" name="person" param="password"/>
    
    <%--age是另外的变量,并没有对应着表单的name属性,因此我们可以单独的为其设置值,使用value实行即可设置,这里不必考虑类型,因为在内部会自动转换成JavaBean中的类型 --%>
	<jsp:setProperty property="age" name="person" value="20"/>

JavaBean的存活范围

Scope属性决定了javabean对象的存在的范围。可选值有:

  1. page(默认值)
  2. request
  3. session
  4. application
代码语言:javascript
复制
<jsp:useBean id="person" class="com.anllin.bean.Person" scope="page"></jsp:useBean>

在page范围

客户每次请求访问jsp页面时,都会创建一个javabean对象。JavaBean对象的有效范围就是当前的jsp文件中,如果不在当前Jsp中,那么就不可以使用该JavaBean对象中设置的值 比如使用forward转发给另外一个JSP文件,那么此时就会再创建一个JavaBean对象,原来页面的JavaBean对象并没有传过来,也就不能使用其中的值,这个和变量的共享是一个道理的,这个JavaBean对象只能在当前的Jsp文件中调用,不能实现共享

在request范围

客户每次请求访问jsp页面时,都会创建新的javabean对象。有效范围为:

  • 客户请求访问的当前jsp网页。
  • 和当前网页共享一个客户请求的网页,即当前jsp网页中<%@include %>指令以及<forward>标记包含的其他jsp文件,也就是转发和包含的Jsp文件也是可以共享这个JavaBean对象的,这个和Servlet中的request是一样的,一旦转发了,就可以通过setAttribute()设置属性,那么在转发的页面中就可以访问这个属性
  • 当所有共享同一个客户请求的jsp页面执行完毕并向客户端发加响应时,javabean对象结束生命周期。
  • javabean对象作为属性保存在httpServletRequest对象中,属性名javabean的id,属性值为javabean对象,因此可以通过HttpRequest.getAttribute()方法取得javabean对象
代码语言:javascript
复制
    //Demo1.jsp文件  表单请求提交的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>Insert title here</title>
    </head>
    <body>
    
    <%--设置scope属性为request,这个是必须的,这里的JavaBean对象为person--%>
	<jsp:useBean id="person" class="com.Person" scope="request"></jsp:useBean>
	
	<jsp:setProperty property="uesrname" name="person"/>
	<jsp:setProperty property="password" name="person"/>
	
	<jsp:setProperty property="age" name="person" value="20"/>
> 
e    
    <%--转发请求到Demo2.jsp文件中,那么就可以在Demo.jsp中共享person对象了--%>
    <jsp:forward page="Demo2.jsp"></jsp:forward>

</body>
</html>


//Demo2.jsp


    <%@page import="com.Person"%>
    <%@ 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>Insert title here</title>
    </head>
    <body>
    
    <%-- 使用JavaBean,这里的scope是必须的,一定要和Demo1.jsp一样,id也要一样 --%>
    <jsp:useBean id="person" class="com.Person" scope="request"></jsp:useBean>


    <%--获取username的值 --%>
    <jsp:getProperty property="username" name="person"/>

    <%
        //使用HttpServletRequest获取对象person
        Person p=(Person)request.getAttribute("person");
        out.println(p.getUsername());  //获取username的值
    %>

    </body>
    </html>

在session范围内

  • 我们知道HttpSession是可以在会话期间实现数据共享的,只要是同一个项目中的Jsp文件都是可以共享这个JavaBean对象,但是并不是永久的,因为会话也是有时间限制的,
  • javabean对象作为属性保存在HttpSession对象中,属性名为javabean的id,属性值为javabean对象。除了可以通过javabean的id直接引用javabean对象外,也可以通过HttpSession.getAttribute()方法取得javabean对象
  • 一定要注意在每一个<jsp:useBean>中都要写上scope="session"

在application范围内

  • 我们知道ServletContext存在于整个web应用的生命周期,这个不像session,一旦设置的会话时间结束,那么就不存在了,这个是永远存在的,只要web程序在继续
  • javabean对象作为属性保存在application对象中,属性名为javabean的id,属性值为javabean对象,除了可以通过javabean的id直接引用对象外,也可以通过javabean的application.getAttribute()方法取得javabean对象

重要的属性

其实不仅仅可以对于表单中请求可以转换为对象的值,上面我们说过了存活范围,其实只要在这个请求范围内,并且将对象绑定到响应的属性上面,那么就可以在jsp文件中使用改标签接收其值。 其实一般在表单提交之后,我们会使用Sevlet文件验证是否密码和用户名正确,那么就不是直接提交给jsp文件,此时就像上面说过的,不影响标签的使用,只要将JavaBean对象绑定到响应范围的属性上,便是可以实现对象的共享,代码如下: ServletDemo文件

代码语言:javascript
复制
package com;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletDemo extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//创建对象,并且设置值
			Person person=new Person();
			person.setUsername("陈加兵");
			person.setPassword("123456");
			
			//将JavaBean对象绑定到request上,相当于存活范围为request
			//注意这里的键值一定要是和对象的名称一样,否则不行
			request.setAttribute("person", person);
			//转发请求到jsp文件,下面我们就将在jsp文件中使用JavaBean标签接收
			RequestDispatcher dispatcher=request.getRequestDispatcher("JSP/demo1.jsp");
			dispatcher.forward(request, response);
	}

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

	}

	
}

demo1.jsp:上面文件转发过来的,接收JavaBean对象

代码语言:javascript
复制
<%@ 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>Insert title here</title>
</head>
<body>

<%-- 使用标签接收转发过来的JavaBean对象,scope一定要设置为request,id就是传过来的对象,一定要和前面的名称一样,下面的语句相当于:
	Person person=(Person)request.getAttribute("person");
 --%>
<jsp:useBean id="person" class="com.Person" scope="request"></jsp:useBean>

<h1><jsp:getProperty property="username" name="person"/></h1>
</body>
</html>

参考文章

http://www.cnblogs.com/zfc2201/archive/2011/08/17/2143615.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-09-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • JSP总结二(动作元素)
    • <jsp:include>
      • <jsp:forward>
        • <jsp:useBean>
          • JavaBean的存活范围
            • 在page范围
            • 在request范围
            • 在session范围内
            • 在application范围内
            • 重要的属性
          • 参考文章
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档