首页 > 代码库 > 【读书笔记】《Java Web整合开发实践》第3章 JSP
【读书笔记】《Java Web整合开发实践》第3章 JSP
1. JSP:Java Server Pages
2. JSP注释:<%--注释内容--%>
3. page指令(页面指令):定义JSP页面的全局属性。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
常见属性见下表:
属性 | 定义 |
language=”ScriptLanguage” | 指定JSP Container用什么语言来编译,目前只支持JAVA语言。默认为JAVA |
extends=”className” | 定义此JSP网页产生的Servlet是继承哪个 |
import=”importList” | 定义此JSP网页要使用哪些Java API |
session=”true|false” | 决定此页面是否使用session对象。默认为true |
buffer=”none|size in kb” | 决定输出流(Input stream)是否又缓冲区。默认为8kb |
autoFlush=”true|false” | 决定输出流的缓冲区慢了后是否需要自动清除,缓冲区慢了后会产生异常错误(Exception).默认为true |
isThreadSafe=”true|false” | 是否支持线程。默认为true |
errorPage=”url” | 如果此页发生异常,网页会重新指向一个url |
isErrorPage=”true|false” | 表示此页面是否为错误处理页面。默认为false |
contentType=”text/html;charset=gb2312” | 表示MIME类型和JSP的编码方式。笔者使用例左 |
pageEncoding=”ISO-8859-1” | 编码方式。(笔者已经加入使用的编码) |
isELLgnored=”true|false” | 表示是否在此JSP页面中EL表达式。true则忽略,反之false则支持。默认为false |
4. include文件加载指令,用于在JSP文件中插入一个包含文本或代码的文件。它把文件插入后与原来的JSP文件合并成一个新的JSP页面。被插入的文件可以是一个文本文件,一个HTML文件或一个JSP文件。插入文件的路径,一般不用"/"开头,而使用相对路径。
<%@include file = "被包含文件的地址"%>
例如:
<%@ include file="a.txt"%><%@ include file="a.html"%><%@ include file="a.jsp"%>
5. taglib标签指令,引入标签库并设置标签库前缀。
<%@ taglib uri="tagLibraryURI" prefix="tagPrefix"%>
6. JSP脚本元素:通过JSP脚本元素可以将Java代码嵌入到JTML页面中。所有可执行的Java代码,都可以通过JSP脚本来执行。JSP脚本主要包含:声明语句,表达式,Scriptlets。
(1)JSP声明语句用于声明变量和方法,该变量或方法在整个JSP页面中都有效。
<%! java变量的声明语句%>
例如:
1 <%@ page language="java" contentType="text/html; charset=ISO-8859-1" 2 pageEncoding="ISO-8859-1"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 7 <title>WebProject</title> 8 </head> 9 <%!10 public int a;11 public String printStr(){12 return "JSP method";13 }14 %>15 <body>16 <%17 out.println(printStr());18 %>19 </body>20 </html>
(2)JSP表达式,插入一个表达式,必须能够求值,并且计算结果会以字符串形式发送到客户端显示出来。
<%= 表达式 %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><!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=ISO-8859-1"><title>WebProject</title></head><%! String str = "JSP expression";%><body> <!-- JSP expression --> <%= str %></body></html>
(3)JSP Scriptlet是一段Java代码段。在JSP Scriptlet中声明的变量是JSP页面的局部变量,调用JSP Scriptlet时,会为局部变量分配内存空间,调用结束后,释放局部变量占有的内存空间。
<% Java代码 %>
7.<JSP:include>JSP动作元素:当JSP页面运行时才会载入该文件,并不是简单地将被包含文件与JSP页面合并成一个新的JSP页面。
<jsp:include page="relative URL" flush="true|false"/>
page属性:指定被包含文件的url地址,是一个相对路径。
flush属性:指定当缓冲区满时,是否将其清空,默认值是false。
<body> <jsp:include page="hello.txt"></jsp:include> <jsp:include page="hello.jsp"></jsp:include></body>
8. <jsp:forward>页面重定向动作元素:停止当前JSP页面的执行,将客户端请求转交给另一个JSP页面。
<jsp:forward page="转向页面的URL地址"/>
1 <body>2 <%3 System.out.println("跳转前");4 %>5 <jsp:forward page="forward.jsp"></jsp:forward>6 <%7 System.out.println("跳转后");8 %>9 </body>
上述代码中第7行就不会执行了,因为此时页面已经跳转到了forward.jsp。
9. <jsp:param>提供参数的附属动作元素:通常和<jsp:include>,<jsp:forward>和<jsp:plugin>一起使用来传递参数。
<jsp:param name="参数名字" value="指定给param的参数值">
在index.jsp中有如下代码:
<%@ page contentType="text/html; charset=GB2312" %><html><body> <!-- JSP forward --> <jsp:forward page="forward.jsp"> <jsp:param name="username" value="jack"/> <jsp:param name="age" value="27"/> </jsp:forward></body></html>
在跳转的页面forward.jsp中有如下代码:
1 <%@ page contentType="text/html; charset=GB2312" %>2 <html>3 <body>4 <P>USE INFORMATION IS AS FOLLOWS:5 <br>6 <%="User name is "+request.getParameter("username")%> 7 <%="User age is "+request.getParameter("age")%>8 </body>9 </html>
可以看到username和age就从index.jsp页面传到了forward.jsp页面了。
10.JSP内置对象
(1)request对象:获取客户端信息,包含的主要方法如下:
一下的例子显示form表单和reaquest结合用法:
index.jsp
1 <%@ page contentType="text/html; charset=GB2312" %> 2 <html> 3 <head> 4 <title>表单页</title> 5 </head> 6 <body> 7 <form action="forward.jsp" method="post"> 8 <p>用户名<input type="text" name="username"/></p> 9 <br>10 <p>年龄<input type="text" name="age"/></p>11 12 <input type="submit" value="提交"/>13 </form>14 </body>15 </html>
forward.jsp
1 <%@ page contentType="text/html; charset=GB2312" %> 2 <html> 3 <head> 4 <title>receptive page</title> 5 </head> 6 <body> 7 <%request.setCharacterEncoding("gb2312"); %> 8 User name is:<%=request.getParameter("username")%> 9 Age is:<%=request.getParameter("age") %>10 </body>11 </html>
其中第7行是为了防止中文乱码的。
这样forward.jsp就可以从index.jsp页面获取到用户的姓名和年龄了。
如果不知道跳转前的页面有多少个参数,叫什么名字,则可以用 Enumeration params = request.getParameterNames(); 获得所有的参数,再用循环的方法遍历。
(2)response对象
void sendRedict(String url):重定向JSP文件。
与<jsp:forward>动作元素的最大区别在于<jsp:forward>只能在本网站内跳转,而response.sendRedict则可以跳转到任何一个地址的页面。
(3)out对象:向客户端返回信息。
11.JavaBean
JavaBean是用Java语言描述的软件组建模型,是一种特殊的Java类,具有一下几个语法特征:
(1)JavaBean是一个public类
(2)应该包含一个无参的构造方法
(3)JavaBean中属性的获取和设置需要使用标准格式定义的getXxx()方法和setXxx()方法。对于boolean类型的成员变量,可以使用isXxx()来代替。
在JSP中调用JavaBean有3个标准的动作指令:<jsp:useBean>,<jsp:setProperty>,<jsp:getProperty>
JavaBean实现用户登录的DEMO如下:
JavaBean类对应的User.java文件
1 package javabean; 2 public class User { 3 private String username; 4 private String password; 5 6 public void setUsername(String username){ 7 this.username = username; 8 } 9 public String getUsername(){10 return username;11 }12 public void setPassword(String password){13 this.password = password;14 }15 public String getPassword(){16 return password;17 }18 19 }
index.jsp
1 <%@ page contentType="text/html; charset=GB2312" %> 2 <html> 3 <head> 4 <title>表单页</title> 5 </head> 6 <body> 7 <form action="forward.jsp" method="post"> 8 <p>用户名<input type="text" name="username"/></p> 9 <br>10 <p>密码<input type="password" name="password"/></p>11 12 <input type="submit" value="提交"/>13 </form>14 </body>15 </html>
forward.jsp
1 <%@ page contentType="text/html; charset=GB2312" %> 2 <html> 3 <head> 4 <title>User Information</title> 5 </head> 6 <body> 7 <jsp:useBean id="userbean" scope="page" class="javabean.User"/> 8 9 <!-- pass username from request object to username in JavaBean userbean -->10 <jsp:setProperty property="username" name="userbean" param="username"/>11 <jsp:setProperty property="password" name="userbean" param="password"/>12 13 <!-- get username from userbean -->14 Username15 <jsp:getProperty property="username" name="userbean"/><br>16 Password17 <jsp:getProperty property="password" name="userbean"/>18 19 </body>20 </html>
注意User.java这个类文件一定不能放在默认的包里面,要新建一个包把它放进去。
【读书笔记】《Java Web整合开发实践》第3章 JSP