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>");
%>