位置:海鸟网 > IT > JavaScript >

JSP渐进学习教程2

//----------------------------------------------------------------------------------------------

内部对象

out(向客户端输出各种数据类型)

重要方法:

out.print(类型) 或 out.println(类型):换行输出

out.newLine():输出一个换行符号

out.flush():输出缓冲区的数据

out.close():关闭输出流

out.clearBuffer():清除缓冲区里的数据,并把数据写到客户端

out.clear():清除缓冲区里的数据,但不把数据写到客户端

out.getBufferSize():获得缓冲区的大小,缓冲区的大小可用<%@ page buffer="size" %>设置

out.getRemaining():获得缓冲区没有使用的空间的大小

out.isAutoFlush():返回布尔值,若auto flush则返回true,否则返回false。是否auto fush我们可用<%@ page is AutoFlush="true/false"%>来设置

注意:中文显示问题

若是直接赋值的中文字符串,用<%@ page contentType="text/html; charset=gb2312" %>就可正常显示。但不能用getStr(String name)函数或类似的函数转换内码,否则不能正常显示中文。

若是request传过来的中文字符串,必须要用getStr(String name)函数或类似的函数转换内码,否则不能正常显示中文。

如:

String aa=str;

byte[] aa=aa.getBytes("ISO8859-1");

String bb=new String(aa);

在不同平台、不同的服务器jsp中文问题的解决方法各不相同,可自行试验。

request(接受客户端输入的信息)

作用:主要用于接受客户端通过http协议连接传输到服务器端的数据。

方法:

getCookies():返回客户端的cookie对象,结果是一个cookie数组

getHeader(String name):获得http协议定义的传送文件头信息,如:request.getHeader("User-agent")返回客户端浏览器的版本号、类型

getAttribute(String name):返回name指定的属性值,若不存在指定的属性,就返回空值(null)。

getattributeNames():返回request对象所有属性的名字,结果集是一个Enumeration(枚举)类的实例。

getHeaderNames():返回所有request header的名字,结果集是一个Enumeration(枚举)类的实例。

getHeaders(String name):返回指定名字的request header的所有值,结果集是一个Enumeration(枚举)类的实例。

getMethod():获得客户端向服务器端传送数据的方法有GET、POST、PUT等类型。

getParameter(String name):获得客户端传送给服务器端的参数值,该参数由name指定。

get parameterNames():获得客户端传送给服务器端的所有的参数名,结果集是一个Enumeration(枚举)类的实例。

getParameterValues(String name):获得指定参数所有值。

getQueryString()获得查询字符串,该串由客户端以GET方法向服务器端传送。

getRequestURI():获得发出请求字符串的客户端地址。

getServletPath():获得客户端所请求的脚本文件的文件路径。

setAttribute(String name,Java.lang.Object o):设定名字为name的。request参数值,该值由Object类型的o指定。

getServerName():获得服务器的名字。

getServerPort():获得服务器的端口号。

getRemoteAddr():获得客户端的IP地址。

getRemoteHost():获得客户端电脑的名字,若失败,则返回客户端电脑的IP地址。

getProtocol():获取客户端向服务器端传送数据所依据的协议名称,如http/1.1

application(保存用户信息)

作用:一旦创建,除非服务器关闭,否则将一直保持下去

application.setAttribute("name",val)

request.setAttribute("name",val)

方法:getAttribute(String name):返回由name指定名字的application对象属性的值,这是个Object对象

getattributeNames():返回所有application对象属性的名字,结果集是一个Enumeration(枚举)类的实例

getInitParameter(String name): 返回application栽个属性的初始值,此属性由name指定

getServerInfo():获得当前版本Servlet编译器的信息

//----------------------------------------------------------------------------

response(控制http连接)

作用:向客户端发送数据,如Cookie、HTTP文件关信息等。

方法:

addCookie(Cookie cookie):添加1个Cookie对象,用来保存客户端的用户信息。用request的getcookies()方法可获得这个Cookie

如:<% Cookie mycookie=new Cookie("uname","wsr");

response.addCookie(mycookie);

Cookie delmycookie=new cookie("mycookie",null);

delmycookie .setMaxAge(0);

delmycookie .setPath(/");

response.addCookie(delmycookie);

%>

addHeader(String name,String value):添加HTTP文件头,该header将会传到客户端,若同名的header存在,原来的header会被覆盖

containsHeader(String name):判断指定名字的HTTP文件头是否存在并返回布尔值

sendError(int sc):向客户端发送错误信息,如:505:服务器内部错误;404:网页找不到错误

如:response.sendError(response.SC_NO_CONTENT);

setHeader(String name,String value):设定指定名字的HTTP文件头的值,若该值存在,它将会被新值覆盖

如1:

让网页每隔5秒刷新一次

<% response.setHeader("Refresh","5");%>

the current dateis:<%=new Date()%>

如2:利用response对象设定HTTP头

<% response.setContentType("Application/pdf");

response.setHeader("content-disposition", "attachment;filename=\"syntax.pdf\"");

%>

sendRedirect("error.html")//重定向功能

exception(处理异常和错误)

作用:处理JSP文件在执行时所有发生的错误和异常。有3个内建方法。

注意:必须在<%@ page isErrorPage="true" %>的情况下才可以使用Exception对象

getMessage():返回错误信息

printStackTrace():以标准错误的形式输出一个错误和错误的堆栈

toString():以字符串的形式返回1个对异常的描述

session(保存用户信息)

作用:分别保存每一个用户的信息

session.putValue("name",val)

session.getValue("name")

注意:session中保存和检索的信息不能是基本数据类型,而必须是JAVA的相应的Object对象。

方法:

getAttribute(String name):获得指定名字的属性,若该属性不存在,将返回null

getattributeNames():返回session对象中存储的第一个属性对象,结果集是一个Enumeration类的实例

getCreationTime():返回该session对象创建的时间,以毫秒计,从1970年1月1日起

getId():每生成一个session对象,服务器都会给其一个不会重复的编号,此方法返回当前session的编号

getLastAccessedTime():返回当前session对象最后1次被操作的时间,返回自1970年1月1日起至今的毫秒数

getMaxInactiveInterval():获得session对象的生存时间

removeAttribute(String name):删除指定的属性(包括属性名、属性值)

setAttribute(String name,Java.lang.Object value):设定指定名字的属性值,并将其存储在session对象中


setAttribute(String name,Object object):用object来初始化某个属性,该属性由name指定

-------------------------------------------------------------------------------------

使用Java Bean组件

特点:是可以在任何地方重用包括了可以在应用程序中、其它组件、文档、web站点和应用程序构造器工具的多种方案中再利用。

JavaBean的概念

JavaBean是一种独立于平台和结构的应用程序接口,它本身可以忽略内部的结构及细节问题,只需定义其外部的特征及对外功能就行。

它有三种接口面可以独立对外进行开发,就是:属性、方法和事件

JavaBean的属性

JSP组件的属性有两种:单值属性、索引属性

单值属性:

相当于平时编程中定义的一个成员变量,它只能有一个数据值,这个数据值的类型可以是Java中的任意数据类型,包括类和接口。

如:

int counter;

float tax;

String name;

Date datetime;

注:一种特殊的单值属性(布尔属性),它只有两种允许的值:true、false

索引属性:

相当于平时说的数组,当存放一批同类型的数据时,需要用到索引属性。

如:int ID[];

String name[];

Float score[];

JavaBean的方法

方法包括构造方法和访问方法。

构造方法:

类似于类中的构造器(即对它及它的成员变量进行初始化),它的方法名要和此JavaBean的类相同。如:

package student;

public class student{

int counter;ind ID[];

String name[];

float score[];

boolean whiszkid;

public student(){

ID=new int[50];

name=new String[50];

score=new float[50];

counter=0;

}

}

访问方法:

就是对组件中定义的属性的访问,包括读和写(一般情况与在Java中定义和使用的方法差不多),注意它的取名规则:

读取一个属性:getXXX()

改写一个属性:setXXX()

访问单值属性:如对上面的counter单值属性,它的两个访问方法可以为:

读取属性值:

public int getCounter{

return counter;

}

改写属性值:

public void setCounter(int counter){

this.counter=counter;

}

访问布尔型的单值属性:对读取属性值采用isXXX()方法

如对上面的布尔型的属性whizkid的访问可以为:

public boolean isWhizkid(){

return whizkid;

}

访问索引属性:有时要定义好几个访问方法,但它们的取名规则还是一样的,如对上面的姓名属性,它的读取和改写方法需这样定义:

读取索引属性中的一个属性值:

public String getName(int index){

return name[index];

}

读取索引属性中的所有属性值:

public String[] getName(){

return name;

}

改写索引属性中的一个属性值:

public void setName(int index,String str){

name[index]=str;

}

改写索引属性中的所有属性值:

public void setName(String[] str){

name=str;

}

在JSP中创建用JavaBean编写的一个bean,实际上就是创建此类的一个对象。

客户端做的工作

客户端的工作可分两部分:

一、向服务器端发出请求即向服务器端发出提交

二、在客户端进行校验、以及页面的修饰等功能

客户端提交的方法

客户端的提交方法分两种:get与post提交

get可传递的信息只有2kb左右,而且是明码传送信息,所有的信息均可在地址栏中看见。

post可传递大量信息,加密传送,所有的信息均可在地址栏中是不可见的。

post提交

所有的post提交只能在form中产生,提交方式又分两种:直接提交(submit提交)、间接提交(脚本提交)

1)直接提交:点击提交按钮,立即发生提交

<form method=post action=*.asp>

<input type=submit value="注册">

注:submit按钮有一个默认事件,就是提交

<input type=submit value="注册" >

注:在提交前,首先在屏幕上返回一个警告框"hello",若return的是true,则页面发生提交;若return的是false,页面不会发生提交。</form>

2)间接提交:是指点击按钮本身并不能完成提交,而只有通过脚本才能完成的提交,称为间接提交。

<input type=button value="注册" >

注:

在onclick处还可为onmousedown、onmouseup等事件名称

button只是普通按钮,本身并不能发生提交,只能通过onclick指定的脚本程序才能完成提交

点击"注册"后,先执行onclick事件触发的函数,若返回值为true则发生提交,否则提交中止。

get提交

get提交发生在form表单和url中

1)在form中产生的

<form method=get action=*.asp>

2)在所有的url中产生的

在地址栏中输入url地址,后跟所要传递的参数*.asp?name=www&age=20

在超链接上<a href="*.asp>mode=1&grade=1">click me </a>

在图片的src属性中<img src="*.asp?name=www">

在帧里的src属性中<frame src=" *.asp?name=www" name=框架名>

在asp重定向语句中response.redirect " *.asp?name=www"

在客户端对象document中:document.location=" *.asp?name=www"

在客户端对象window中:window.open(" *.asp?name=www")

服务器端做的工作

获得客户端信息的方法是通过request对象来完成的。

客户端提交到服务器端的信息分为三类:

第一类:客户机信息(包括客户端的ip地址、端口号、主机名、提交方式等等)

第二类:通过form或url方式提交到服务器端的信息

第三类:cookie信息

获得第一类信息用:

request.getHeader("User-agent")返回客户端浏览器的版本号、类型

getHeader(String name):获得http协议定义的传送文件头信息

request. getMethod():获得客户端向服务器端传送数据的方法有GET、POST、PUT等类型

request. getRequestURI():获得发出请求字符串的客户端地址

request. getServletPath():获得客户端所请求的脚本文件的文件路径

request. getServerName():获得服务器的名字

request.getServerPort():获得服务器的端口号

request.getRemoteAddr():获得客户端的IP地址

request.getRemoteHost():获得客户端电脑的名字,若失败,则返回客户端电脑的IP地址

request.getProtocol():

request.getHeaderNames():返回所有request header的名字,结果集是一个Enumeration(枚举)类的实例

request.getHeaders(String name):返回指定名字的request header的所有值,结果集是一个Enumeration(枚举)类的实例

获得第二类 get 信息用:

request. getQueryString("变量名呀或控件名")获得查询字符串,该串由客户端以GET方法向服务器端传送

获得第二类 post 信息用:

request.getParameter(String name):获得客户端传送给服务器端的参数值,该参数由name指定

request.getParameterNames():获得客户端传送给服务器端的所有的参数名,结果集是一个Enumeration(枚举)类的实例

request.getParameterValues(String name):获得指定参数所有值

获得第三类Cookie信息用:

request.getCookies( "cookie变量名"):返回客户端的cookie对象,结果是一个cookie数组

--------------------------------------------------------------------------------------------

数据库初级部分 为了大家方便,以ACCESS为例

配置步骤:

在"开始"——"设置"——"控制面板"——"管理工具"——"数据源(ODBC)"——"系统DSN"——"添加"——"选择数据源驱动程序"——"完成"——"ODBC安装填写数据源名,点击‘确定’"——"完成"即可。

数据库连接的五要素:

IP地址

端口号(端口号对某个数据库服务是基本固定的,除非特别设定)意味着对应的数据库的驱动程序

选择数据库

帐号、密码(是分配给数据库的)

发出SQL语句(通过Statement对象发送)

JDBC原理

JDBC是JAVA与数据的连接。因为ODBC是完全用C语言编写的,而JAVA中实现与C语言程序的通信是比较困难的,因此就产生了由JAVA语言编写的用于JAVA程序与数据库连接的接口技术。

JDBC与数据库的连接

JDBC与具体的某种数据库连接,是直接通过JDBC API类库中的类来自动装载驱动程序的。此类库一般在java.sql包中,它包含了用于实现与数据库连接的其它功能的类,包括与数据库建立连接、传送查询和接受查询结果。以下四个类的详细介绍:

作用:

与数据库建立连接

发送SQL语句

处理结果

connection cn=DriverManager.getConnection("jdbc:odbc:wombat","login","password");

Statement stmt=cn.createStatement();//发送SQL语句

ResultSet rs=stmt.executeQuery("select a,b,c from table1");

while(rs.next()){

int x=rs.getInt("a");

String s=rs.getString("b");

float f=rs.getFloat("c");

}//处理结果


------------------------------------------------------------------------------------------

DriverManager类

此类用于装载驱动程序,它所有的成员都是静态成员,所以在程序中无须对它进行实例化,直接通过类名就可以访问它。

DriverManager类是JDBC的管理层,作用于用户和驱动程序间加载驱动程序

Class.forName("公司名.数据库名.驱动程序名")

如:Class.forName("sun.jdbc.odbc.jdbcOdbcDriver")

建立连接

加载Driver类并在DriverManager类注册后,就可用来与数据库建立连接。当调用Driver.Manager.getConnection()发出连连接请求时,DriverManager将检查每个驱动程序,看它是否可以建立连接。

方法:Connection getConnection(String url,String user,String password)

其中user和password是登录数据库的用户和密码

第一个参数是指向数据库的url,它的格式如下:

jdbc:(subprotocol):(subname)

subprotocol:子协议,指定连接何种数据库或用什么方式连接数据库

subname:确立一个连接,可以是一个数据源名,也可以是指向一个网上数据库

如:以下是通常用驱动程序(JDBC-ODBC桥驱动程序),并连一个student数据源,用匿名登录的的示例:

Class.forName("sun.jdbc.odbc.jdbcOdbcDriver");//加载驱动程序

String url="jdbc:odbc:student";

Connection cn=DriverManager.getConnection(url,"anonymous","");

GetConnection():返回一个连接类对象。若成功,此对象就指向此数据库的一个连接;否则,此对象将为空null

Connection类

connection类是指向同一个数据库的连接。

作用:管理指向数据库的连接,如:向数据库发送查询和接收数据库的查询结果都是在它基础上的;完成同数据库的连接的所有任务之后关闭此连接。

方法:

Statement createStatment():新建一个Statement对象,此对象可以向数据库发送查询信息

void close():关闭同数据库的连接并释放占有的JDBC资源

Boolean isClose():判断是否仍与数据库连接

Statement类

作用:Statement对象用于将SQL语句发送到数据库中。

创建Statement对象

建立了到特定数据库的连接后,就可用该连接发送SQL语句。Statement对象用Connection的方法createStatement创建。

Connection cn=DriverManager.getconnection(rul,"sunny","");

statement stmt=cn.createStatement();

为了执行Statement对象,被发送到数据库的SQL语句将被作为参数提供给Statement的方法

ResultSet rs=stmt.executeQuery("select a,b,c from table2");

使用Statement对象执行语句

Statement接口提供了三种执行SQL语句的方法

executeQuery():用于产生单个结果集的语句,如:select语句

executeUpdate():用于执行insert、update或delete、语句等,返回值是一个整数,指示受影响的行数(即更新计数)

execute():用于执行返回多个结果集、多个更新计数或二者组合的语句

语句完成

语句在已执行且所有结果返回时,即认为已完成。

对于返回一个结果集的executeQuery()方法,在检索完ResultSet对象的所有行时该语句完成。

对于方法executeUpdate(),当它执行时语句即完成

在少数调用execute()的情况下,只有在检索所有结果集或它生成的更新计数之后语句才完成

关闭Statement对象

Statement对象将由Java垃圾收集程序自动关闭。但我们最好显示地关闭它们,因为会立即释放数据管理系统资源,有助避免潜在内存问题。

主要方法

ResultSet executeQuery(String sql):返回一个静态的sql查询结果

int executeUpdate(String sql):查询一行sql声明中insert、update、delete的数目或返回0

void close():关闭同数据库的连接和所占有的JDBC资源

ResultSet类(纪录集)

作用:装载查询结果,并可以通过它的不同方法提取出查询结果。ResultSet包含符合SQL语句中条件的所有行,且它通过一套get方法(这些get方法可以访问当前行中的不同列)提供了对这些行中数据的访问。

ResultSet.next():将纪录指针移动到ResultSet纪录集的下一行,使之成为当前行。

注:纪录集是一张二维表,其中有查询所返回的列标题及相应的值。

对于方法executeUpdate(),当它执行时语句即完成

在少数调用execute()的情况下,只有在检索所有结果集或它生成的更新计数之后语句才完

-------结束!

PS:此教程为本人收集的内容,做了一些整理,是JSP的基础。