JSP笔记
行为元素
<jsp:useBean>
<jsp:useBean>行为元素的作用是使一个JavaBean组件在该页可用,使用这个动作,可以动态使用 javabean组件来扩充JSP的功能
<jsp:useBean>首先会尝试定位Bean实例,在 scope属性指定的作用域使用指定的名称
(id属性值)定位Bean对象,如果其不存在,则依据class名称(class属性指定)或序列化模板
(beanName)属性指定)进行实例化
语法格式:
<jsp:useBean id = "name" scope="page|request|session|application" class=" className "/>
1,id="name"一个用来标识定位作用域的变量。可以在JSP文件的表达式或小脚本应
用程序中使用该变量名称。该名称大小写敏感,必须符合JSP页面中脚本语言的命名规则
假如使用的是Java语言,则该名称遵守的是Java命名规范。假如该Bean对象已由其它
<jsp:useBean>元素创建,则该值必须和实例化该Bcan对象的<< jsp:usebean>>元素id属性值一
致,才能实现定位到该Bean对象。
2.scope=“page I request I session I application”.Bean对象存在的作用范围默认值为
page.不同作用域解释如下:
(1)page:< <jsp: use Bean>>元素所在JSP页面成其静态包含页面使用该 Javabean对象
直到该项面发送响应回客户端或跳转( forwards)至其它页面。
(2) request:可以在处理同一个请求的任意一个页面使用该 JavaBean对象,直到该页
面发送响应回客户端或产生新的请求。
(3) scssion:可以在同一次会话的任意一个页面使用该 Javabean对象,该 Javabean
对象在整个会话期间一直存在。使用<jsp:useBean>创建 Javabean对象的页面的<%@page%>
指令元素的 session属性值必须设置为true。
首先,先确保之前的java类cap.bean包的Admin.java在哪个项目内。
在该项目下,新建一个新的jsp文件(jspusebean.jsp)。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 下面这行代码的作用相当于:Admin admin=new Admin(),其中指令admin对象的范围为page -->
<jsp:useBean id="admin" scope="page" class="cap.bean.Admin"></jsp:useBean>
<!-- 下面这行代码相当于admin.setUsername("***") 和admin.setPassword("xxxxx) -->
<jsp:setProperty property="*" name="admin"/>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content ="text/html; charset=UTF-8">
<title>jsp usebean的使用</title>
</head>
<body>
用户名:<jsp:getProperty property="username" name="admin"/><br>
密码:<jsp:getProperty property="password" name="admin"/><br>
</body>
</html>
再创建一个JSP文件(input.jsp)来使用<jsp:useBean>行为元素。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content ="text/html; charset=UTF-8">
<title>jsp usebean 的使用</title>
</head>
<body>
<form action="jspusebean.jsp" method = "post">
<input type="text" name="username">
<input type="text" name="password">
<input type ="submit" value = "提交" >
</form>
</body>
</html>
运行结果
JSP对象
JSP对象包括内置对象和非内置对象(需要通过new关键字创建的对象),内置对象就
是可以不加声明和创建就可以在JSP项面脚本、中使用的成员变量,常用的内置对象包括
out对象、 request i对象、 response対象、 session对象,page对象、 application对象、 exception
对象和 config对象等.
out内置对象
out对象能把结果输出到网页上,主要是用来控制管理输出的缓冲区(buffer)和输出流(output stream), out对象用于各种数据的输出,其常用方法及描述如下表所示. out对象被封装为javax.Servlet.jsp.JspWriter接口,通过调用pageContext.getOut()方法可以获取out对象。
out 对象常用方法:
方法 | 描述 |
---|---|
public abstract void clear() | 清除缓冲区的内容,不将数据发送至客户端 |
public abstract void clearBuffer() | 将数据发送至客户端后,清除缓冲区中的内容 |
bublic abstarct void close() | 关闭输出流 |
bublic abstarct void flush() | 输出缓冲区的数据 |
public int getBufferSize() | 取缓冲区的大小。缓冲区大小可以用<%@ page buffer=“size” %>设置 |
public abstract int getRemianning() | 获取缓冲区剩余空间的大小 |
public boolean isAutoFlush() | 获取<%@ page is AutoFlush=“true/flase” %>设置的AutoFlush值 |
public abstract void newLine() | 输出一个换行字符,换一行 |
public abstract void print() | 显示各种数据类型的内容 |
public abstract void println() | 分行显示各种数据类型的内容 |
尝试使用out对象实现输出不同的类型的数据
新建一个Dvnamic Web Proiect 工程 (hello_4),在工程下新建jsp文件(out.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 设置缓冲区大小为8kb -->
<%@ page buffer = "8kb" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>out内置对象的使用</title>
</head>
<body>
<%
out.println("打印出字符数组");
out.println(new char[]{'c','h','a','r'});
out.println("<br>");
out.println("打印双精度数");
out.println(12.6);
out.println("<br>");
out.println("打印单精度数");
out.println(12.6f);
out.println("<br>");
out.println("打印BufferSize的大小");
out.println(out.getBufferSize());
%>
</body>
</html>
运行结果
由此可见,我们成果打印出了3种不同类型的数据,并且成果输出了我们设置的缓冲区的大小。
request
本次学习的是request内置对象的使用方法,包含解决中文乱码的办法
request.jsp的编码是UTF-8,Java默认的编码是Unicode,需要在处理接收参数前进行编码设置,以解决中文乱码问题
在工程中新建一个jsp文件(request.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>request对象的使用</title>
</head>
<body>
<form action="handle1.jsp" method="post">
<input type="text" name="username">
<input type="submit" value="提交">
</form>
</body>
</html>
新建一个新的jsp文件(handle1.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>request 内置对象的使用</title>
</head>
<body>
<%
Stringusername = request.getParameter("username");
%>
欢迎:<%=username %>的到来
</body>
</html>
运行request.jsp文件
运行结果
从上面结果可以看到,我们提交非中文时是一切正常的,但是,当我们提交中文时,便会出现乱码
所以,为了解决乱码,我们需要重新进行编码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>request 内置对象的使用</title>
</head>
<body>
<%
//第一步设置request的字符为utf-8
request.setCharacterEncoding("utf-8");
//第二部设置响应的内容类型为text/html;charset=UTF-8
response.setContentType("text/html; charset=UTF-8");
//第三步,将request.getParameter("username")的值通过String的构造器重新构造
String str = request.getParameter("username");
String username = new String(str);
//String username = new String(request.getParameter("username"));
%>
欢迎:<%=username %>的到来
</body>
</html>
重新运行
运行结果:
可以看到,乱码问题解决了,而其中第三步重新构造的步骤是可以直接简化成一句来简化代码
String username = new String(request.getParameter("username"));