学了4个月的JAVA以后 终于开始学JSP了 一边看书 一边调程序 一边上CSDN查文档 4天时间过去以后 觉得自己有了质的飞跃 CSDN上面虽然文档很多 但是都是各说各的 相同的问题解决的方法层出不穷 查文档时就算找到了能解决自己问题的 也不一定适合自己 系统 配置 对JSP知识的了解深度 不同 解决的方法就不同 前后连贯性不够 除非自己的理解能力相当强 否则是很难仅仅通过这些文档达到统一学习的目的
我把自己这3天的学习过程写下来 相信对自己和刚开始学JSP的新手能够有所帮助
第一章 JSP语法
0.注释
<!--Copyright(c)TCP_IP,All rights reserved.-->发给客户端的注释 不显示
<%--comment--%>是不发送给客户端的 但会在客户端留下空行 隐藏注释
1.声明
<%! variable and method %>是不产生输出的 可以在标记中声明变量和方法
2.JSP表达式 会在客户端显示的 隐式转换 转成toString
<%= expression %> 不需要最后那个;号 标记中可以加入一段Java表达式
3.脚本段 用来包含一个JAVA程序段
<% code fragment %>完全符合java语言规范 可以在里面书写Java源程序
4.包含指令
<%@ include file="relativeURL" %> 在JSP中包含一个static文件
static文件时指:不包含需要执行的java程序的文件,如:HTML或者不包含Java程序的JSP
例如<%@ include file="beIncluded.jsp" %>
包含了上述代码的JSP文件,会在文件中静态展开beIncluded.jsp
包含文件种不能使用<html> </html> <body> </body>
被包含的文件必须有效 被包含的文件被改变 包含他的JSP会被重新编译
5.page指令
定义JSP文件种的全局属性 []表示 page中可写的指令
<@ page [language="java"] [extends="package.class"][import=""]
//java.lang.*; javax.servlet.*; javax.servlet.jsp.*; javax.servlet.http.*;都是已经导入了的 所以不用import来导入了
[session="true|false"] 设定客户是否需要HTTP Session
session为true则对同一个用户的访问看成一个session
[buffer="none|8kb|sizekb"]8kb是缺省
out对象处理的输出 缓冲区大小
[autoFlush-"true|false"] 刷新缓冲区
如果buffer溢出 是否需要强制输出 true输出 false发生异常
[isThreadSaFe="true|false"]
设置JSP文件是否能够多线程使用 相应多个请求 ture缺省
[info="text"]
描述信息
[errorPage="relativeURL"] 设置处理异常的JSP文件
[isErrorPage="true|false"]是否为错误处理页,如果是,可以使用exception对象
[contentType="mimeType[;charset=characterSet]"|text/html;charset=ISO-8859-1"]
设置MIME类型 缺省是text/html 缺省字符集为 ISO-8859-1
<%@ page %>作于整个JSP页面 不能作用于动态包含文件
6.taglib指令
定义一个标签库 及前缀
<%@ taglib uri="URITOTagLibrary" prefix="tagPreFix" %>
不要用jsp jspx java javax servlet sun sunw做前缀
taglib指令可以多次使用 但前缀只能用一次
例如:
<@ taglib uri="http://" prefix="public" %>
<html>
<body>
<public:loop>
<%--执行代码--%>
</public:loop>
<body>
<html>
7.<jsp:forward>
与Response的SendRedirect()不同 SendRedirect()会把url地址发送给客户端 询问是否转向
<jsp:forward>是在服务器端强制转向
重定向到一个JSP文件、HTML文件或者一个程序段
<jsp:forward page={"地址"|"程序段"}/>无参数的
带参数的:
<jsp:forward page={"地址"|"程序段"}>
<jsp:param name=""
value="{parametervlaue|"程序段"}"
......
</jsp:forward>
它后面的代码将不会执行
8.<jsp:useBean>
创建一个Bean实例并指定名字和作用范围
语法格式:
<jsp:useBean
id="beanInstanceName" 标识=Bean实例名称(不存在时创建,已存在时声明要使用)
scope="page|request|session|application" 有效范围 page表示JSP文件 这个Bean在这个jsp文件以及这个文件所包含的静态文件中有效
request表示请求对象 表示在这个请求范围之内有效 任何执行相同请求的JSP文件都能使用这个Bean
session 这个Bean于用户会话的生存期相同(必须有session="true") application 从服务器启动到终止一直有效
{ class="package.class"| 说明了这个Bean的出生 由哪个类构造而成 new方法
type="package.class"| 说明了这个Bean的出生 但这个Bean已经存在
class="package.class" type="package.class"| type的值可以于Bean相同 也可以是他的基类 或者实现了相同的接口
beanName="{package.class|<%=expression%>}" type="package.class" 使用java.beans.Beans.instantiate方法来创建实例 其中的表达式应表示的是一个返回类型
beanName可是package和class 也可以是表达式
}
{/>|
>other elements</jsp:useBean>}
实例:
I.<jsp:useBean id="cart" scope="session" class="session.Carts"/>
II.<jsp:useBean id="" scope="" class="bank.Checking">
<jsp:setProperty name="" property="" value="0.0"/>
</jsp:useBean>
9.<jsp:setProperty>
设置Bean的属性
语法格式:
<jsp:setProperty>
name="beanInstanceName" Bean实例的名称 必须已经存在
{
property="*"|储存用户输入的所有值 用于匹配Bean中的属性 来自请求对象
property="propertyName"[param="parameterName"]| 用一个参数值来设定对应的属性值 参数值来自requset
property="propertyName" value="string|<%= expression%>}" 用指定的属性值进行设置 不用请求对象的匹配
PS:如果参数值为空值,那么对应的属性值不会被设定 param和value 不能同时出现
}
/>
10.<jsp:getProperty>
获取Bean的属性 用于在页面中显示
<jsp:getProperty name="beanInstanceName" property="propertyName"/>自动实行toString类型转换
8.9.10.以上三个是与Bean操作相关的属性
11.<jsp:include>
先进行分析 是动态文件还是静态文件 根据不同有不同的表现 如果有动态的java 返回处理结果
包含一个静态或动态的文件
语法格式:
I. <jsp:include page="{relativeURL|<%=expression%>}" flush="true"/>
II.<jsp:include page="{relativeURL|<%=expression%>}" flush="true">
<jsp:param name="" value="{parameterValue|<%=expression%>"/>
//上面一行可重复可重复
</jsp:include>
page 表示JSP文件的相对路径或者代表相对路径的表达式
flush="true"是必须的 但缺省为false
12.<jsp:plugin>
插入一个applet或Bean,必要的话还要下载一个Java插件用于执行
语法格式:
<jsp:plugin
type="bean|applet" 将被执行的插件对象的类型
code="classFileName" 插件的类名 必须以.class结尾
codebase="classFileDirectoryName" 被执行的java class文件的目录
[name="instanceName"] 这个Bean或applet实例的名字 它将会在JSP其他的地方调用
[archive="URIToArchive,..."] 由逗号分开的路径名 用于预装一些将要使用的class
[align+"bottom|top|middle|left|right|] 位置
[height="displayPixels"] 高
[width="displayPixels"] 宽 象素
[hspace="leftRightPixels"] 水平边距
[vspace="topBottomPixels"] 垂直边距
[jreversion="JREVerssionNumber|1.1"] 所需的JRE版本号
[nspluginurl="URLToPlugin"] Netscape Navigator用户能使用的JRE下载地址
[iepluginurl="URLToPlugin"]> IE用户能使用的JRE下载地址
[<jsp:params> 需要向applet或Bean传送的采纳数或参数值
[<jsp:param name="" value=""/>]
</jsp:params>]
[<jsp:fallback>text message for user</jsp:fallback>] 不能启动时的替代消息
</jsp:plugin>
<jsp:plugin>将根据版本的不同替换 <boject>或<embed>元素
13.内置对象综述
JSP是大小写敏感的 这些内置对象+JavaBeans 可以构建应用项目了
内置对象是由特定的JAVA类生成的
9种内置对象 每种内置对象的第一行的第3个参数表示作用域 如下行
request javax.servlet.ServletRequest的子类 作用域:request
请求对象,代表的时来自客户端的请求,客户端在form中的请求,进入页面之前就产生了
这个对象有自己的Buffer
以下是它的方法:
request.getParameter("")获取一个指定名称的参数
getAttribute(name) getAttributeNames getCharacterEncoding()
getContentLength() getContenType() getParameterNames()获取所有参数名称
getParameterValues(name) getProtocol() getInputStream()
getScheme()获取请求的模式
getServerName() getServerPort() getReader()返回对Buffered进行字符型读取的对象
getRemoteAddr()
getRemoteHost() setAttribute(String key,Object o)
getSession(boolean)() boolean isRequestedSessionId Valid有效性|FromCookie|FromURL
getCookies() getServletPath()实际工作路径 getRequestedSessionId() 与session对象进行交互的方法response javax.servlet.ServletResponse的子类 page 不同的引擎可能产生不同的子类
响应对象 代表对客户端的相应 组织发送到客户端的数据 进入页面之前就已经产生 也有Buffer 以及方法
getCharacterEnconding() getWriter() setContentLength(int)
setContentType(String) getOutputStream() addCookie(Cookie) containsHeader(String)添加头部域
encodeURL(String)对URL进行编码 encodeRedirectURL(String)对重定向URL编码
sendError(int src,String)
sendRedirect(String)发送重定向的url setDateHeader(String,long)设定特定的日期头部域
setStatus(int src)设定状态码
setHeader(String name ,String value)设定指定名称的头部域 setIntHeader(name,int value)设定头部域的整形值
pageContext javax.servlet.jsp.PageContext page
页面上下文对象 当前页面运行的一些属性 Attribute(属性)自定义的一些变量 在有效范围内可以自己使用这些属性 不需要用到JAVA语言其他的一些方法
findAttribute()查找某个属性 getAttribute() setAttribute(String name,Object,<int scope>) getAttirbutesScope()获取属性的有效范围
getAttributeNamesInScope()获取有效范围内的属性名称
initalize(Servlet this,request,response,String errorPageURL,boolean needsSession,int bufferSize,boolean autoFlush);初始化方法
release()释放所有引用 removeAttribute()
可以通过 getOut() getSession() getPage() getRequest() getResponse() getException() getServletConfig() getServletContext()获得其他内置对象
forward(UrlPath) include(UrlPath) handlePageException(Exception e)用来处理未处理过的错误
session javax.servlet.http.HttpSession session
会话对象 代表服务器与客户端建议的会话 建立在Cookie之上 客户端必须打开Cookie
getCreationTime() getId() getLastAccessedTime()最后一次访问的时间 getMaxInactiveInterval()最大间隔
setMaxInactiveInterval(int) getValue(name) String[] getValueNames()
invalidate()使一个特定的session对象跟用户断开 boolean isNew()判断用户是否打开了Cookie功能
putValue(name,obj value) removeValue(name) //全部要求掌握
与Cookie对象一起来处理 获取request.getCookies() 设置response.setCookies()
application javax.servlet.ServletContext application
应用程序对象 负责提供应用程序在服务器种运行的一些全局信息 是一个运行环境
ServletContext getContext(urlpath)特定URL的Context
getMajorVersion()返回ServletAPI的主版本号 getMimeType(file)返回MimeType
getMinorVersion()获得次一级的版本号 java.net.URL getResource(path)throws java.net.MalformedURLException获得指定路径资源的URL
java.io.InputStream getResourceAsStream(path)
RequestDispathcer getRequestDispatcher(urlpath) 以上两个方法把指定的资源分别包装成不同的类型返回
log(msg)(msg,throwable)把指定的信息记录到日志文件
getRealPath(path) 转换虚拟路径与实际路径的对应关系
getServerInfo() getAttribute(name) getAttributeNames() setAttribute(name,obj) removeSAttribute(name)
out javax.servlet.jsp.JspWriter page
输出对象 发送给客户端的文本数据 浏览器不认println的换行 在外部加<pre>标记可以保持原来的输出样式
newLine()输出换行符 自带有一个buffer
config javax.servlet.ServletConfig page
配置对象 提供一些配置信息 使用它获取一些初始化配置信息
getInitParameter(String) getInitParameterNames()返回类型是Enumeration类型
getServletContext() 返回的是application对象
page java.lang.Object page
页面对象 正在运行的由JSP文件产生的类对象 Object page=this
getClass() hashCode() equals(obj) clone()throws CloneNotSupportedException
toString() notify() notifyAll() wait(......)throws InterruptedException
finalize()throws Throwable
exception java.lang.Throwable page
例外对象 JSP运行时所产生的例外对象
getMessage()后无错误对象信息 getLocalizedMessage() 和前基本相同 处理一些本地字符集
toString() 对象实际类名+":"+getMessage()
printStackTrace()错误栈轨迹 printStackTrace(PrintStream s)(PrintWriter s)
fillInStackTrace()填充栈轨迹 重抛时有用
在work种生成了上面的对象
14.JavaBeans
的特征:
a.内省(Introspection):
使组件可以发表其支持的操作的属性和机制,也是支持在其他组件中发现这种机制的机制。
b.属性(Properties):
在手机Bean时可以改变的外观和行为特征。
c.定制(Customization):
Bean通过发布其属性使其可以在实际时被定制。
d.通信(Communication):
Beans通过时间互相通信
e.持续(Persistence):
使Bean可以存储和恢复其状态。
的属性:<jsp:useBean> 创造实例 也可以在<% new Bean%>
<jsp:setProperty> <jsp:getProperty>
JSP中的Bean 像一种纯粹的java类
executeUpdate中调用的String对象 是不能用""包含的,要用+来连接 而SQL语言的正文部分要用""包含 而插入语句本身的''不要忘记写
实现功能封装
15.Servlet与JSP
在用tomcat做JSP服务器的时候Work文件夹下面对应的就是Servlet webapps文件夹下面对应的就是JSP
每个JSP都对应了一个Servlet,通过Servlet去完成用户的request
Servlet是可以处理用户请求的特殊的Java Class 必须满足一些条件(运行环境)
javax.servlet.*
interface Servlet 包含了init(config) service(request,response) destroy() getServletConfig() getServletInfo()通过实现他完成请求
以下接口和JSP的对应
ServletConfig--config ServletContext--application ServletRequest---Request ServletResponse---Response
RequestDispatcher包含forward(req,res)---<jsp:forward> include(req.res)---<jsp:include>
javax.servlet.http.*
javax.servlet.jsp.*
GenericServlet的开发
抽象类GenericServlet实现了很多接口 有一个abstract void service(req,res)
import java.io.*;
import java.util.*;
import javax.servlet.*;
public class HelloServlet extends GenericServlet 必须要重写service(req,res)方法
doget dopost都会被service调用
16.JDBC
SQL语言 动词 SELECT INSERT UPDATE DELETE CREATE DROP GRANT REVOKE
DDL数据定义: CREATE ALTERD DROP
DML数据操作: SELECT INSERT DELETE UPDATE
JDBC结构
Java Application --JDBC API(java.sql.*)--JDBC Manager--JDBC Driver API
模式与步骤
a.加载驱动程序 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
b.建立连接 Connection con=DriverManager.getConnection("jdbc:odbc:MyOdbcDSN");
c.创建语句对象 Statement stmt=con.createStatement();
b.执行查询语句 创建结果集对象 ResultSet rs=stmt.executeQuery("select*from tableName");
e.查询结果处理 关闭结果集对象 rs.close();
f.关闭语句对象 stmt.close();
g.关闭连接 con.close;
http://blog.csdn.net/TCP_IP/services/trackbacks/263934.aspx
TCP_IP 2005年1月22 17:36:54