java_web 复习 2 jsp 与 servlet (2)
jsp JavaServer Pages
• 在传统的网页HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP标签,就构成了JSP网页
•Java程序片段可以操纵数据库、重新定向网页以及发送E-mail等,实现建立动态网站所需要的功能。
• 所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,这样大大降低了对客户浏览器的要求,即使客户浏览器端不支持Java,也可以访问JSP网页。JSP文件的基本结构
<%@ page contentType="text/html;charset=gb2312" %> <%@ page import="java.util.*“ %> ... <HTML> <BODY> 其他 HTML 语言 <% 符合JAVA 语法的 JAVA 语句 %> 其他 HTML 语言 </BODY> </HTML>
jsp servlet 对比
jsp
<%@ page import="java.util.*" %> <%@ page contentType="text/htm charset=gb2312" %> <HTML> <BODY> 你好,今天是 <% Date today=new Date(); %> <%=today.getDate()%>号, 星期<%=today.getDay()%> </BODY> </HTML>
servlet
import java.util.*; response.setContentType("text/html; charset=gb2312"); out = pageContext.getOut(); out.write(“\r\n\r\n<HTML>\r\n <BODY>\r\n你好,今天是\r\n"); Date today=new Date(); out.print(today.getDate()); out.write("号,星期"); out.print(today.getDay()); out.write(" \r\n </BODY>\r\n</HTML>\r\n ")
JSP原始代码中包含了JSP元素和Template(模板)data两类 Template data指的是JSP引擎不处理的部分,即标记<%……%>以外的部分,例如代码中的HTML的内容等 ,这些数据会直接传送到客户端的浏览器 JSP元素则是指将由JSP引擎直接处理的部分,这一部分必须符合JAVA语法,否则会导致编译错误。
JSP语法分为三种不同的类型
编译器指令(DIRECTIVE) 例如: <%@ page import=“java.io.*” %> 脚本语法(SCRIPTING) – “HTML注释”:<!— comments -->
“隐藏注释”:<%-- comments --%>
“声明”:<%! 声明; [声明; ] ... %> “表达式”: <%= 表达式 %> 后面不许加分号
“脚本段”:<% 代码 %> 后面要加分号动作语法(ACTION) 例如: <jsp:forward>,<jsp:getProperty>,<jsp:include>
编译器指令包括“包含指令”, “页指令”和“taglib指令” 它们包含在“<%@ %>”卷标里。两个主要的指令是page与include。
include指令:向当前页中插入一个静态文件的内容。 JSP 语法格式如下: <%@ include file="relativeURL" %> 或 <%@ include file="相对位置" %>
<html> <head> <title>test</title> </head> <body bgcolor="white"> <font color="blue"> The current date and time are <%@ include file=“peixun2.6.1.jsp" %> </font> </body> </html>
<%@ page import="java.util.*" %> <%=(new java.util.Date() ).toLocaleString() %>
<%@page language="java" import="java.util.*,java.io.*" pageencoding="utf-8"%>表示当前页面的指 令,当前的页面所使用的语言为java 导入了java.util包 使用的编码格式是utf-8;
使用声明定义变量的时候<%! int a = 1;%> 转化为servlet的时候 转化为 成员变量 使用脚本段<% int a = 1;%>定义变量的时候转化为的是局部变量,一般都使用脚本段 不使用声明主要是因为servlet并发问题
对于servlet是单实例的,当被加载到内存中的时候就不会再生产同一个servlet对象了
JSP声明的格式: <%! int a = 3;%>,脚本段的形式: <% int b = 3;%>,当服务器将 JSP 转换为 Servlet 时,会将 JSP 中的声明转换为类的成员变量,而将脚本段转换为方法中的局部变量,Servlet 是单实例的,这样成员变量的值就只有一个,每个用户都会访问到它,而脚本段中的值则是局部变量,每个用户访问的时候各有一份,互不影响。
转义符: 双引号 \“ ,单引号\’,反斜杠\\,回车\r,换行\n,制表符\t,退格 \b
动作语法包括<jsp:forward>,<jsp:include>,<jsp:getProperty>,<jsp:setProperty>和<jsp:useBean>。
<jsp:forward page={"relativeURL" | "<%= expression %>"} />
这里是一个表达式或是一个字符串用于说明你将要定向的文件或URL。这个文件可以是JSP,或程序段
<jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" />
向一个动态文件发送一个或多个参数,这个文件必须是动态文件。如果想传递多个参数,可以在一个JSP文件中使用多个“<jsp:param>”;“name”指定参数名,“value”指定参数值。
“<jsp:forward>”标签从一个JSP文件向另一个文件传递一个包含用户请求的request对象。“<jsp:forward>”标签以后的代码,将不能执行。
<%@ page contentType="text/html;charset=gb2312" %> <html> <head> <title>test</title> </head> <body> <jsp:forward page="forwardTo.jsp"> <jsp:param name="userName" value="riso"/> </jsp:forward> </body> </html>
<%@ page contentType="text/html;charset=gb2312" %> <!--forwardTo.jsp--> <% String useName=request.getParameter("userName"); String outStr= "谢谢光临!"; outStr+=useName; out.println(outStr); %>
<jsp:include page="{relativeURL | <%=expression%>}" flush="true" />
page="{relativeURL | <%=expression %>}" 参数为一相对路径,或者是代表相对路径的表达式。
“<jsp:param>”用来传递一个或多个参数到指定的动态文件,能在一个页面中使用多个“<jsp:param>”来传递多个参数,
<html> <head> <title>peixun.2.10.jsp</title> </head> <body> <jsp:include page="peixun2.10.1.jsp" > <jsp:param name="User" value="HiFi King" /> </jsp:include> </body> </html>
peixun2.10.1.jsp
<% String username; username=request.getParameter("User"); out.println("Username is "+username+"<br>"); %>