第3章 JSP技术
3.1 第一个jsp程序(MyEclipse)
3.1.1 实例:编写显示服务器当前时间的jsp
abc.jsp
<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>显示服务器的当前时间</title>
</head>
<body>
<font color="red">
<%
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
out.println(format.format(new Date()));
%>
</font>
</body>
</html>
部署后,运行,显示当前时间
3.1.2 调试JSP程序
略
3.1.3 改变JSP的访问路径和扩展名
web.xml中配置
<servlet>
<servlet-name>jsp</servlet-name>
<jsp-file>/abc.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>/abc.html</url-pattern>
</servlet-mapping>
部署后,运行,显示当前时间
3.1.4 手动发布JSP程序
略
3.2 了解JSP运行原理
3.2.1 了解tomcat处理jsp页过程
略
3.2.2 分析由jsp产生的servlet代码
略
3.3 学习JSP基本语法
3.3.1 学习JSP表达式
<%= jsp表达式%>
3.3.2 实现在JSP页面嵌套代码
<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>显示服务器的当前时间</title>
</head>
<body>
<font color="red">
<%
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
out.println(format.format(new Date()));
%>
</font>
</body>
</html>
- 一个jsp页面中可以再任何位置使用<%...%>插入java代码,<%...%>可以有任意多个
- 每一个<%...%>中的代码可以不完整,但是这个<%...%>中的内容和jsp页面中的一个或多个<%...%>中的内容组合起来必须完整
3.3.3 学习JSP声明
3.3.4 学习JSP表达式(EL)
略
3.3.5 实例:利用EL函数替换HTML中的特殊字符
略
3.3.6 学习JSP页面中的注释
略
3.4 学习JSP指令
3.4.1 了解JSP指令
语法
<%@指令 属性名="值"%>
示例
<%@ page contentType="text/html" %>
<%@ page pageEncoding="UTF-8"%>
也可写成一条指令
<% page contentType="text/html" pageEncoding="UTF-8" %>
3.4.2 JSP指令page
page指令用于设置jsp页面的全局属性,大多数jsp页面中都含义page指令,page指令在JSP2.0规范中的定义如下
<%@ page---------%>使用方式
1、属性:language = "javaScriptLanuage" 默认为Java
2、属性:extends ="ClassName" 主要定义此JSP网页产生的Servlet是继承哪一个父类
3、属性:import = "importList" 主要定义此JSP网页使用那些JAVA API
4、属性:session="true|false" 决定JSP网页是否使用session对象
5、属性:buffer="none | size in kb " 决定输出流(output stream)是否有缓冲区,默认为8KB
6、属性:autoFlush="true | false" 决定输出流的缓冲区是否要自动清除,缓冲区满了会产生异常Exception。默认值为true
7、属性:isThreadSafe ="true | false" 决定是否JSP网页只能请求一个处理SingleThreadModel
8、属性:info = "text" 主要表示此JSP网页的相关信息
9、属性:errorPage = ”error_url“ 表示如果发生异常错误时,网页会被重新指向一个错误页面URL
10、属性:isErrorPage ="true | false" 表示此JSP Page是否处理异常错误的网页
11、属性:contentType ="ctinfo" 表示MIME类型和JSP网页的编码方式
12、属性:pageEncoding ="ctinfo" 表示JSP网页的编码方式
13、属性:isELlgnored ="true | false" 表示是否此JSP网页忽略EL表达式,true将忽视
3.4.3 JSP指令include
语法格式
<% include file="URL"%>
3.5 学习JSP内置对象
3.5.1 内置对象out
用于向客户端输出文本形式的数据
新建out.jsp
<%@page import="java.io.PrintWriter"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page buffer="1kb" %>
<!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=UTF-8">
<title>out对象测试</title>
</head>
<body>
<%
out.clear(); //清除out对象缓冲区的内容
//根据请求参数count的值生成"1",以使其占满缓冲区
int count =Integer.parseInt(request.getParameter("count"));
for(int i=0;i<count;i++){
//通过内置对象out(实际是JspWriter对象)将数据输出到客户端
out.write("1");
}
//通过对象将数据输出到客户端
PrintWriter writer=pageContext.getResponse().getWriter();
writer.write("使用PrintWriter输出对象");
%>
</body>
</html>
项目运行部署后,浏览器访问
浏览器输出
使用PrintWriter输出对象1111111111
3.5.2 内置对象pageContext
- abstract public Exception getException();
- abstract public Object getPage();
- abstract public ServletRequest getRequest();
- abstract public ServletResponse getResponse();
- abstract public ServletConfig getServletConfig();
- abstract public ServletContext getServletContext();
- abstract public HttpSession getSession();
- abstract public JspWriter getOut();
- void include(String path)和void include(String path,boolean flush)
- void forward(path)
3.5.3 其他内置对象
- 1.request、response和session对象
- 2.page对象
- 3.exception对象,只有当page指令isErrorPage为true时,才会创建exception对象,通过这个对象可以获得异常的相关信息
- 4.cofig对象,配置相关即获取web.xml文件中与当前jsp页面相关的配置
- 5.application对象
testApplication.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body>
全局初始化参数值:
<%= application.getInitParameter("globalArg")%>
<br>
获取绝对路径:
<%= application.getRealPath("testApplication.jsp")%>
<br>
获取版本号:
<%= application.getMajorVersion()%>
<br>
web工程路径:
<%= application.getContextPath()%>
</body>
</html>
全局参数在web.xml中配置
<context-param>
<param-name>globalArg</param-name>
<param-value>我是值</param-value>
</context-param>
浏览器输入
运行后输出,如下
全局初始化参数值: 我是值
获取绝对路径: D:\tomcat-8.5.41\apache-tomcat-8.5.41\webapps\JspDemo\testApplication.jsp
获取版本号: 3
web工程路径: /JspDemo
3.6 学习JSP标签
3.6.1 包含标签<jsp:include>
<jsp:include>标签用于将另外一个静态或动态资源插入到当前的jsp页面中,插入过程是动态的,也就是说只有当前jsp页面运行到了<jsp:include>指令时才执行插入动作
语法格式
<jsp:include page="URL" flush="true|false"/>
3.6.2 转发标签<jsp:forward>
此标签主要用于将当前请求转发其他的静态资源、jsp页面或servlet,语法格式如下
//语法格式1:
<jsp:forwrd page="url| <%= expression%>" />
//语法格式2:
<jsp:forwrd page="url| <%= expression%>" >
{<jsp:param .../>}
</jsp:forwrd>
3.6.3 传参标签<jsp:param>
语法格式
<jsp:param name="name" value="value" |<%=expreesion %>/>
3.6.4 创建Bean标签<jsp:useBean>
- 1.最简单的用法
<jsp:useBean id="myDate" class="java.util.Date">
等价于
<%
java.util.Date myDate=new java.util.Date();
%>
- 2.使用class和type
<jsp:usebean id="myDate" class="java.util.Date" type="Object">
等价于
<%
Object myDate=new java.util.Date();
%>
- 3.使用beanName和type
<jsp:useBean id="myDate" type="Object" beanName="java.util.Date">
等价于
<%
Object myDate=(Object)java.beans.Beans.instantiate(this.getClass().getClassLoader("java.util.Date"));
%>
3.6.5 设置属性标签<jsp:setProperty>
3.6.6 获取属性标签<jsp:getProperty>
语法格式
<jsp:getPropety name="name" property="propertyName"/>
3.7 学习JSP的标准标签库(JSTL)
3.7.1 了解 JSTL
需要使用taglib指令引入JSTL
<%@ taglib uri="tabLibURL" prefix="tagPrefix"%>
uri:JSTL的标签库的唯一标识,可以是任意字符串
prefix :JSTL中的标签库前缀,目的是为了区分其他同名的标签,prefix的作用类似java中的包名
3.7.2 JSTL中的条件标签
- 1.<c:if>标签
- 2.<c:choose>、<c:when>和<c:otherwise>标签
<c:choose>
相当于jaba中的switch语句、<c:when>
相当于java中case关键字、<c:otherwise>
相当于default关键字
3.7.3 JSTL中的循环标签
- 1.<c:forEach>标签
- 2.<c:forTokens>标签
3.8 实战练习
略
网友评论