免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1012 | 回复: 0
打印 上一主题 下一主题

一些基本的 JSP知识 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-09 19:04 |只看该作者 |倒序浏览
 自定义标签类GetRequestParameterTag.java
package tags;
import javax.servlet.ServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
   
  
  
   
public class GetRequestParameterTag extends TagSupport {
       private String property;
      public void setProperty(String property){
            this.property = property;
      }
      public int doStartTag() throws JspException {
            ServletRequest reg = pageContext.getRequest();
            String value = reg.getParameter(property);
login.jsp
Login Page
   
  
  
   
被包含的login_form.jsp
请登陆
">
  
     
      用户名:
      
  ">
   
     
      密码:
      
   
     
      
        
      
   
  
LoginServlet.java
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
import beans.User;
import beans.LoginDB;
public class LoginServlet extends HttpServlet {
   private LoginDB loginDB;
   public void init(ServletConfig config) throws ServletException {
super.init(config);
loginDB = new LoginDB();
config.getServletContext().setAttribute("loginDB",loginDB);
}
   public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{
     String name = request.getParameter("userName"); //从login_form 表单得到值
     String pwd = request.getParameter("userPwd");
     User user = loginDB.getUser(name,pwd);
     if(user != null){ //说明存在用户
     request.getSession().setAttribute("user",user);   //放到session 里面
     request.getRequestDispatcher(response.encodeURL("/welcome.jsp")).forward(request,response);    //成功转发到welcome.jsp
     }else{
       request.getRequestDispatcher(response.encodeURL("/loginFailed.jsp")).forward(request, response);
     }
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{
    doGet(request,response);
        }
}
web.xml添加
Login   
LoginServlet   
  
new_account
NewAccountServlet
  
   
new_account
/new_account
  
   
Login   
/login   
  
utilities
/WEB-INF/tlds/utilities.tld
          
utilities.tld关键部分
requestParameter
tags.GetRequestParameterTag
Simplest example: inserts one line of output
Empty
property
true
true
 自定义标签类GetRequestParameterTag.java
package tags;
import javax.servlet.ServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
   
  
  
   
public class GetRequestParameterTag extends TagSupport {
       private String property;
      public void setProperty(String property){
            this.property = property;
      }
      public int doStartTag() throws JspException {
            ServletRequest reg = pageContext.getRequest();
            String value = reg.getParameter(property);
          try{
             pageContext.getOut().print(value == null ? "":value);
          }catch(java.io.IOException e){
              throw new JspException(e.getMessage());
          }
         return SKIP_BODY;
       }
}
登陆成功welcome.jsp
Welcome Page
-->
欢迎你:
登陆失败loginFailed.jsp
Login Failed
请输入用户名和密码,或者创建一个新用户!
">创建一个新用户
 新建用户newAccount.jsp
New Account
   
  
  
   
创建新用户
">
  
     
      用户名:
      
   
     
      密码:
      
   
   
      密码问题:
      
   
     
      

   
  
注册的控制器NewAccountServlet.java
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
import beans.LoginDB;
public class NewAccountServlet extends HttpServlet {
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{
      LoginDB loginDB = (LoginDB)getServletContext().getAttribute("loginDB");
      LoginDB.addUser(request.getParameter("userName"),
      request.getParameter("userPwd"),
      request.getParameter("hint"));
      request.getRequestDispatcher(response.encodeUrl("accountCreated.jsp")).forward(request,response);
  }
}
accountCreated.jsp
无标题文档
新用户已经创建!





JSP基本指令------
1--脚本标记
声明将要用到的语言:<%@ page language="java" %> 指明jsp指令,表明后面的脚本代码将采用java语言语法
   
  
  
   
引用包中的类:<%@ page import="java.util.*" %> 表示要用到java.util包里的类
声明变量:<%! int count=0;%>声明一个整形变量,并赋初值0
声明方法:
<%!
int show(int val){
return val;
}
%>
输出表达式:<%=2*X%> 直接输出表达式的值,X必须是前面已声明过的变量(不能用分号),相当于asp中的 <%=%>
jsp注释符:<%--Here are comments--%> 表示是Jsp注释,在服务器端将被忽略,也不转化为HTML的注释,在客户端查看源码时是看不到的。
包含另一个jsp文件:<% jsp:include page="another:jsp" %> 表示在当前页面插入另一个文件another.jsp的内容
普通的jsp语句:
<%
for(int i=0,i<10,i++)//jsp的正文部分
out.println(i+"<br>");
%>
2.指令---Jsp的指令有page、include两种
page指令(属性:6个)
language属性:
<%@ page language="java" %>//指明所用的的语言
import属性:
<%@ page import="java.util.*" %>//载入包
注意:在java中,要载入多个包,就用 import 分别指用,并用分号隔开;
在jsp中,如用一个 import 指明多个包,用逗号隔开。
如:<%@ page import="java.util.*,java.lang.*" %>
也可<%@ page import="java.util.*" %>
<%@ page import=" java.lang.*" %>(但不主张这样用,不规范。
session属性:
<%@ page session="true or false" %>缺省情况下session的值为true
如:<%@ page session="true"%>
<%
if(session.getValue("name")==null)
session.putValue("name","123456");
else
session.putValue("name",session.getValue("name")+"1");%>
<% out.println(session.getValue("name"));%>若session="false",则会出现编译错。
errorPage属性:
指当前页面程序发生错误时,由errorPage指定的程序来处理写法:
<%@ page errorPage="errorPage.jsp" %>
如:test.jsp: <%@ page errorPage="errorPage.jsp" %>
<%!int i=0;%>
<%=7/i%>
errorPage.jsp:
<%@ page isErrorPage="true" %>
<%=exception%>
运行test.jsp,将会看到被0除的错误信息。
isErrorPage属性:
指明了当前程序是否为另一程序的例外处理程序。不论它是否设置,例外都会导向当前程序,问题在于当前程序能否得到此例外的对象。如设定为true,将会产生发生的例外的一个对象exception,并可以在代码中使用它;若设定了false,使用exception程序将将会在编译时出错。如:将上例的true改为false,将会出现以下错误:
Error:500
Unable to compile class for JSP
写法:<%@ page isErrorPage="true" %>
contentType属性:
指定了MIME的类型和JSP文件的字符编码方式,它们都是最先传送给客户端。MIME类型有:text/plain、text/html(缺省类型)、text/html、image/gif、image/jpeg、image/jpeg
缺省的字符编码方式:ISO8859-1
include指令
作用:是用来向当前页中插入一个静态文件的内容,这个文件可能是html文件、jsp文件或其它文本文件,格式如下:
<%@ include file="include.inc" %>
如:
native.jsp:
<body>native file start here.<br>
<%@ include file="include.inc" %>
native file end here.<br>
</body>
include.inc:include file start here.<br>
<%! String str="Here is include
//---------------------------------------------------------------
脚本
   
  
  
   
JSP脚本就是用page指令language属性指定的脚本语言编写的代码块,需要用JSP完成的功能主要在此实现。目前用的基本是Java语言。
代码块里必须完全符合Java语法,但可以配合用HTML文本。其实不论是什么,都会被转换为Servlet,在Servlet中它们是一样的。
如:先输出5个空行,再输出"hello"
正确的:<% for(int i=0;i<5;i++)%>
<br>
<%;%>
hello
<br>错误的:(一行br;一行hello)===============
<% for(int i=0;i<5;i++)%>
<br>
hello
错误的等价于:<% for(int i=0;i<5;i++){%>
<br>
hello
<%}%>
动作(<%jsp%>)
jsp提供的动作指令有:include、forward、useBean、getProperty、setProperty
include 动作
jsp向当前页面加入另一文件的方法。
<jsp:include page="relativefileURL" flush="true"/>
forward动作
把当前页面重导到另一页面上,客户端看到的地址是A页面的地址,
而实际内容确是B页面的内容。
<jsp:forward page="relativefileURL| <%=expression%>}"/>
如:
<body>
here is aa.
<jsp:forward page="aa.jsp" />
here is bb.
</body>
注意:在使用forward之前,不能有任何内容已经输出到客户端,否则会发生例外。
useBean动作
此动作用来生成一个bean组件,并设定它的id号及使用范围
<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>
id="beanName":定义生成bean组件的名字,不能重名且scope的值也最好一样,否则JSP引擎将认定最先被创建的那个。
scope="page|request|session|application":定义bean的活动范围,bean只有在它定义的范围里才能使用,
在它的活动范围外将无法访问到它。
JSP为它设定的范围有:
page: bean的缺省使用范围
request:作用于任何相同请求的JSP文件中,直到页面执行完毕向客户端发回响应或在此这之前已通过某种方式(如重定向、链接等方式)转到另一个文件为止。还可通过使用Request对象访问bean,如:request.getAttribute(beanName)
session:作用于整个session的生存周期内,在session的生存周期内,对此bean属性的任何改动,都会影响到在此session内的另一page、另一request里对此bean的调用。但必须在创建此bean的文件里事先用page指令指定了session=true。
application:作用于整个application的生存周期内,在application周期内,对此bean属性的任何改动,都会影响到此application内另一page、另一request以及另一session里对此bean的调用。
class="package.class":用class属性指下的类示例一个bean,其中package名必须是类里用关键字package指定的。
type="package.class"
class="package.class" type="package.class"
beanName="{package.class|<%=expression%>}" type="package.class"
如:tt.jsp
<jsp:useBean id="student" scope="page" class="mime.student" />
<%=student.getName()%><br>
<% student.setName("wll"); %>
//=====tt.jsp文件到此============
student.java//此处开始为student.java的内容
package mine;
public class student{
long classno;
String name;
int age;
Boolean sex;
public student(){
classno=12345;
name="aaaa";
age=21;
sex=true;
}
public long getClassno(){
return classno;
}
public void setClassno(long no){
this.classno=no;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age;
}
public boolean getSex(){
return sex;
}
public void setSex(Boolean sex){
this.sex=sex;
}
}
注:
   
  
  
   
scope="page"时,运行test.jsp文件,name的初始值为"aaaa"。虽然在jsp文件
中又重设为"wll",但刷新后仍为"aaaa"
scope="session"时,运行test.jsp文件,name的初始值为"aaaa"。虽然在jsp文
件中又重设为"wll",但刷新后仍为"wll",只要不关闭此窗口,任何刷新或打
开一个新窗口,都输出"wll"。直到关闭所有窗口,再运行test.jsp文件,输
出才会为初始值"aaaa"。
scope="application"时,运行test.jsp文件,name的初始值为"aaaa"。虽然在jsp
文件中又重设为"wll",但刷新后仍为"wll",只要不关闭此窗口,任何刷新或
打开一个新窗口,都输出"wll"。即使关闭所有窗口,再运行test.jsp文件,输
出仍为 "wll"。除非关闭服务后又重启,再运行test.jsp文件,name的输出为
初始值"aaaa"。
scope="request"时,新建一文件test1.jsp内容与test.jsp一样。先在浏览器中运
行test.jsp文件,输出name的值为初始值"aaaa"。再在在浏览器中运行test1.jsp文件,此时输出为"wll",因为它们算是相同的request。
getProperty动作
作用:用来返回一个已被创建的bean组件的属性值:
<jsp:getProperty name="beanId" property="propertyName" />
name:对应着用useBean创建bean组件时id的值
property:指明要得到哪个属性的值
如:得到前例中student组件的属性值:
<jsp:getProperty name="student" property="classno" />
等价:<%=student.classno %>
<jsp:getProperty name="student" property="name" />
<jsp:getProperty name="student" property="age" />
输出结果为:
12345 aaaa 21
setProperty 动作
作用:用来设定一个已被创建的bean组件的属性值:<jsp:setProperty name="beanId" property="propertyName" value="propertyValue"/>name:对应着用useBean创建bean组件时id的值property:指明要想设定属性值的属性名value:为设定的属性值如:前例中student组件,在setProperty中设定的属性<jsp:setProperty name="student" property="classno" value="56789" /><jsp:setProperty name="student" property="name" value="bbbb" /><jsp:setProperty name="student" property="age" value="33" />等价:<% student.age=33;%>输出结果为:56789 bbbb 33
内部对象
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编译器的信息
setAttribute(String name,Object object):用object来初始化某个属性,该属性由name指定
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对象中
使用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地址,后跟所要传递的参数
http://*.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=" http:// *.asp?name=www"
在客户端对象window中:window.open(" http:// *.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()的情况下,只有在检索所有结果集或它生成的更新计数之后语句才完
-------结束!
          try{
             pageContext.getOut().print(value == null ? "":value);
          }catch(java.io.IOException e){
              throw new JspException(e.getMessage());
          }
         return SKIP_BODY;
       }
}
登陆成功welcome.jsp
Welcome Page
-->
欢迎你:
登陆失败loginFailed.jsp
Login Failed
请输入用户名和密码,或者创建一个新用户!
">创建一个新用户


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/35623/showart_274334.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP