1.简介
一种可以相应客户端请求,而动态生成HTML/XML格式的Web网页的技术标准。JSP在服务器端工作。
JSP页面由HTML代码和迁入本器中的Java代码组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生产的HTML页面返回给客户端浏览器。
JSP集成了Java语言的简单、安全、面向对象、跨平台等特性,JSP应用程序只要编写一次就可以在多个操作系统平台很好地运行,不用对应用程序代码做任何改动。
而且JSP程序只在第一次请求时进行编译,从而大大提高了程序运行的速度。不像ASP等应用程序每次请求都需要编译器重新编译。
2.JSP基本语法
(1)模板元素: HTML或XML
(2)注释:
- HTML/XML注释:用于在客户端显示的一个注释,类似于HTML注释,不同的是这里可以使用表达式。
<!--comment[<%=expression%>]-->
- 隐藏注释:写在JSP程序中,但是不发给用户。
<%--comment--%>
- Scriptlets中的注释:写在JAVA代码中。
//; /** */
(3)脚本元素:
- 声明:声明标记用于在JSP页面中声明成员变量。用来定义在产生的Servlet类中类的属性和方法,全局有效。语法格式:<%! declaration;declaration;...%>.
<%! Int i=1; Context ctx=null; DataSource ds=null; java.sql.Connection con=null; %>
- 表达式:表达式标记用于在JSP页面中使用Java表达式,语法格式:<%=expresion%>.所得结果转换成字符串并与模板元素结合在一起。
<table> <tr> //一行 <td><%=rs.getString(1) %></td> //列 <td><%=rs.getString(2) %></td> </tr> </table>
- Java脚本:<%...%>.
(4)指令元素:
- page指令:用于定义JSP程序的全局属性。除了import外,其他的页面指令不能重复。
<%@ page language="Java" ContentType="text/html;charset=GBK'' import="javax.servlet.jsp.*" //导入JSP页面所需要用到的Java包列表 isErrorPage="true" erroepage="error.jsp" buffer="8KB" autoFlush="true" isThreadSafe="true" %>
- include指令:用于通知容器,将当前JSP页面中指定位置上的资源内容包含进来。被包含的文件内容可以被JSP解析,这种解析发生在JSP文件的编译阶段,一经编译,内容就不可改变。可以将JSP文件、HTML文件、文本文件、inc文件等文件插入到JSP文件中,可以实现将一个复杂的JSP页面分成若干简单的部分。
- taglib指令:允许页面使用者自定义标签。自定义标签是JSP开发中代码复用的一种方式。
<%@taglib uri="taglibURI"prefix="tagPrefix"%>
(5)动作元素:
动作元素在请求处理阶段起作用。
- jsp:param:以“名-值”对的形式为其他标签提供附加信息。和<jsp:include>、<jsp:forward>、<jsp:plugin>一起使用。
<jsp:param name="paramName" value="paramValue"/>
- jsp:forward:允许将请求转发到另一个JSP、Servlet或静态资源文件。请求被转向到的资源必须位于与JSP发送请求相同的上下文环境之中。每当遇到此操作时,就停止执行当前的JSP,转而执行被转发的的资源。
<jsp:forward page="uri">
<jsp:param name="paramName" value="paramValue"/>
...
</jsp:forward>
例子:登录界面。首先在webcontent目录下面建立一个testlogin文件夹。在该文件夹下新建3个jsp文件:login.jsp、checklogin.jsp、success.jsp。
login.jsp
<%@ page language="java" contentType="text/html; charset=gb2312" import="java.util.Date"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>JSP--Login</title> <form action="checklogin.jsp" method="get"> <table> <tr><td>输入用户名:</td> <td><input type="text" name="username" value=<%=request.getParameter("username") %>></td> </tr> <tr><td>输入密码:</td> <td><input type="password" name="password"%>></td> </tr> <tr colspan=2><td><input type="submit" value="login"></td></tr> </table> </form> </head> <body><center> <%=new Date() %> </center> </body> </html>
checklogin.jsp
<%@ page language="java" contentType="text/html; charset=gb2312"%> <!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=gb2312"> <title>Insert title here</title> </head> <body> <%--进行登录检查 --%>> <% String name=request.getParameter("username"); String password=request.getParameter("password"); //if验证通过,forward-->success.jsp //else forward-->login.jsp if(name.equals("admin")&&password.equals("admin")) { %> <jsp:forward page="success.jsp"> <jsp:param name="username" value="<%=name%>"/> </jsp:forward> <% } else { %> <jsp:forward page="login.jsp"> <jsp:param name="username" value="<%=name%>"/> </jsp:forward> <% } %> </body> </html>
success.jsp
<%@ page language="java" contentType="text/html; charset=gb2312"%>
<!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>Insert title here</title>
</head>
<body>
欢迎,<%=request.getParameter("username")%>
</body>
</html>
几个要注意的地方:
- 绝对路径和相对路径问题。如果login.jsp文件放在testweb/webcontent/testlogin文件夹中,转向checklogin.jsp文件时,可以用“/testlogin/checklogin.jsp"来引用,"/"代表login.jsp文件的上下文路径。如果直接用“checklogin.jsp",代表的是当前路径。
- <form action="checklogin.jsp" method="get">为表单标签,action代表把数据传到哪一个文件当中去。
- <jsp:include>:允许在请求时在现成的JSP页面里包含静态或动态资源。被包含的对象只有对JspWriter对象的访问权,并且它不能设置头或者Cookie。如果页面输出是缓冲的,那么缓冲区的刷新要优先于包含的刷新。执行效率比<@%page include%>低,但是可以动态增加内容。
<jsp:include page="filename"flush="true">
<jsp:param name="paramname"value="paramname"/>
...
</jsp:include>
include.jsp文件
<%@ page language="java" contentType="text/html; charset=gb2312"%>
<!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>Insert title here</title>
</head>
<body>
<% double i=Math.random(); %>
<jsp:include page="come.jsp">
<jsp:param name="number" value="<%=i%>"/>
</jsp:include>
</body>
</html>
come.jsp文件
<%@ page language="java" contentType="text/html; charset=gb2312"%> <!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>Insert title here</title> </head> <body> <% String str=request.getParameter("number"); double n=Double.parseDouble(str); %> <p> 您传过来的值是:<br> <%=n %> </body> </html>
- <jsp:useBean>、<jsp:setProperty>、<jsp:getProperty>
- <jsp:plugin>、<jsp:fallback>