- 1. JSP高级编程
- 2. 第一讲 简介
- 3. 1.1 动态网站技术 动态网站的需求
传统的CGI
ASP技术
- 4. 1.2 Sun 的企业级解决方案 Servlet技术
Servlet的优势
-- 运行效率高
-- 可移植
-- 廉价
-- 安全
-- 主流
- 5. JSP技术 (JavaServer Pages)
关于容器
系统文件servlet容器浏览器
- 6. 容器种类
Standalone默认管理者Servlet管理者JSP管理者
- 7. In-process
Out-of-process
- 8. 1.3准备运行环境安装配置JDK
安装配置Tomcat
- 9. 1.4编写运行第一个Servlet/JSP程序 创建HelloWorld Servlet
创建目录结构
-- /WEB-INF/web.xml
-- /WEB-INF/classes
-- /WEB-INF/lib/package com.edu_a.example
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
public void doGet ( HttpServletRequest request, HttpServletResponse response )
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("");
out.println("Hello, World!");
out.println("");
out.println("
Hello, World !
");
out.println("");
out.println("")
out.close();
}
} - 10. 1.5 Web应用程序的构成 JSP/Servlet的规范
配置文件
静态文件和JSP/Servlet
类文件和包
- 11. 本章总结:
本章主要对Servlet和JSP作了较为简单的介绍.同时以Tomcat为例配置了相应的Web应用环境
本章重点:
了解运行环境Tomcat
- 12. 第二讲 Servlet基础
- 13. 什么是servlet?
Servlet的优点是什么?Servlet是针对CGI的问题而设计的,用于创建高性能的、健壮
的服务器端程序。 Servlet有自己的生命周期,使用多线程而不是昂贵的进程处理
客户请求,因而大大提高了性能
- 14. 2.1 javax.servlet包javax.servlet包中的接口
javax.servlet包中的类
javax.servlet包中的异常
- 15. 2.2 servlet生命周期
- 16. Servlet的生命周期是由Servlet 服务器负责管理的
方法
Init()
Destroy()
getServletConfig()
getServletInfo()
Service()
- 17. Package com.edu_a.example;
Import javax.servlet.*;
Import java.io.IOException;
Public class ServletLife implements Serclet
{
puvlic void init(ServletConfig config) throws ServletException
{
System.out.println(“调用init()…….”);
}
public void service(ServletRequest request,ServletResponse response) throws ServletException,IOException
{
System.out.println(“调用service()…….”);
}
public void destroy(){
System.out.println(“调用destroy()…….”);
}
public String getServletInfo(){
return null;
}
public ServletConfig getServletConfig(){
return null;
}
}
- 18. 2.3 ServletRequest/ServletResponse接口ServletRequest接口
声明方法
getParameterNames() 取得参数名称
getParameter() 取得特定参数的参数值
getRemoteAddress() 取得远程主机的地址
getRemotedHost() 取得远程主机名称
- 19. ServletResponse接口
主要方法
getWrite()
- 20. 2.4 GenericServlet包装类包装类(Wrapper)– GenericServlet实现的接口
Servlet
ServletConfig
java.io.Serializable
- 21. 2.5 Servlet配置信息获取Servlet的配置信息
方法及用途
getInitParameter() 取得Servlet起始参数值(String)
getInitParameterNames() 取得Servlet起始参数名(Enumeration)
getServletContext() 取得ServletContext对象(ServletContext)
getServletName() 取得Servlet的名称(String)
保留Servlet的配置信息
- 22. 2.6 ServletContext 接口初始化Web应用参数
获取容器的信息
使用绑定在Servlet间共享信息
- 23. 本章总结
介绍Servlet的基础,以及接口与类.
本章重点
ServletRequest接口
ServletResponse接口
ServletContext接口
- 24. 第三讲 HttpServlet
- 25. 3.1 Http协议Http ---- Hypertext Transfer Protocol
生活类比:
人与人交流大多靠语言:中国人用中文交流,美国人用英文交流;而如果你只会中文,而你想交流的美国人不会中文,你们就无法交流,因为你们的语言不通!语言是有一定的结构、语义等,这些规则就是协议
请求 . 响应和头信息
例如:
GET/index.html HTTP/1.0
GET 是HTTP已经定义的方法
/index.html 是资源的名称
HTTP/1.0 是客户端使用HTTP协议的版本号
- 26. 3.2 HttpServlet 包HttpServlet类
该类继承GenericServlet类,并增加了7个方法:
doGet()
doPost()
doPut()
doHead()
doOptions()
doDelete()
doTrace()
- 27. doGet方法
doPost方法当客户端发送HTTP请求使用GET方法时就调用doGet()方法。
HTTP的缺省方法就是GET。 当客户端发送HTTP请求使用POST方法时就调用doPost()方法。
- 28. 3.3 HttpServletReponse 接口控制HTTP响应报头
addHeader()
containsHeader()
setHeader()
setIntHeader()
setDateHeader()
addIntHeader()
addDateHeader()
- 29. 响应报头
含义
响应报头
含义
Allow
指定服务器所支持的请求类
Catch-Control
告诉浏览器或其它客户在什么环境下可以安全地缓存文档
Content-Encoding
指明页面在传输过程中所使用的编码方式
Content-Length
指明响应中的字节数
Content-Type
给出响应文档的MIME(多用因特网邮件扩展)类型。
Expires
这个报头规定内容的过期时间,从而不需继续缓存
Refresh
指明浏览器应该多长时间之后请求最新的页面
WWW-Authenticate
它告诉浏览器,客户应该在Authorization报头中提供哪种验证类型(BASIC或DIGEST)和域
- 30. 响应重定向
自动刷新/等待
特殊字符处理
- 31. 3.4 HttpServletRequest 接口HttpServletRequest接口定义的方法:
String getAuthType()
String getContextPath()
Cookie[] getCookies()
long getDateHeader(java.lang.String name)
String getHeader(java.lang.String name)
Enumeration getHeaderNames()
Enumeration getHeaders(java.lang.String name)
getIntHeader(java.lang.String name)
String getMethod()
String getPathInfo()
String getPathTranslated()
String getQueryString()
String getRemoteUser() String getRequestedSessionId()
String getRequestURI()
StringBuffer getRequestURL()
String getServletPath()
HttpSession getSession()
HttpSession getSession(boolean create)
java.security.Principal getUserPrincipal()
boolean isRequestedSessionIdFromCookie()
boolean isRequestedSessionIdFromUrl()
boolean isRequestedSessionIdFromURL()
boolean isRequestedSessionIdValid()
boolean isUserInRole(java.lang.String role)
- 32. 请求报头信息
表单数据和参数
getHeader()
getHeaders()
getHeaderNames()
getIntHeader()
getDateHeader()
getParameter()
getParameters()
getParameterNames()
- 33. 请求报头
含义
请求报头
含义
Accept
指定浏览器或其它客户程序可以处理的MIME类型:如img/png
If-Modified-Since
这个报头表明,仅当页面在制定的日期之后发生更改的情况下,客户程序才希望获取该页面。如果没有更新的页面,则服务器发送304报头。
Accept-Charset
表明浏览器可以使用的字符集
User-Agent
表明生成请求的浏览器和客户程序,通过它,我们可以判断用户使用的浏览器的类型。
Accept-Encoding
详细列出客户端能够处理的编码类型。
Cookie
这个报头向浏览器返回cookie。
Accept-Language
客户端能够接受的语言代码。如zh-cn
Content-Length
这个报头只适用于POST请求,用来给出POST数据的大小以字节为单位
Authorization
当访问密码保护的Web页面时,客户用这个报头来标识自己的身份。
Host
给出主机名和端口
- 34. 请求委托和请求域
使用RequestDispather对象的方法:
使用 ServletContext对象的getRequestDispatcher()方法
使用 ServletRequest对象的getRequestDispatcher()方法
使用 ServletContext对象的getNamedDispatcher()方法
- 35. 本章总结
叙述了HTTP的相关内容
介绍了Servlet的主要接口
- 36. 第四讲 从Servlet访问数据库
- 37. 4.1 JDBC简介Java.sql包
访问数据库的API
DriverManager类
Connection接口
Statement接口
ResultSet接口
PreparedStatement接口
ResultSetMetaData接口
- 38. DriverManager类的主要方法
就是提供了getConnection()方法,返回了一个Connection对象
Connection接口的主要方法
Public void close() throws SQLException
立即关闭,释放Connection对象
Public boolean isClose() throws SQLException
测试Conncetion对象是否已经关闭
Public Statement createStatement() throws SQLException
Public Statement createStatement(int resultSetType,int resultSetConcurrency)throws SQLException
用于创建给数据库发送SQL语句的Statement对象
Public PreparedStatement PreparedStatement()throws SQL Exception
用于创建PreparedStatement对象
- 39. Public boolean getAutoCommit() throws SQLException
如果自动提交置为enable,该方法返回ture,否则返回false
Public void setAutoCommit(Boolean autocommit)throws SQL Exception
设置是否允许Connection对象自动提交事务
Public void commit() throws SQLException
用于提交事务
Public roolback() throws SQLException
用于回滚事务
- 40. Statement接口的主要方法
Public ResultSet excuteQuery(String sql) throws SQLException
在数据库上执行一个查询SQL语句,并返回一个ResultSet对象(结果集)
Public int excuteUpdate(String sql) throws SQLException
在数据库上执行insert,update,delete SQL语句和DDL
- 41. ResultSet接口
Public Boolean isFirst() throws SQLException
Public Boolean isLast() throws SQLException
Public Boolean next() throws SQLException
Public ResultSetMetaData getMetaData() throws SQLException
Public XXX getXXX(int columnlndex) throws SQLException
PreparedStatement接口
Public int getColumnCount() throws SQLException
Public String getColumnName(int columnIndex) throws SQLException
- 42. 4.2 访问数据库五步曲访问数据库分以下几步:
加载JDBC驱动程序
指定数据库连接URL
创建Connection对象
创建statement对象
创建resultset对象
- 43. 加载JDBC驱动程序
JDBC-ODBC桥
- 44. 本机API Java驱动程序
- 45. 网络协议Java驱动程序
- 46. 数据库协议纯Java驱动程序
- 47. 定义数据库连接的URL
Oracle数据库
jdbc:oracle:thin:@SERVER:PORT:INSTANCE_NAME
MySQL
jdbc:mysql//SERVER_NAME
SQL Server
jdbc:microsoft:sqlserver://SERVER:port;DatabaseName
Ms Access
Jdbc:odbc:dbName
- 48. 创建Connection对象Try
{
String sqlServerURL=“jdbc:microsoft:sqlserver://SERVER:port;DatabaseName”;
String username=””;
String password=””;
Connection con=DriverManager.getConnnection(sqlServerURL,username,password);
…
}
catch (SQLException e)
{
…
}
- 49. 创建Statement对象
创建结果集
- 50. 4.4 数据库的高级操作PreparedStatement
CallableStatement
事务处理
- 51. 4.5 数据库连接池(Connection Pool)数据源(Data Source)
连接池(Connection Pool)
JNDI(Java命名与目录接口)
Tomcat5+SQL server 2000数据库连接池配置
- 52. 本章总结
讨论了数据库如何与Servlet相结合
JNDI获得数据库连接的方式
本章重点
能够建立与数据库的连接,并操纵数据库。
了解数据库连接池的原理
- 53. 第五讲 状态和会话管理
- 54. 5.1 客户端状态管理解决方案客户端管理的3种解决方案
Cookie
URL重写
隐藏域(hiddenfield)
隐藏域(hiddenfield)
优点:简单,任何浏览器都支持
缺点:总是需要一个表单(From),并且不安全
- 55. Cookie
什么是Cookie?
Cookie不是
Cookie而是
Cookie的应用范围?
在电子商务会话中标识用户
记录用户名和密码
定制站点
定向广告Cookie是
一个在HTTP请求—响应之间
往来传输的信息片断,
它最初是由Netscape公司发明的,
主要用于记录客户端信息,
并将该信息存放在客户端
- 56. Cookie 的发送和接受
向客户程序发送cookie
创建cookie对象
设置最大时效
将cookie放入到HTTP响应报头
从客户端读取cookie
调用request.getCookies
对数组进行循环,调用每个cookie的getName方法,直到找到感兴趣的cookie为止
- 57. 会话和持久Cookie
URL重写
- 58. 5.2 会话的管理—使用HttpSession会话的实现机制
客户端保存session id的方案
采用cookie
采用URL重写
采用隐藏域
使用HttpSession对象
- 59. 本章总结
主要介绍了状态和会话管理的方法及特点
本章重点
Cookie的使用
HttpSession的使用
- 60. 第六讲 JSP概述
- 61. 6.1 对JSP的需求及JSP的优点对JSP的需求
Servlet的不足
Servlet中HTML的编写和维护都比较困难
不能使用标准的HTML工具
非Java开发人员难以处理这些HTML
JSP模型
- 62. JSP的好处
JSP中HTML的编写与维护更为简单
能够使用标准的网站开发工具
可以对开发团队进行划分
- 63.
翻译JSP页面
编译
装载
创建实例
调用jspInit()方法(只调用一次)
为每次客户请求调用_jspService(…)方法
JSP被容器销毁调用jspDestroy()方法
6.2 JSP的生命周期
- 64. 6.3 JSP语言基础JSP2.0规范可以分成以下几个部分:
JSP
JavaBean
自定义标签(Custom Tags)和JSP片断(JSP Fragments)
EL(Expression Language)
- 65. JSP元素和模板数据
JSP元素分为3类:
脚本元素(scripting element)
指示符(directive)
动作(action)
JSP中的脚本元素(scripting element)
Scriptlet 小脚本
Expression 表达式
Declaration 声明
- 66. Scriptlet 小脚本 expression 表达式 declaration 声明
JSP语法
<% code fragment %>或
code fragment
后者称为XML语法
JSP语法
<%= expression %>
XML语法
expression;
JSP语法
<%! declaration;[ declaration;] … %>
XML语法
declaration;[declaration;]+…
- 67. JSP中的指示符(directiv)
Page 指示符
Taglib 指示符
Include 指示符
- 68. Page 指示符
JSP语法
<%@page ATTRIBUTES %>
XML语法
- 69. 属性
contentType属性
pageEncoding属性
Language属性
isELIgnored属性
Import属性
Info属性
Session属性
Buffer属性
autoFlush属性
isThreadSafe属性
errorPage属性
isErrorPage属性
Extends属性
- 70. Include指示符(静态包含)
JSP语法
<%@include file=“relativeURL”%>
XML语法
taglib指示符
- 71. JSP规范动作Action
语法:
其他JSP规范动作
- 72. 注释
客户端的注释格式
开发程序员的注释格式<%--注释内容--%>
关于引号和Escape字符
- 73. 隐含对象和JSP文档隐含对象
类型
说明
Request
javax.servlet.http.HttpServletRequest
与请求相关联
Response
javax.servlet.http.HttpServletResponse
与相应相关联
PageContext
javax.servlet.jsp.PageContext
与当前页面相关联
Session
javax.servlet.http.HttpSession
与会话相关联
Application
javax.servlet.ServletContext
为ServletContext类型
Out
javax.servlet.jsp.JspWriter
数据流的标准输出
Config
javax.servlet.ServletConfig
页面的ServletConifg
Page
java.lang.Object
This的同义词
Exception
java.lang.Throwable
异常处理
- 74. Servlet相关的隐含对象
Page对象
<%@ page info="JSP 2.0隐含对象" contentType="text/html; charset=GBK" %>
PageInfo
Page隐含对象
Page Info =<%=((javax.servlet.jsp.HttpJspPage)page).getServletInfo()%>
- 75. Config对象
输入输出对象
Request对象
Response对象
Out对象方法
说明
void clear()
清除缓冲区的内容
void clearBuffer()
清除缓冲区的内容
void close()
关闭输出流,清除所有的内容
int getBufferSize()
取得目前缓冲区的大小(KB)
int getRemaining()
取得目前使用后还剩下的缓冲区的大小(KB)
boolean isAutoFlush()
如果返回为true,表示缓冲区满了,会自动清除;若为false,表示缓冲区满了,不会自动清除,而产生异常处理。
- 76. 上下文关系对象
Session对象
Application对象
pageContext对象
- 77. PageContext类取得其它隐含对象的方法 方法
说明
Exception getException()
返回目前页面的异常,不过此网页要为error page
JspWriter getOut()
返回目前页面的输出流,如out对象
Object getPage()
返回page对象
ServletRequest getRequest()
返回目前页面的请求,如request对象
ServletResponse getResponse()
返回目前页面的响应,如response对象
ServletConfig getServletConfig()
返回目前页面的ServletConfig对象,如config对象
ServletContext getServletContext()
返回目前页面的执行环境,如application对象
HttpSession getSession()
返回目前页面有联系的会话,如session对象
- 78. PageContext类取得属性的方法 方法
说明
ObjectgetAttribute(String name,int scope)
返回name属性,范围为scope指定
Enumeration getAttributeNamesInScope(int scope)
返回范围为scope内的所有属性名称
intgetAttributesScope(String name)
返回属性名称为name的属性范围
VoidremoveAttribute(String name)
移除属性名为name的属性
VoidremoveAttribute(String name,int scope)
移除有scope指定范围内属性名为name的属性
voidsetAttribute(String name,Object value,int scope)
指定属性对象的名称name,值Object,范围scope
Object findAttribute(String name)
在所有范围中寻找属性名为name的属性值
- 79. PageContext类提供的范围变量 常数
说明
PAGE_SCOPE
存入pageContext对象的属性范围
REQUEST_SCOPE
存入request对象的属性范围
SESSION_SCOPE
存入session对象的属性范围
APPLICATION_SCOPE
存入application对象的属性范围
PageContext.jsp
<%@ page import="java.util.Enumeration" contentType="text/html; charset=GBK" %>
PageConext.jsp
当前application范围内所有的属性
<%
Enumeration enum=pageContext.getAttributeNamesInScope(PageContext.APPLICATION_SCOPE);
while(enum.hasMoreElements())
{
out.println("application attribute: "+enum.nextElement()+"
");
}
%>
举一个例子使大家能够更加明白 - 80. 异常处理对象
Exception对象
<%@ page contentType="text/html; charset=GBK" isErrorPage="true" %>
Exception
exception对象
Exception: <%=exception%>
Message: <%=exception.getMessage()%>
Localized Message: <%=exception.getLocalizedMessage()%>
Stack Trace: <% exception.printStackTrace(new java.io.PrintWriter(out));%>
- 81. 6.7 Web应用中的异常处理基于页面的解决方案
Servlet作为异常处理页面
基于web.xml配置的异常处理方案
- 82. 本章总结
对JSP做了简单的说明,理解JSP和Servlet的区别
能够建立简单的jsp页面
本章重点
JSP的特点
JSP语言基础
- 83. 第七讲 JavaBean和表达式语言
- 84. 7.1 JSP组件模型
- 85. 7.2 JavaBean基础JavaBean的规范主要包括:
JavaBean是一个公有类,即使用public来修饰的类
JavaBean必须有一个无参数的构造函数
JavaBean不应该有公开的变量,所有变量都通过方法访问(读取与设置)
设置或访问JavaBean的属性必须通过setXXX和getXXX方法。这里XXX表示属性
- 86. 7.3 在Servlet/JSP中访问JavaBean在Servlet中使用JavaBean
用于获得输入 ShowBeanPage.jsp
Passing a value
请输入一个字符串
<%@ page contentType="text/html; charset=GBK" %>
ShowBeanPage
value is
- 87. 在JSP中使用JavaBean
优势
分离HTML和Java代码
JavaBean重用
- 88. 的用法 语法 :
useBean Example
The date/time is <%= date %>
- 89. 的用法 语法 : <%@ page contentType="text/html; charset=GBK" %>
useBean
<%
user.setName("Bob");
user.setPassword("password");
%>
你好, 欢迎访问!
package com.edu_a.example;
public class User
{
private String name;
private String password;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this. password = password;
}
}
- 90. 的用法 语法 :1. 91. 和实施的数据类型转换
JavaBean的范围
- 92. 7.4 表达式语言EL支持的功能
精确的访问存储对象
Bean属性的简略记法
对集合元素的简单访问
对请求参数、cookie、和其他请求数据的简单访问
提供了一组有效的简单运算符
有条件输出
自动类型转换
空值取代错误消息
- 93. 表达式语言的调用
格式:${expression}
访问作用域变量
访问Bean的属性
访问集合
引用隐式对象
- 94. 表达式语言中运算符的应用
算术运算符
关系运算符
逻辑运算符
空运算符
- 95. 本章总结
针对JavaBean技术进行了介绍
要求做到创建JavaBean并在JSP或者Servlet中灵活地调用
本章重点
JavaBean基础
在Servlet/JSP中访问JavaBean
- 96. 第八讲 JSP标签扩展
- 97. 8.1 一个简单的Tag Library例子Hello标签的标签处理类
Hello标签的Tag Library Descriptor File
JSP网页
Tag Library & web.xml<%@ page contentType="text/html;charset=GBK" %>
<%@ taglib uri="/WEB-INF/tlds/MyTaglib.tld" prefix="mytag" %>
Hello.jsp
Hello World 标签
- 98. 8.2 Tag Handler ClassAPI概观
Javax.servlet.jsp包
Javax.servlet.jsp.tagext包
TagSupport类
doStartTag()返回值
说明
Tag.SKIP_BODY
表示本体内容会被忽视,将控制权转移给doEndTag()
Tag.EVAL_BODY_INCLUDE
表示本体内容会正常执行,但是不会对本体内容做任何的运算、处理。
- 99. doAfterBody()
doEndTag()返回值
说明
Tag.SKIP_BODY
表示本体内容会被忽视,将控制权转移给doEndTag()
IterationTag.EVAL_BODY_AGAIN
表示本体内容将会重复执行,并且在度调用doAfterBody(),如此循环,直到返回SKIP_BODY为止。
返回值
说明
Tag.SKIP_PAGE
表示JSP页面的执行应该马上停止,所有在页面上的内容,包括JSP的程序和静态文件都应该马上被忽略,任何输出应该马上返回到用户的浏览器上。
Tag.EVAL_PAGE
表示JSP页面能够正常执行。
- 100. Release()
BodyTagSupport类
doStartTag()返回值
说明
Tag.SKIP_BODY
表示本体内容会被忽视,将控制权转移给doEndTag()
Tag.EVAL_BODY_INCLUDE
表示本体内容会正常执行,但是不会对本体内容做任何的运算、处理。
BodyTag.EVAL_BODY_BUFFERED
表示标签的本体内容应该被处理,并且处理的结果必须存储在BodyContent类中。
- 101. 本章总结
本章主要介绍了自定义标签的创建方法
本章重点
标签类接口
自定义标签的设计