文章目录
JSP简介
- JSP实质上是一个HTML页面,只不过包含用于产生动态页面内容的Java代码
- JSP可看做Servlet的一种扩展,其在使用前会被编译成Servlet,即Java类
JSP优势
- 开发简单方便:处理表单方面极为方便
- 跨平台:JSP程序可以支持在Java平台上开发运行,Java本身具有跨平台性
- 高效性和高能性:JSP是Servlet的扩展,Java虚拟机为每一个请求创建一个单独的线程,如此系统就能很快地处理请求。同时JSP只会编译一次,首次加载时编译,当一个请求处理结束后,JSP映射的类并不会从内存中删除,而是保存在内存中,下次同样的请求发生时,系统会提供更快地反应速度。
- 成本低:Java开源
JSP基础语法
JSP注释
-
HTML注释
<!-- HTML注释-->
HTML注释的浏览器文件中可以看到 -
JSP注释
<%-- JSP注释 --%>
该注释不会发送给浏览器,在实际应用中JSP中通常会引入Java注释,两者混用。Java注释在脚本中注释,JSP注释在脚本外注释。例如:
<body>
This is my JSP page.
<!-- HTML注释,可在浏览器文件看到 -->
<table align="center">
<tr><td></td><td></td></tr>
</table>
<%-- 该注释是JSP注释,无法在浏览器文件中中看到 --%>
<%
/*
这是java注释
*/
// 这是java注释
%>
</body>
JSP页面中的Java代码
JSP页面中的Java代码包含三种:JSP表达式、JSP声明、JSP小脚本
编写位置:页面任意位置
作用:控制页面中可变内容的产生
JSP声明
用于定义JSP中的变量、方法及静态方法,实际它与Java中定义一个全局变量、共用方法一样,jsp声明部分的变量和方法可以在JSP页面中使用。
语法有两种:
法1:<%! 变量定义/方法定义/类 %>
法2:<jsp:declaration>变量/方法/类定义</jsp:declaration>
(第二种方法已过时)
注意:声明的变量和方法只有在当前的页面中有效
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*" %>
<!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">
<title>JSP声明的例子</title>
</head>
<body>
<h1>JSP声明例子</h1>
<%!
int x,y=60,z; //多个声明,以“;”分割
String name="John";
Date date=new Date();
%>
<%!
int add(int m,int n){ //计算两个数的和
int result=0;
result=m+n;
return result;
}
%>
<%class Circle{
double r;
Circle(double r){
super();
this.r=r;
}
double area(){
return Math.floor(Math.PI*r*r);
}
}
%>
<%
/* 使用声明的方法、变量、类 */
Circle c=new Circle(6);
out.print("半径为6的圆的面积为:"+c.area());
%>
</body>
</html>
JSP表达式
作用:用于将动态信息显示在页面中
合法内容:变量、变量加运算符组成的合法表达式、有返回值的方法
转译成Servlet的规则:在service方法中用out.print语句输出变量、表达式、方法的值
语法有两种:
<%=变量或者表达式 %>
或者
<jsp:expression>变量或者表达式</jsp:expression>
第二种方式很少使用
例如:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*" %>
<!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">
<title>JSP表达式的例子</title>
</head>
<body>
<h1>JSP表达式</h1>
当前时间为:
<%=new Date() %>
</body>
</html>
Java小脚本
转译成Servlet的规则:原封不动地转变成Servlet类的service()方法里的一段代码
语法规则:
<% Java脚本 %>
JSP页面中的指令
语法规则:
<%@指令名 属性=值 %>
常用指令:
- page指令
- include指令
- tablib指令
作用:控制JSP在转译成Servlet类时生成的内容
page指令
作用:用于导包、设置页面属性
例如:
<%-- 导包 --%>
<%@page import=“java.util.*,java.sql.*" %>
<%-- 设置JSP使用的语言,必须设置 --%>
<%@page language=“java” %>
<%-- 设置读取该文件时的编码 --%>
<%@page pageEncoding="UTF-8" %>
其他常用属性:
属性和属性值 | 说明 |
---|---|
session=“true or false” | 限定session对象是否可用,默认为true |
autoFlush=“true or false” | 指明缓冲区域是否自动清除,默认为true |
errorPage=“URL” | 当页面产生异常时跳转的路径 |
isErrorPage=“true or false” | 指定该JSP页面是否为处理异常的页面,true时能用exception对象,默认为false |
contentType=“text/html;charset=UTF-8” | 设定MIME类型和编码属性,编码属性一般为UTF-8,MIME类型还有很多,application/vnd.ms-excel表示Excel电子表格,image/gif表示GIF图像等 |
Extends=“class” | 指明由该JSP页面产生的Servlet所继承的父类 |
… | … |
include指令
作用:在JSP页面转换成Servlet时,能够将其它文件包含进来,可以包含JSP文件也可以包含HTML文件、还可以是.js文件。在标签插入的位置插入其他文件的内容,使其组合成新的JSP页面,然后由JSP引擎翻译成Servlet文件。
通过该语句能方便在每个JSP页面中包含导航栏、版权声明、logo
优点:
- 页面代码可以复用
- JSP页面结构简单清晰易懂,维护也比较简单
用法:
<%@include file="URL" %>
例子:
与标签相关的taglib指令
taglib指令是JSP新增的一个指令,用户可以自定义新的标签在页面中执行
语法:
<%taglib uri=tagliburl prefix"tagPre" %>
其中uri属性用来表示自定义标签库的存放位置,prefix是为了区分不同标签库的标签名,在页面中引用标签以prefix开头,现在比较流行的标签JSTL、EL标签
taglib指令例子:
JSP动作
JSP一共13个动作,其中前三个常用:
<jsp:include>、<jsp:forward>、<jsp:param>、<jsp:plugin>、<jsp:useBean>、<jsp:jspProperty>、<jsp:output>、<jsp:attribute>、<jsp:element>、<jsp:body>、<jsp:params>、<jsp:fallback>、<jsp:setProperty>,
<jsp:include>
动作
语法格式:
<jsp:include page="relative or absolute URL" flush="true or false" />
page属性必选,路径可以是相对路径也可以是绝对路径,该路径不是文件系统的绝对路径,而是以应用系统目录为根目录的绝对路径
flush属性用于指定输出缓存是否转移到被导入的文件中,true:包含在被导入文件中,false:包含在源文件中
例子:
news.jsp文件
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>例子</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
<jsp:include page="news1.html" /></li>
<jsp:include page="news2.html"/></li>
<jsp:include page="news3.html"/></li>
</body>
</html>
news1.html文件
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>news1l.html</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=gbk">
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
</head>
<body>
<center>
<table border="2" width="90%">
<tr>
<th>这是顶部内容</th>
</tr>
</table>
</center>
</body>
</html>
news2.html文件......
news3.html文件......
-
jsp:include动作与include指令的区别:
- include指令中,被包含的文件会同主页一块被编译成一个Servlet类文件,而jsp:include动作包含的文件跟主页会是相对独立的文件,在编译时会被编译成不同的类,因此jsp:inlcude在效率上更慢
- jsp:include是在页面被访问时导入的,而include指令是由JSP引擎在编译时导入的
<jsp:forward>
动作
作用:转发请求到另外一个页面,转发的过程会连同请求的参数数据一起被转发到目标页面中
语法:<jsp:forward page="URL" />
<jsp:param>
动作
<jsp:param>
用来传递参数信息,它经常与其他动作一起使用,如<jsp:include>、<jsp:param>
,用于主页的参数到目标页面。基本语法:
<jsp:param name=“参数名称” value=“参数值” />
jsp:param和jsp:forward结合使用的例子:
main.jsp文件
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%request.setCharacterEncoding("utf-8"); //设定页面传递参数的编码格式%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>主页面</title>
</head>
<body>
<center>
<table>
<tr>
<th>主页面</th>
</tr>
</table>
</center>
<jsp:include page="subPage.jsp">
<jsp:param value="Smith" name="userName"/>
<jsp:param value="10086" name="passwd"/>
<jsp:param value="北京丰台" name="address"/>
</jsp:include>
</body>
</html>
subPage.jsp文件
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String userName= request.getParameter("userName");
String passwd= request.getParameter("passwd");
String address= request.getParameter("address");
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>子页面</title>
</head>
<body>
<center>
<table>
<tr>
<th>子页面:人员信息</th>
</tr>
</table>
</center>
<center>
<table>
<tr>
<td>用户名:<%=userName%></td>
</tr>
<tr>
<td>密 码:<%=passwd%></td>
</tr>
<tr>
<td>用户地址:<%=address%></td>
</tr>
</table>
</center>
</body>
</html>
注意:所有页面的编码格式要统一
jsp:param在jsp:include、jsp:forward中的用法基本一样