<仅供个人复习使用>

1.JSP概述

JSP是Java Server Page缩写,Sun公司推出的一种动态网页技术。同伙将动态代码嵌入到静态HTML(XML)中,从而产生动态输出。
   JSP和Java Servlet一样,在服务器端执行,返回给客户的是HTML文本。
   JSP采用的是Java语言,文件名后缀为:.jsp

2.JSP编程基础

1)JSP注释

  • 发送到客户端的JSP注释方式,里面可以包含Java表达
    式,格式为:
<!-- 注释内容<%=Java表达式 %> -->
  • 不发送到客户端的JSP注释方式,格式为:
<%-- 注释内容<%=Java表达式 %> --%>

2)JSP表达式

作用:将expression的运算结果输出到客户端。
JSP表达式的基本语法:<%=expression %>

3)JSP Scriptlet(脚本块)

多行Java代码,要使用JavaScriptlet实现,格式:
<%
Java code(插入到JSP文件中的Java代码)
%>

举例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		String path = request.getContextPath();
		out.println(path);
		String base = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
		out.print(base+"css/a.css");
	%>
</body>
</html>
  输出:
  /FirstWebProject http://localhost:8800/FirstWebProject/css/a.css

4) JSP声明

在JSP中方法和全局变量的声明应放在JSP声明部分。基本语法:

<%!
 		声明部分(Java变量和方法的代码)
	%>

举例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%!
		int getSum(int data[]){
			int sum = 0;
			if(data.length > 0){
				for(int i=0;i<data.length;i++){
					if(data[i]%5==0)
						sum = sum + data[i];
				}
			}
			return sum;
		}
	%>
	<%
		int data[]= {1,23,4,5,6};
		int sum = getSum(data);
		out.print("该数组元素的和为:" + sum);
	%>
</body>
</html>
输出结果为:
该数组元素的和为:5

3.JSP指令

JSP指令是为JSP引擎而设计的。不会产生任何输出,而只是告诉引擎如何处理JSP页面。
这些指令包含在<%@%>标记中。
指令有三个:page、include和taglib。

3.1 page指令

page指令允许程序员导入需要的类、指明JSP输出的内容类型、控制session等。
  1. import属性:导入需要的类,格式:
<%@ page import=“package.classname” %>
 <%@ page import=“package1.classname” %>
 <%@ page import=“package1.classname,package2.classname”>
  1. contentType和pageEncoding属性:
contentType用来指明JSP输出内容的MIME类型及字符编码方式,指出浏览器通过何种方式处理信息,即服务器发送给客户端浏览器时所见到的网页内容的编码。
 pageEncoding用来指明JSP文件即自身存储时的编码方式。
  1. session属性:控制页面是否需要使用session,属性值:
true---表示页面需要使用session属性,默认值。
 false---表示页面不需要使用session属性。
  1. errorPage和isErrorPage属性:
errorPage: 用来指明在这个JSP页面中出现未被捕获的异常
时,跳转到哪个页面来处理。跳转页面需要使用isErrorPage
属性指明可以用于其他页面的错误处理。
 具体事例:错误处理页面:errorHandle.jsp
  1. buffer和autoFlush属性:
buffer用来指定在使用out内置对象向客户端输出内容时使用的缓冲区大小,默认值8K。
 autoFlush: 是否自动清空输出缓冲区。属性值:
 	true--当缓冲区满时,自动清空输出缓冲区,默认值。
 	false--在缓冲区溢出时会抛出一个异常。
例如:
 <%@ page buffer=“64kb” %>
  1. info属性:
info用来指定对JSP页面的一些说明信息。例如:
 <%@page info=“info的说明信息” %>
  1. 其他不常使用的属性:
 isThreadSafe:是否支持线程
 isELIgnored:是否执行或忽略EL表达式。true-忽略。
 language:使用的脚本语言,目前该属性的值只能是Java.
 extends:一般不用,定义此JSP页面产生的Servlet是继承
哪个父类,默认是HttpJspBase。

3.2 include指令

include指令用于将多个JSP页面组合起来,成为一个完整的JSP页面
格式:<%@ include file="filename" %>

<%@taglib uri=“http://java.sun.com/jsp/” prefix=“c” %>

4.JSP动作

JSP动作是指JSP中利用XML语法格式的标记来控制Servlet容器的行为。例如:动态插入文件、调用JavaBean组件、将用户请求重定向到另外的页面等。

JSP动作包括:

<jsp:include>:
 <jsp:useBean>:
 <jsp:setProperty>:
 <jsp:getProperty>:
 <jsp:forward>:
 <jsp:plugin>: 用于在生成的HTML页面中包含Applet和
 JavaBean对象

4.1 include动作(标签)

include动作用来指定需要包含进来的资源。

语法格式:
 <jsp:include page=“filename” />
 <jsp:include page=“filename”></jsp:include>
可以向被包含的文件中传递参数,通过如下方式:
 <jsp:include page=“includeFile”>
 	<jsp:param name=“paramName” value=“paramValue” /> 
 </jsp:include>
使用HttpServletRequest中的方法: 
 	getParameter(“paramName”)获得。

应用:

*******main.jsp*********************
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<jsp:include page="date.jsp"></jsp:include>
</body>
</html>
**************date.jsp*************
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	今天是<%=new java.util.Date() %>
</body>
</html>

jsp java代码输出值 jsp的输出表达式_java

4.2 forward动作

forward动作用来实现程序的转向。语法格式:
 <jsp:forward page=“forward.jsp” />
包括子元素:
 <jsp:forward page=“orward.jsp”>
 	<jsp:param name=“paramname” value=“paramValue”
 </jsp:forward>

注意:使用forward动作的页面最好不要带任何输出,即:HTML代码、<%=expression%>out.println()等语句

5.JSP 内置对象

5.1 out对象:不能在JSP声明中使用。

此对象等同于 Servlet中的PrintWriter对象。常用方法:
(1) print()/println(): 向客户端输出各种信息。
(2) clear(): 清除缓冲区的内容,若flush则抛出异常。
(3) clearBuffer(): 清除缓冲区当前内容。
(4) flush(): 刷新流,即将流中内容送到客户端,并将流清空。
(5) close(): 关闭输出流,清除所有内容。

5.2 request对象 △

request对象表示请求信息。对应Servlet中的HttpServletRequest

常用方法:
 getParameter(String paraName): 获取指定参数名对应的值。
 Object getAttribute(String name): 获得指定参数对应属性值。
 void setAttribute(Stirng name): 设置指定参数的值。
 void setCharacterEncoding(String env): 设置request的字符
编码

5.3 response对象 △

response对象表示响应信息, 对应Servlet中的
HttpServletResponse

Object getAttribute(String name): 获得指定参数对应属性值。
 void setAttribute(Stirng name): 设置指定参数的值。
 void setCharacterEncoding(String env): 设置response的字
符编码

应用:

<%@ page language="java" import="java.util.Date" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		Date date = new Date();
	    out.print(date);
	    response.setHeader("refresh", "2");
	%>
</body>
</html>
输出:
Sat Apr 16 17:16:00 GMT+08:00 2022

5.4 session对象

session对象用于保存与客户端有关的状态信息,实现同一客户在不同页面之间的数据共享。

session对象常用方法: 
 Object getAttribute(String name): 获得指定参数对应属性值。
 void setAttribute(Stirng name,Object value): 设置指定参数
的值。

应用:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		String sessionID = session.getId();
		session.setAttribute("username", "zhangsan");
		String data = (String)session.getAttribute("username");
	%>
	session00页面中Web服务器分配的sessionID是<%=sessionID %><br>
	session00设置属性值username是<%=data %>
</body>
</html>
输出:
session00页面中Web服务器分配的sessionID是A723D6C100AC07ECC49B9AD6F3DB2EB9
session00设置属性值username是zhangsan

5.5 application对象

application对象表示整个应用的上下文,是实现javax.servlet.ServletContext类对象。
application常用方法: 
 Object getAttribute(String name): 获得指定参数对应属性值。
 void setAttribute(Stirng name,String value): 设置指定参数的值。

应用:

网站访问人数统计实例:【在网站首页实现】

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		Object count = application.getAttribute("count");
		if(count == null){
			Integer n = new Integer(1);
			application.setAttribute("count", n);
		} else {
			int counttemp = Integer.parseInt(count.toString());
			if(session.isNew()){
				counttemp=counttemp+1;
				application.setAttribute("count", counttemp);
			}
		}
	%>
	网站访问人数:<%=application.getAttribute("count") %>
</body>
</html>
ps:
	同一浏览器发出---同一session
	换不同浏览器 --- session会加1

5.6 exception对象

exception表示页面异常,可以获得异常信息。
注意:使用exception对象时,页面中的page指令中的属性:isErrorPage=true;

可以在web.xml中配置整个应用的出错处理页面。web.xml的内容:

jsp java代码输出值 jsp的输出表达式_jsp java代码输出值_02

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		String data[]={"12","23","34"};
		String value = data[3];
		
	%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" isErrorPage="true" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	程序出现了异常:
	<% 
		out.print(exception.getMessage());
		out.print(exception.toString());
	%>
</body>
</html>

输出:

jsp java代码输出值 jsp的输出表达式_eclipse_03

5.7 pageContext对象

pageContext对象可以管理其他8个内置对象,可以通过它获得与JSP内置对象。

6 JSP与Servlet

6.1 关系

JSP第一次执行时,Web服务器会自动将它转换成一个Servlet文件,然后Web服务器进行编译。

6.2 交互

JSP跳转Servlet, 使用jsp:forward实现, 代码如下(doGet)

<body>
	<jsp:forward page="/servlet1">
		<jsp:param value="test123456" name="test" />
	</jsp:forward>
</body>

Servlet跳转JSP, 使用HttpServletRequest类中的getRequestDispatcher(String url)获得RequestDispatcher对象—利用此 对象的forward()方法实现。

jsp java代码输出值 jsp的输出表达式_web_04


jsp java代码输出值 jsp的输出表达式_java_05

7.在JSP中使用JDBC访问数据库

JSP与JDBC综合应用:

  1. 在Tomcat构建数据库连接池
  2. 构建数据库访问类
  3. 利用数据库操作类实现具体的实例

举例:

不调用DBUtil封装类:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div style="text-align:center;">
	<form action="jdbcdemo.jsp" method="post">
		请输入学生姓名:<input type="text" name="sname"/><input type="submit" value="查询" />
	</form><br>
	<table width="600px" border="1" style="border-collapse:collapse;margin:auto;">
		<tr>
			<td>学号</td>
			<td>姓名</td>
			<td>年龄</td>
			<td>地址</td>
		</tr>
		<%
			String sql = "";
			String driverName="com.mysql.cj.jdbc.Driver";
			String url="jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=utf-8";
			String username="root";
			String password="123456";
			Class.forName(driverName);
			Connection conn = DriverManager.getConnection(url,username,password);
			Statement st = conn.createStatement();
			request.setCharacterEncoding("utf-8");
			String sname = request.getParameter("sname");
			if("".equals(sname)){
				sql = "select * from student";
			}else{
				sql = "select * from student where sname='"+sname+"'";
			}
			ResultSet rs = st.executeQuery(sql);
			while(rs.next()){
		%>
		<tr>
			<td><%=rs.getString("sno") %></td>
			<td><%=rs.getString("sname") %></td>
			<td><%=rs.getString("age") %></td>
			<td><%=rs.getString("address") %></td>
		</tr>
		<%} %>
	</table>
</div>
</body>
</html>

调用DBUtil封装类

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@page import="com.tjut.dao.DBUtilT"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div style="text-align:center;">
	<form action="jdbcdemo.jsp" method="post">
		请输入学生姓名:<input type="text" name="sname"/><input type="submit" value="查询" />
	</form><br>
	<table width="600px" border="1" style="border-collapse:collapse;margin:auto;">
		<tr>
			<td>学号</td>
			<td>姓名</td>
			<td>年龄</td>
			<td>地址</td>
		</tr>
		<%
			String sql = "";
			request.setCharacterEncoding("utf-8");
			String sname = request.getParameter("sname");
			if("".equals(sname)){
				sql = "select * from student";
			}else{
				sql = "select * from student where sname=?";
			}
			Object[] args={sname};
			ArrayList<HashMap<String,String>> list = DBUtilT.executeQuery(sql, args);
			for(int i=0;i<list.size();i++){
		%>
		<tr>
			<td><%=list.get(i).get("sno") %></td>
			<td><%=list.get(i).get("sname") %></td>
			<td><%=list.get(i).get("age") %></td>
			<td><%=list.get(i).get("address") %></td>
		</tr>
		<%}%>
	</table>
</div>
</body>
</html>