找回密码
 注册

QQ登录

只需一步,快速开始

查看: 34563|回复: 14

JSP-----循序渐进教程

[复制链接]
发表于 2003-6-10 23:03:00 | 显示全部楼层 |阅读模式
给大家帖个自己的总结   

客户端(client)与服务器端(server)的概念

  1. 服务器:广义地说,服务器分两种(硬件服务器、软件服务器)
  2. 硬件服务器:指相对PC机而言,性能和稳定性较好的、采用特殊硬件的计算机。
  3. 软件服务器:通俗的说,就是指安装了某种服务软件,并能提供相应的服务的机器,我们称之为服务器。
  4. 服务软件有很多种,常见的有:
  5. WWW服务的软件:PWS、IIS、APACHE
  6. J2EE中间件应用服务器:websphere、silverstream
  7. JSP引擎(弱的WWW服务功能):TOMCAT,resin,weblogic,jrun
  8. SMTP、 POP3:iis的smtp,exchange,lotus domino
  9. FTP:iis所自带

  10. 客户端:相对服务器来说,就是享受了某种服务的一方,被称之为客户端。但若要享有某种服务也必须安装相应的软件,如(IE/NETSCAPE、OUTLOOK/FOXMAIL、CUTEFTP)
复制代码



数据类型

  1. 基本类型有以下四种:
  2. int长度数据类型有:byte(8bits)、short(16bits)、int(32bits)、long(64bits)、
  3. float长度数据类型有:单精度(32bits float)、双精度(64bits double)
  4. boolean类型变量的取值有:ture、false
  5. char数据类型有:unicode字符,16位
  6. 对应的类类型:
  7. Integer、Float、Boolean、Character、Double、Short、Byte、Long

复制代码


转换原则:
从低精度向高精度转换
byte 、short、int、long、float、double、char
注:两个char型运算时,自动转换为int型;当char与别的类型运算时,也会先自动转换为int型的,再做其它类型的自动转换

基本类型向类类型转换

  1. 正向转换:
  2. 通过类包装器来new出一个新的类类型的变量
  3. Integer a= new Integer(2);

  4. 反向转换:
  5. 通过类包装器来转换
  6. int b=a.intValue();
复制代码


类类型向字符串转换

  1. 正向转换:
  2. 因为每个类都是object类的子类,而所有的object类都有一个toString()函数,所以通过toString()函数来转换即可

  3. 反向转换:
  4. 通过类包装器new出一个新的类类型的变量
  5. eg1: int i=Integer.valueOf(“123”).intValue()
  6. 说明:上例是将一个字符串转化成一个Integer对象,然后再调用这个对象的intValue()方法返回其对应的int数值。
  7. eg2: float f=Float.valueOf(“123”).floatValue()
  8. 说明:上例是将一个字符串转化成一个Float对象,然后再调用这个对象的floatValue()方法返回其对应的float数值。
  9. eg3: boolean b=Boolean.valueOf(“123”).booleanValue()
  10. 说明:上例是将一个字符串转化成一个Boolean对象,然后再调用这个对象的booleanValue()方法返回其对应的boolean数值。
  11. eg4:double d=Double.valueOf(“123”).doubleValue()
  12. 说明:上例是将一个字符串转化成一个Double对象,然后再调用这个对象的doubleValue()方法返回其对应的double数值。
  13. eg5: long l=Long.valueOf(“123”).longValue()
  14. 说明:上例是将一个字符串转化成一个Long对象,然后再调用这个对象的longValue()方法返回其对应的long数值。
  15. eg6: char=Character.valueOf(“123”).charValue()
  16. 说明:上例是将一个字符串转化成一个Character对象,然后再调用这个对象的charValue()方法返回其对应的char数值。
复制代码

基本类型向字符串的转换

  1. 正向转换:
  2. 如:int a=12;
  3. String b;
  4. b=a+””;

  5. 反向转换:
  6. 通过类包装器
  7. eg1:
  8. int i=Integer.parseInt(“123”)
  9. 说明:此方法只能适用于字符串转化成整型变量
  10. eg2: float f=Float.valueOf(“123”).floatValue()
  11. 说明:上例是将一个字符串转化成一个Float对象,然后再调用这个对象的floatValue()方法返回其对应的float数值。
  12. eg3: boolean b=Boolean.valueOf(“123”).booleanValue()
  13. 说明:上例是将一个字符串转化成一个Boolean对象,然后再调用这个对象的booleanValue()方法返回其对应的boolean数值。
  14. eg4:double d=Double.valueOf(“123”).doubleValue()
  15. 说明:上例是将一个字符串转化成一个Double对象,然后再调用这个对象的doubleValue()方法返回其对应的double数值。
  16. eg5: long l=Long.valueOf(“123”).longValue()
  17. 说明:上例是将一个字符串转化成一个Long对象,然后再调用这个对象的longValue()方法返回其对应的long数值。
  18. eg6: char=Character.valueOf(“123”).charValue()
  19. 说明:上例是将一个字符串转化成一个Character对象,然后再调用这个对象的charValue()方法返回其对应的char数值。
复制代码

评分

参与人数 1威望 +5 收起 理由
经典论坛大妈 + 5 历史打分

查看全部评分

 楼主| 发表于 2003-6-10 23:19:00 | 显示全部楼层
JSP基本指令------
1--脚本标记

  1. 声明将要用到的语言:<%@.page language=”java”%>指明jsp指令,表明后面的脚本代码将采用java语言语法

  2. 引用包中的类:<%@.page import=”java.util.*”%>表示要用到java.util包里的类

  3. 声明变量:<%! int count=0;%>声明一个整形变量,并赋初值0

  4. 声明方法:<%! int show(int val){
  5. {return val;}
  6. %>
  7. 输出表达式:<%=2*X%>直接输出表达式的值,X必须是前面已声明过的变量(不能用分号),相当于asp中的<%=%>

  8. jsp注释符:<%--Here are comments--%>表示是Jsp注释,在服务器端将被忽略,也不转化为HTML的注释,在客户端查看源码时是看不到的。

  9. 包含另一个jsp文件:<%jsp:include page=”another:jsp”%>表示在当前页面插入另一个文件another.jsp的内容

  10. 普通的jsp语句:
  11. <% for(int i=0,i<10,i++)//jsp的正文部分
  12. out.println(i+”<br>”);
  13. %>
复制代码


2.指令---Jsp的指令有page、include两种
                       page指令(属性:6个)

  1. language属性:
  2. <@ page language=”java” %>//指明所用的的语言

  3. import属性:
  4. <@ page import=”java.util.*” %>//载入包
  5. 注意:在java中,要载入多个包,就用import分别指用,并用分号隔开;
  6. 在jsp中,如用一个import指明多个包,用逗号隔开。
  7. 如:<%@ page import=”java.util.*,java.lang.*”%>
  8. 也可<%@ page import=”java.util.*”%>
  9. <%@ page import=” java.lang.*”%>(但不主张这样用,不规范。)

  10. session属性:
  11. <@ page session=”true or false” %>缺省情况下session的值为true
  12. 如:<%@ page session=”true”%>
  13. <% if(session.getValue(“name”)==null)
  14. session.putValue(“name”,”123456”);
  15. else session.putValue(“name”,session.getValue(“name”)+”1”);
  16. %>
  17. <% out.println(session.getValue(“name”));%>若session=”false”,则会出现编译错。

  18. errorPage属性:
  19. 指当前页面程序发生错误时,由errorPage指定的程序来处理
  20. 写法: <@ page errorPage=”errorPage.jsp” %>
  21. 如:
  22. test.jsp: <%@page errorPage=”errorPage.jsp”@>
  23. <%!int i=0;%>
  24. <%=7/i%>
  25. errorPage.jsp: <%@page isErrorPage=”true”@>
  26. <%=exception%>
  27. 运行test.jsp,将会看到被0除的错误信息。

  28. isErrorPage属性:
  29. 指明了当前程序是否为另一程序的例外处理程序。不论它是否设置,例外都会导向当前程序,
  30. 问题在于当前程序能否得到此例外的对象。如设定为true,将会产生发生的例外的一个对象exception,
  31. 并可以在代码中使用它;若设定了false,使用exception程序将将会在编译时出错。
  32. 如:将上例的true改为false,将会出现以下错误:
  33. Error:500
  34. Unable to compile class for JSP
  35. 写法:<%@page isErrorPage=”true”@>

  36. contentType属性:
  37. 指定了MIME的类型和JSP文件的字符编码方式,它们都是最先传送给客户端。
  38. MIME类型有:text/plain、text/html(缺省类型)、text/html、image/gif、image/jpeg、image/jpeg
  39. 缺省的字符编码方式:ISO8859-1
复制代码

                            include指令

  1. 作用:是用来向当前页中插入一个静态文件的内容,这个文件可能是html文件、
  2. jsp文件或其它文本文件,格式如下:
  3. <%@ include file=”include.inc”%>
  4. 如:
  5. native.jsp:
  6. <body>
  7. native file start here.<br>
  8. <%@ include file=”include.inc”%>
  9. native file end here.<br>
  10. </body>
  11. include.inc:
  12. include file start here.<br>
  13. <%! String str=”Here is include’s context!”;%>
  14. <% out.pringln(str+”<br>”);%>
  15. include file end here.<br>
  16. 运行native.jsp,结果如下:
  17. native file start here.
  18. include file start here.
  19. Here is include’s context!
  20. include file end here.
  21. native file end here.
  22. 注意:因为include.inc文件是在编译时才插入的,所以只改 include.inc文件内容,
  23. 而不对原JSP页面做修改,得到的结果仍将是以前的结果。(因为一开始JSP引擎就判断了
  24. JSP页面没被改动过,就直接执行已存在的字节码,而不对源代码重新编译,这样对
  25. include做的修改也就在这没有反映。)
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-6-10 23:32:00 | 显示全部楼层
脚本
JSP脚本就是用page指令language属性指定的脚本语言编写的代码块,需要用JSP完成的功
能主要在此实现。目前用的基本是Java语言。
代码块里必须完全符合Java语法,但可以配合用HTML文本。其实不论是什么,都会被转换
为Servlet,在Servlet中它们是一样的。

  1. 如:先输出5个空行,再输出“hello”
  2. 正确的:<% for(int i=0;i<5;i++)%>
  3. <br>
  4. <%;%>
  5. hello
  6. <br>错误的:(一行br;一行hello)===============
  7. <% for(int i=0;i<5;i++)%>
  8. <br>
  9. hello
  10. 错误的等价于:<% for(int i=0;i<5;i++){%>
  11. <br>
  12. hello
  13. <%}%>
复制代码

                                     动作(<%jsp%>)
jsp提供的动作指令有:include、forward、useBean、getProperty、setProperty

include 动作

  1. jsp向当前页面加入另一文件的方法。
  2. <jsp:include page=”relativefileURL” flush=”true”/>
复制代码

forward动作

  1. 把当前页面重导到另一页面上,客户端看到的地址是A页面的地址,
  2. 而实际内容确是B页面的内容。
  3. <jsp:forward page=”relativefileURL| <%=expression%>}"/>
  4. 如:
  5. <body>
  6. here is aa.
  7. <jsp:forward page=”aa.jsp” />
  8. here is bb.
  9. </body>
  10. 注意:在使用forward之前,不能有任何内容已经输出到客户端,否则会发生例外。
复制代码


useBean动作

  1. 此动作用来生成一个bean组件,并设定它的id号及使用范围
  2. <jsp:useBean id=”beanName” scope="page|request|session|application|"class=”package.class” type="package.class" beanName="{package.class|<%=expression%>} type="package.class"">action for bean </jsp:useBean>
  3. id=”beanName”:定义生成bean组件的名字,不能重名且scope的值也最好一样,否则JSP引擎将认定最先被创建的那个。
  4. scope=”page|request|session|application”:定义bean的活动范围,bean只有在它定义的范围里才能使用,
  5. 在它的活动范围外将无法访问到它。JSP为它设定的范围有:
  6. page: bean的缺省使用范围
  7. request:作用于任何相同请求的JSP文件中,直到页面执行完毕向客户端发回响应或在此这之前
  8. 已通过某种方式(如重定向、链接等方式)转到另一个文件为止。还可通过使用Request对象访问
  9. bean,如request.getAttribute(beanName)
  10. session:作用于整个session的生存周期内,在session的生存周期内,对此bean属性的任何改动,
  11. 都会影响到在此session内的另一page、另一request里对此bean的调用。但必须在创建此bean的文件
  12. 里事先用page指令指定了session=true。
  13. application:作用于整个application的生存周期内,在application周期内,对此bean属性的任何改动,
  14. 都会影响到此application内另一page、另一request以及另一session里对此bean的调用。
  15. class=”package.class”:用class属性指下的类示例一个bean,其中package名必须是类里用关键字package指定的。
  16. type=”package.class”
  17. class=”package.class” type=”package.class”
  18. beanName=”{package.class|<%=expression%>}” type=”package.class”
  19. 如:tt.jsp
  20. <jsp:useBean id=”student” scope=”page” class=”mime.student” />
  21. <%=student.getName()%><br>
  22. <% student.setName(“wll”); %>
  23. student.java
  24. package mine;
  25. public class student{
  26. long classno;
  27. String name;
  28. int age;
  29. Boolean sex;
  30. public student(){
  31.         classno=12345;
  32.         name=”aaaa”;
  33.         age=21;
  34.         sex=true;
  35. }
  36. public long getClassno(){
  37.         return classno;
  38. }
  39. public void setClassno(long no){
  40.         this.classno=no;
  41. }
  42. public String getName(){
  43.         return name;
  44. }
  45. public void setName(String name){
  46.         this.name=name;
  47. }
  48. public int getAge(){
  49.         return age;
  50. }
  51. public void setAge(int age){
  52.         this.age=age;
  53. }
  54. public boolean getSex(){
  55.         return sex;
  56. }
  57. public void setSex(Boolean sex){
  58.         this.sex=sex;
  59. }
  60. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-6-10 23:36:00 | 显示全部楼层

  1. 注:
  2. scope=”page”时,运行test.jsp文件,name的初始值为”aaaa”。虽然在jsp文件中又重设为“wll”,
  3. 但刷新后仍为“aaaa”

  4. scope=”session”时,运行test.jsp文件,name的初始值为”aaaa”。虽然在jsp文件中又重设为“wll”,
  5. 但刷新后仍为“wll”,只要不关闭此窗口,任何刷新或打开一个新窗口,都输出“wll”。直到关闭所有窗口,
  6. 再运行test.jsp文件,输出才会为初始值”aaaa”。

  7. scope=”application”时,运行test.jsp文件,name的初始值为”aaaa”。虽然在jsp文件中又重设为“wll”
  8. ,但刷新后仍为“wll”,只要不关闭此窗口,任何刷新或打开一个新窗口,都输出“wll”。即使关闭所有窗口
  9. ,再运行test.jsp文件,输出仍为 “wll”。除非关闭服务后又重启,再运行test.jsp文件,name的输出为初始值”aaaa”。

  10. scope=”request”时,新建一文件test1.jsp内容与test.jsp一样。先在浏览器中运行test.jsp文件,输出name的
  11. 值为初始值”aaaa”。再在在浏览器中运行test1.jsp文件,此时输出为“wll”,因为它们算是相同的request。
复制代码


getProperty动作

  1. 作用:用来返回一个已被创建的bean组件的属性值:

  2. <jsp:getProperty name=”beanId” property=”propertyName” />
  3. name:对应着用useBean创建bean组件时id的值
  4. property:指明要得到哪个属性的值

  5. 如:得到前例中student组件的属性值:
  6. <jsp:getProperty name=”student” property=”classno” />等价:<%=student.classno %>
  7. <jsp:getProperty name=”student” property=”name” />
  8. <jsp:getProperty name=”student” property=”age” />

  9. 输出结果为:
  10. 12345 aaaa 21
复制代码


setProperty 动作

  1. 作用:用来设定一个已被创建的bean组件的属性值:
  2. <jsp:setProperty name=”beanId” property=”propertyName” value=”propertyValue”/>
  3. name:对应着用useBean创建bean组件时id的值
  4. property:指明要想设定属性值的属性名
  5. value:为设定的属性值

  6. 如:前例中student组件,在setProperty中设定的属性
  7. <jsp:setProperty name=”student” property=”classno” value=”56789” />
  8. <jsp:setProperty name=”student” property=”name” value=”bbbb” />
  9. <jsp:setProperty name=”student” property=”age” value=”33” />等价:<% student.age=33;%>

  10. 输出结果为:
  11. 56789 bbbb 33
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-6-10 23:49:00 | 显示全部楼层
内部对象
out(向客户端输出各种数据类型)
重要方法:

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

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

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

  4. out.close():关闭输出流

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

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

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

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

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

  10. 注意:中文显示问题

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

  12. 若是request传过来的中文字符串,必须要用getStr(String name)函数或类似的函数转换内码,否则不能正常显示中文。
  13. 如:String aa=str;
  14. byte[] aa=aa.getBytes(“ISO8859-1”);
  15. String bb=new String(aa);
  16. 在不同平台、不同的服务器jsp中文问题的解决方法各不相同,可自行试验。
复制代码

request(接受客户端输入的信息)
作用:主要用于接受客户端通过http协议连接传输到服务器端的数据。
方法:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

application(保存用户信息)
作用:一旦创建,除非服务器关闭,否则将一直保持下去

  1. application.setAttribute(“name”,val)
  2. request.setAttribute(“name”,val)
  3. 方法:
  4. getAttribute(String name):返回由name指定名字的application对象属性的值,这是个Object对象

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

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

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

  8. setAttribute(String name,Object object):用object来初始化某个属性,该属性由name指定
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-6-10 23:55:00 | 显示全部楼层
response(控制http连接)
作用:向客户端发送数据,如Cookie、HTTP文件关信息等。
方法:

  1. addCookie(Cookie cookie):添加1个Cookie对象,用来保存客户端的用户信息。用request的getcookies()方法可获得这个Cookie
  2. 如:<% Cookie mycookie=new Cookie(“uname”,”wsr”);
  3. response.addCookie(mycookie);
  4. Cookie delmycookie=new cookie(“mycookie”,null);
  5. delmycookie .setMaxAge(0);
  6. delmycookie .setPath(/”);
  7. response.addCookie(delmycookie);
  8. %>

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

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

  11. sendError(int sc):向客户端发送错误信息,如:505:服务器内部错误;404:网页找不到错误
  12. 如:response.sendError(response.SC_NO_CONTENT);
  13. setHeader(String name,String value):设定指定名字的HTTP文件头的值,若该值存在,它将会被新值覆盖
  14. 如1:让网页每隔5秒刷新一次
  15. <% response.setHeader(“Refresh”,”5”);%>
  16. the current dateis:<%=new Date()%>

  17. 如2:利用response对象设定HTTP头
  18. <% response.setContentType(“Application/pdf”);
  19. response.setHeader(“content-disposition”,”attachment;filename=\”syntax.pdf\””);
  20. %>

  21. sendRedirect(“error.html”) //重定向功能
复制代码


exception(处理异常和错误)
作用:处理JSP文件在执行时所有发生的错误和异常。有3个内建方法。
注意:必须在<%@ page isErrorPage=”true”%>的情况下才可以使用Exception对象

  1. getMessage():返回错误信息

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

  3. toString():以字符串的形式返回1个对异常的描述
复制代码

session(保存用户信息)
作用:分别保存每一个用户的信息
session.putValue(“name”,val)
session.getValue(“name”)
注意:session中保存和检索的信息不能是基本数据类型,而必须是JAVA的相应的Object对象。
方法:

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

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

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

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

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

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

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

  8. setAttribute(String name,Java.lang.Object value):设定指定名字的属性值,并将其存储在session对象中
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-6-11 12:21:00 | 显示全部楼层
使用Java Bean组件

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

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


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

  1. JSP组件的属性有两种:单值属性、索引属性
  2. 单值属性:
  3. 相当于平时编程中定义的一个成员变量,它只能有一个数据值,这个数据值的类型可以是Java中的任意数据类型,包括类和接口。
  4. 如:
  5. int counter;
  6. float tax;
  7. String name;
  8. Date datetime;
  9. 注:一种特殊的单值属性(布尔属性),它只有两种允许的值:true、false
  10. 索引属性:

  11. 相当于平时说的数组,当存放一批同类型的数据时,需要用到索引属性。
  12. 如:int ID[];
  13. String name[];
  14. Float score[];
复制代码


JavaBean的方法
方法包括构造方法和访问方法。
构造方法:


  1. 类似于类中的构造器(即对它及它的成员变量进行初始化),它的方法名要和此JavaBean的类相同。如:
  2. package student;
  3. public class student{
  4. int counter;
  5. ind ID[];
  6. String name[];
  7. float score[];
  8. boolean whiszkid;
  9.        
  10. public student(){
  11. ID=new int[50];
  12. name=new String[50];
  13. score=new float[50];
  14. counter=0;
  15. }
  16. }
复制代码

访问方法:

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

  4. 访问单值属性:如对上面的counter单值属性,它的两个访问方法可以为:
  5. 读取属性值:
  6. public int getCounter{
  7. return counter;
  8. }
  9. 改写属性值:
  10. public void setCounter(int counter){
  11. this.counter=counter;
  12. }

  13. 访问布尔型的单值属性:对读取属性值采用isXXX()方法
  14. 如对上面的布尔型的属性whizkid的访问可以为:
  15. public boolean isWhizkid(){
  16. return whizkid;
  17. }

  18. 访问索引属性:有时要定义好几个访问方法,但它们的取名规则还是一样的,
  19. 如对上面的姓名属性,它的读取和改写方法需这样定义:
  20. 读取索引属性中的一个属性值:
  21. public String getName(int index){
  22. return name[index];
  23. }

  24. 读取索引属性中的所有属性值:
  25. public String[] getName(){
  26. return name;
  27. }

  28. 改写索引属性中的一个属性值:
  29. public void setName(int index,String str){
  30. name[index]=str;
  31. }

  32. 改写索引属性中的所有属性值:
  33. public void setName(String[] str){
  34. name=str;;
  35. }
复制代码

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

使用道具 举报

 楼主| 发表于 2003-6-11 12:32:00 | 显示全部楼层
客户端与服务器端的工作


客户端做的工作       

  1. 客户端的工作可分两部分:
  2. 一、向服务器端发出请求即向服务器端发出提交
  3. 二、在客户端进行校验、以及页面的修饰等功能
复制代码

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

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

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

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

  5. 1)直接提交:点击提交按钮,立即发生提交
  6. <form method=post action=*.asp>
  7. <input type=submit value=”注册”>
  8. 注:submit按钮有一个默认事件,就是提交
  9. <input type=submit value=”注册” onclick=”alert(‘hello’);return ture or false;”>
  10. 注:在提交前,首先在屏幕上返回一个警告框”hello”,若return的是true,则页面发生提交;若return的是false,页面不会发生提交。
  11. </form>

  12. 2)间接提交:是指点击按钮本身并不能完成提交,而只有通过脚本才能完成的提交,称为间接提交。
  13. <input type=button value=”注册” onclick=”check();submit();”>
  14. 注:
  15. 在onclick处还可为onmousedown、onmouseup等事件名称
  16. button只是普通按钮,本身并不能发生提交,只能通过onclick指定的脚本程序才能完成提交
  17. 点击“注册”后,先执行onclick事件触发的函数,若返回值为true则发生提交,否则提交中止。


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

  20. 1)在form中产生的
  21. <form method=get action=*.asp>

  22. 2)在所有的url中产生的
  23. 在地址栏中输入url地址,后跟所要传递的参数http://*.asp?name=www&age=20

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

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

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

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

  28. 在客户端对象document中:document.location=” http:// *.asp?name=www”

  29. 在客户端对象window中:window.open(” http:// *.asp?name=www”)
复制代码


服务器端做的工作
获得客户端信息的方法是通过request对象来完成的。

  1. 客户端提交到服务器端的信息分为三类:
  2. 第一类:客户机信息(包括客户端的ip地址、端口号、主机名、提交方式等等)
  3. 第二类:通过form或url方式提交到服务器端的信息
  4. 第三类:cookie信息
复制代码


获得第一类信息用:

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

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

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

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

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

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

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

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

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

  10. request.getProtocol():

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

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

获得第二类 get 信息用:

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

获得第二类 post 信息用:

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

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

  3. request.getParameterValues(String name):获得指定参数所有值
复制代码

获得第三类Cookie信息用:

  1. request.getCookies( “cookie变量名”):返回客户端的cookie对象,结果是一个cookie数组
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-6-11 12:42:00 | 显示全部楼层
数据库初级部分 为了大家方便,以ACCESS为例

配置步骤:

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


数据库连接的五要素:

  1. IP地址
  2. 端口号(端口号对某个数据库服务是基本固定的,除非特别设定)意味着对应的数据库的驱动程序
  3. 选择数据库
  4. 帐号、密码(是分配给数据库的)
  5. 发出SQL语句(通过Statement对象发送)
复制代码


JDBC原理

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


JDBC与数据库的连接

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


作用:

  1. 与数据库建立连接
  2. 发送SQL语句
  3. 处理结果
  4. connection cn=DriverManager.getConnection(“jdbc:odbc:wombat”,”login”,”password”);
  5. Statement stmt=cn.createStatement();//发送SQL语句
  6. ResultSet rs=stmt.executeQuery(“select a,b,c from table1”);
  7. while(rs.next()){
  8. int x=rs.getInt(“a”);
  9. String s=rs.getString(“b”);
  10. float f=rs.getFloat(“c”);
  11. }//处理结果
复制代码

回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-6-11 12:57:00 | 显示全部楼层
DriverManager类
此类用于装载驱动程序,它所有的成员都是静态成员,所以在程序中无须对它进行实例化,直接通过类名就可以访问它。

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

  2. 加载驱动程序
  3. Class.forName(“公司名.数据库名.驱动程序名”)
  4. 如:Class.forName(“sun.jdbc.odbc.jdbcOdbcDriver”)

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

  7. 方法:Connection getConnection(String url,String user,String password)
  8. 其中user和password是登录数据库的用户和密码
  9. 第一个参数是指向数据库的url,它的格式如下:
  10. jdbc:(subprotocol):(subname)
  11. subprotocol:子协议,指定连接何种数据库或用什么方式连接数据库
  12. subname:确立一个连接,可以是一个数据源名,也可以是指向一个网上数据库

  13. 如:以下是通常用驱动程序(JDBC-ODBC桥驱动程序),并连一个student数据源,用匿名登录的的示例:
  14. Class.forName(“sun.jdbc.odbc.jdbcOdbcDriver”);//加载驱动程序
  15. String url=”jdbc:odbc:student”;
  16. Connection cn=DriverManager.getConnection(url,”anonymous”,””);
  17. GetConnection():返回一个连接类对象。若成功,此对象就指向此数据库的一个连接;否则,此对象将为空null
复制代码

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

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

  2. 方法:
  3. Statement  createStatment():新建一个Statement对象,此对象可以向数据库发送查询信息
  4. void  close():关闭同数据库的连接并释放占有的JDBC资源
  5. Boolean  isClose():判断是否仍与数据库连接
复制代码

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

创建Statement对象

  1. 建立了到特定数据库的连接后,就可用该连接发送SQL语句。Statement对象用Connection的方法createStatement创建。
  2. Connection cn=DriverManager.getconnection(rul,”sunny”,””);
  3. statement stmt=cn.createStatement();
  4. 为了执行Statement对象,被发送到数据库的SQL语句将被作为参数提供给Statement的方法
  5. ResultSet rs=stmt.executeQuery(“select a,b,c from table2”);
复制代码


使用Statement对象执行语句

  1. Statement接口提供了三种执行SQL语句的方法
  2. executeQuery():用于产生单个结果集的语句,如:select语句

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

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


语句完成
语句在已执行且所有结果返回时,即认为已完成。
  1. 对于返回一个结果集的executeQuery()方法,在检索完ResultSet对象
  2. 的所有行时该语句完成。

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

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

关闭Statement对象

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

  1. 主要方法
  2. ResultSet executeQuery(String sql):返回一个静态的sql查询结果

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

  4. void close():关闭同数据库的连接和所占有的JDBC资源
复制代码

[/code]
ResultSet类(纪录集)


  1. 作用:装载查询结果,并可以通过它的不同方法提取出查询结果。ResultSet包含符合SQL语句中条件的所有行,且它通过一套get方法(这些get方法可以访问当前行中的不同列)提供了对这些行中数据的访问。
  2. ResultSet.next():将纪录指针移动到ResultSet纪录集的下一行,使之成为当前行。
  3. 注:纪录集是一张二维表,其中有查询所返回的列标题及相应的值。

  4. 对于方法executeUpdate(),当它执行时语句即完成
  5. 在少数调用execute()的情况下,只有在检索所有结果集或它生成的更新计数之后语句才完
复制代码


-------结束!
PS:此教程为本人收集的内容,做了一些整理,是JSP的基础。
回复 支持 反对

使用道具 举报

发表于 2004-2-28 13:19:00 | 显示全部楼层
谢谢,赶快做收藏:)
回复 支持 反对

使用道具 举报

发表于 2004-2-28 15:39:00 | 显示全部楼层
当然此前要把概念、环境搞起来。
http://www.cnbruce.com/blog/showlog.asp?cat_id=26&log_id=345
回复 支持 反对

使用道具 举报

发表于 2004-2-28 15:57:00 | 显示全部楼层
如果能跟个实例教程就最好不过了

期待……
回复 支持 反对

使用道具 举报

发表于 2004-2-28 19:06:00 | 显示全部楼层
各位有没有什么JSP书介绍 ? 我正想学... 但没有基础... 什么书比较好 ?
回复 支持 反对

使用道具 举报

发表于 2004-2-28 20:18:00 | 显示全部楼层
Teach Yourself Java 2 In 21 Days
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|Archiver|手机版|blueidea.com ( 湘ICP备19000417号-2 )

GMT+8, 2021-9-25 08:15 , Processed in 0.066991 second(s), 10 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表