亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標(biāo)題:
一些基本的 JSP知識
[打印本頁]
作者:
kangxuzk
時(shí)間:
2007-04-09 19:04
標(biāo)題:
一些基本的 JSP知識
自定義標(biāo)簽類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); //成功轉(zhuǎn)發(fā)到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關(guān)鍵部分
requestParameter
tags.GetRequestParameterTag
Simplest example: inserts one line of output
Empty
property
true
true
自定義標(biāo)簽類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
請輸入用戶名和密碼,或者創(chuàng)建一個(gè)新用戶!
">創(chuàng)建一個(gè)新用戶
新建用戶newAccount.jsp
New Account
創(chuàng)建新用戶
">
用戶名:
密碼:
密碼問題:
注冊的控制器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
無標(biāo)題文檔
新用戶已經(jīng)創(chuàng)建!
JSP基本指令------
1--腳本標(biāo)記
聲明將要用到的語言:<%@ page language="java" %> 指明jsp指令,表明后面的腳本代碼將采用java語言語法
引用包中的類:<%@ page import="java.util.*" %> 表示要用到j(luò)ava.util包里的類
聲明變量:<%! int count=0;%>聲明一個(gè)整形變量,并賦初值0
聲明方法:
<%!
int show(int val){
return val;
}
%>
輸出表達(dá)式:<%=2*X%> 直接輸出表達(dá)式的值,X必須是前面已聲明過的變量(不能用分號),相當(dāng)于asp中的 <%=%>
jsp注釋符:<%--Here are comments--%> 表示是Jsp注釋,在服務(wù)器端將被忽略,也不轉(zhuǎn)化為HTML的注釋,在客戶端查看源碼時(shí)是看不到的。
包含另一個(gè)jsp文件:<% jsp:include page="another:jsp" %> 表示在當(dāng)前頁面插入另一個(gè)文件another.jsp的內(nèi)容
普通的jsp語句:
<%
for(int i=0,i<10,i++)//jsp的正文部分
out.println(i+"<br>");
%>
2.指令---Jsp的指令有page、include兩種
page指令(屬性:6個(gè))
language屬性:
<%@ page language="java" %>//指明所用的的語言
import屬性:
<%@ page import="java.util.*" %>//載入包
注意:在java中,要載入多個(gè)包,就用 import 分別指用,并用分號隔開;
在jsp中,如用一個(gè) import 指明多個(gè)包,用逗號隔開。
如:<%@ page import="java.util.*,java.lang.*" %>
也可<%@ page import="java.util.*" %>
<%@ page import=" java.lang.*" %>(但不主張這樣用,不規(guī)范。
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",則會出現(xiàn)編譯錯(cuò)。
errorPage屬性:
指當(dāng)前頁面程序發(fā)生錯(cuò)誤時(shí),由errorPage指定的程序來處理寫法:
<%@ page errorPage="errorPage.jsp" %>
如:test.jsp: <%@ page errorPage="errorPage.jsp" %>
<%!int i=0;%>
<%=7/i%>
errorPage.jsp:
<%@ page isErrorPage="true" %>
<%=exception%>
運(yùn)行test.jsp,將會看到被0除的錯(cuò)誤信息。
isErrorPage屬性:
指明了當(dāng)前程序是否為另一程序的例外處理程序。不論它是否設(shè)置,例外都會導(dǎo)向當(dāng)前程序,問題在于當(dāng)前程序能否得到此例外的對象。如設(shè)定為true,將會產(chǎn)生發(fā)生的例外的一個(gè)對象exception,并可以在代碼中使用它;若設(shè)定了false,使用exception程序?qū)诰幾g時(shí)出錯(cuò)。如:將上例的true改為false,將會出現(xiàn)以下錯(cuò)誤:
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指令
作用:是用來向當(dāng)前頁中插入一個(gè)靜態(tài)文件的內(nèi)容,這個(gè)文件可能是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完成的功能主要在此實(shí)現(xiàn)。目前用的基本是Java語言。
代碼塊里必須完全符合Java語法,但可以配合用HTML文本。其實(shí)不論是什么,都會被轉(zhuǎn)換為Servlet,在Servlet中它們是一樣的。
如:先輸出5個(gè)空行,再輸出"hello"
正確的:<% for(int i=0;i<5;i++)%>
<br>
<%;%>
hello
<br>錯(cuò)誤的:(一行br;一行hello)===============
<% for(int i=0;i<5;i++)%>
<br>
hello
錯(cuò)誤的等價(jià)于:<% for(int i=0;i<5;i++){%>
<br>
hello
<%}%>
動(dòng)作(<%jsp%>)
jsp提供的動(dòng)作指令有:include、forward、useBean、getProperty、setProperty
include 動(dòng)作
jsp向當(dāng)前頁面加入另一文件的方法。
<jsp:include page="relativefileURL" flush="true"/>
forward動(dòng)作
把當(dāng)前頁面重導(dǎo)到另一頁面上,客戶端看到的地址是A頁面的地址,
而實(shí)際內(nèi)容確是B頁面的內(nèi)容。
<jsp:forward page="relativefileURL| <%=expression%>}"/>
如:
<body>
here is aa.
<jsp:forward page="aa.jsp" />
here is bb.
</body>
注意:在使用forward之前,不能有任何內(nèi)容已經(jīng)輸出到客戶端,否則會發(fā)生例外。
useBean動(dòng)作
此動(dòng)作用來生成一個(gè)bean組件,并設(shè)定它的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引擎將認(rèn)定最先被創(chuàng)建的那個(gè)。
scope="page|request|session|application":定義bean的活動(dòng)范圍,bean只有在它定義的范圍里才能使用,
在它的活動(dòng)范圍外將無法訪問到它。
JSP為它設(shè)定的范圍有:
page: bean的缺省使用范圍
request:作用于任何相同請求的JSP文件中,直到頁面執(zhí)行完畢向客戶端發(fā)回響應(yīng)或在此這之前已通過某種方式(如重定向、鏈接等方式)轉(zhuǎn)到另一個(gè)文件為止。還可通過使用Request對象訪問bean,如:request.getAttribute(beanName)
session:作用于整個(gè)session的生存周期內(nèi),在session的生存周期內(nèi),對此bean屬性的任何改動(dòng),都會影響到在此session內(nèi)的另一page、另一request里對此bean的調(diào)用。但必須在創(chuàng)建此bean的文件里事先用page指令指定了session=true。
application:作用于整個(gè)application的生存周期內(nèi),在application周期內(nèi),對此bean屬性的任何改動(dòng),都會影響到此application內(nèi)另一page、另一request以及另一session里對此bean的調(diào)用。
class="package.class":用class屬性指下的類示例一個(gè)bean,其中package名必須是類里用關(guān)鍵字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的內(nèi)容
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"時(shí),運(yùn)行test.jsp文件,name的初始值為"aaaa"。雖然在jsp文件
中又重設(shè)為"wll",但刷新后仍為"aaaa"
scope="session"時(shí),運(yùn)行test.jsp文件,name的初始值為"aaaa"。雖然在jsp文
件中又重設(shè)為"wll",但刷新后仍為"wll",只要不關(guān)閉此窗口,任何刷新或打
開一個(gè)新窗口,都輸出"wll"。直到關(guān)閉所有窗口,再運(yùn)行test.jsp文件,輸
出才會為初始值"aaaa"。
scope="application"時(shí),運(yùn)行test.jsp文件,name的初始值為"aaaa"。雖然在jsp
文件中又重設(shè)為"wll",但刷新后仍為"wll",只要不關(guān)閉此窗口,任何刷新或
打開一個(gè)新窗口,都輸出"wll"。即使關(guān)閉所有窗口,再運(yùn)行test.jsp文件,輸
出仍為 "wll"。除非關(guān)閉服務(wù)后又重啟,再運(yùn)行test.jsp文件,name的輸出為
初始值"aaaa"。
scope="request"時(shí),新建一文件test1.jsp內(nèi)容與test.jsp一樣。先在瀏覽器中運(yùn)
行test.jsp文件,輸出name的值為初始值"aaaa"。再在在瀏覽器中運(yùn)行test1.jsp文件,此時(shí)輸出為"wll",因?yàn)樗鼈兯闶窍嗤膔equest。
getProperty動(dòng)作
作用:用來返回一個(gè)已被創(chuàng)建的bean組件的屬性值:
<jsp:getProperty name="beanId" property="propertyName" />
name:對應(yīng)著用useBean創(chuàng)建bean組件時(shí)id的值
property:指明要得到哪個(gè)屬性的值
如:得到前例中student組件的屬性值:
<jsp:getProperty name="student" property="classno" />
等價(jià):<%=student.classno %>
<jsp:getProperty name="student" property="name" />
<jsp:getProperty name="student" property="age" />
輸出結(jié)果為:
12345 aaaa 21
setProperty 動(dòng)作
作用:用來設(shè)定一個(gè)已被創(chuàng)建的bean組件的屬性值:<jsp:setProperty name="beanId" property="propertyName" value="propertyValue"/>name:對應(yīng)著用useBean創(chuàng)建bean組件時(shí)id的值property:指明要想設(shè)定屬性值的屬性名value:為設(shè)定的屬性值如:前例中student組件,在setProperty中設(shè)定的屬性<jsp:setProperty name="student" property="classno" value="56789" /><jsp:setProperty name="student" property="name" value="bbbb" /><jsp:setProperty name="student" property="age" value="33" />等價(jià):<% student.age=33;%>輸出結(jié)果為:56789 bbbb 33
內(nèi)部對象
out(向客戶端輸出各種數(shù)據(jù)類型)
重要方法:
out.print(類型) 或 out.println(類型):換行輸出
out.newLine():輸出一個(gè)換行符號
out.flush():輸出緩沖區(qū)的數(shù)據(jù)
out.close():關(guān)閉輸出流
out.clearBuffer():清除緩沖區(qū)里的數(shù)據(jù),并把數(shù)據(jù)寫到客戶端
out.clear():清除緩沖區(qū)里的數(shù)據(jù),但不把數(shù)據(jù)寫到客戶端
out.getBufferSize():獲得緩沖區(qū)的大小,緩沖區(qū)的大小可用<%@ page buffer="size" %>設(shè)置
out.getRemaining():獲得緩沖區(qū)沒有使用的空間的大小
out.isAutoFlush():返回布爾值,若auto flush則返回true,否則返回false。是否auto fush我們可用<%@ page is AutoFlush="true/false"%>來設(shè)置
注意:中文顯示問題
若是直接賦值的中文字符串,用<%@ page contentType="text/html; charset=gb2312" %>就可正常顯示。但不能用getStr(String name)函數(shù)或類似的函數(shù)轉(zhuǎn)換內(nèi)碼,否則不能正常顯示中文。
若是request傳過來的中文字符串,必須要用getStr(String name)函數(shù)或類似的函數(shù)轉(zhuǎn)換內(nèi)碼,否則不能正常顯示中文。
如:
String aa=str;
byte[] aa=aa.getBytes("ISO8859-1");
String bb=new String(aa);
在不同平臺、不同的服務(wù)器jsp中文問題的解決方法各不相同,可自行試驗(yàn)。
request(接受客戶端輸入的信息)
作用:主要用于接受客戶端通過http協(xié)議連接傳輸?shù)椒⻊?wù)器端的數(shù)據(jù)。
方法:
getCookies():返回客戶端的cookie對象,結(jié)果是一個(gè)cookie數(shù)組
getHeader(String name):獲得http協(xié)議定義的傳送文件頭信息,如:request.getHeader("User-agent")返回客戶端瀏覽器的版本號、類型
getAttribute(String name):返回name指定的屬性值,若不存在指定的屬性,就返回空值(null)。
getattributeNames():返回request對象所有屬性的名字,結(jié)果集是一個(gè)Enumeration(枚舉)類的實(shí)例。
getHeaderNames():返回所有request header的名字,結(jié)果集是一個(gè)Enumeration(枚舉)類的實(shí)例。
getHeaders(String name):返回指定名字的request header的所有值,結(jié)果集是一個(gè)Enumeration(枚舉)類的實(shí)例。
getMethod():獲得客戶端向服務(wù)器端傳送數(shù)據(jù)的方法有GET、POST、PUT等類型。
getParameter(String name):獲得客戶端傳送給服務(wù)器端的參數(shù)值,該參數(shù)由name指定。
get parameterNames():獲得客戶端傳送給服務(wù)器端的所有的參數(shù)名,結(jié)果集是一個(gè)Enumeration(枚舉)類的實(shí)例。
getParameterValues(String name):獲得指定參數(shù)所有值。
getQueryString()獲得查詢字符串,該串由客戶端以GET方法向服務(wù)器端傳送。
getRequestURI():獲得發(fā)出請求字符串的客戶端地址。
getServletPath():獲得客戶端所請求的腳本文件的文件路徑。
setAttribute(String name,Java.lang.Object o):設(shè)定名字為name的。request參數(shù)值,該值由Object類型的o指定。
getServerName():獲得服務(wù)器的名字。
getServerPort():獲得服務(wù)器的端口號。
getRemoteAddr():獲得客戶端的IP地址。
getRemoteHost():獲得客戶端電腦的名字,若失敗,則返回客戶端電腦的IP地址。
getProtocol():獲取客戶端向服務(wù)器端傳送數(shù)據(jù)所依據(jù)的協(xié)議名稱,如http/1.1
application(保存用戶信息)
作用:一旦創(chuàng)建,除非服務(wù)器關(guān)閉,否則將一直保持下去
application.setAttribute("name",val)
request.setAttribute("name",val)
方法:getAttribute(String name):返回由name指定名字的application對象屬性的值,這是個(gè)Object對象
getattributeNames():返回所有application對象屬性的名字,結(jié)果集是一個(gè)Enumeration(枚舉)類的實(shí)例
getInitParameter(String name): 返回application栽個(gè)屬性的初始值,此屬性由name指定
getServerInfo():獲得當(dāng)前版本Servlet編譯器的信息
setAttribute(String name,Object object):用object來初始化某個(gè)屬性,該屬性由name指定
response(控制http連接)
作用:向客戶端發(fā)送數(shù)據(jù),如Cookie、HTTP文件關(guān)信息等。
方法:
addCookie(Cookie cookie):添加1個(gè)Cookie對象,用來保存客戶端的用戶信息。用request的getcookies()方法可獲得這個(gè)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):向客戶端發(fā)送錯(cuò)誤信息,如:505:服務(wù)器內(nèi)部錯(cuò)誤;404:網(wǎng)頁找不到錯(cuò)誤
如:response.sendError(response.SC_NO_CONTENT);
setHeader(String name,String value):設(shè)定指定名字的HTTP文件頭的值,若該值存在,它將會被新值覆蓋
如1:
讓網(wǎng)頁每隔5秒刷新一次
<% response.setHeader("Refresh","5");%>
the current dateis:<%=new Date()%>
如2:利用response對象設(shè)定HTTP頭
<% response.setContentType("Application/pdf");
response.setHeader("content-disposition", "attachment;filename=\"syntax.pdf\"");
%>
sendRedirect("error.html")//重定向功能
exception(處理異常和錯(cuò)誤)
作用:處理JSP文件在執(zhí)行時(shí)所有發(fā)生的錯(cuò)誤和異常。有3個(gè)內(nèi)建方法。
注意:必須在<%@ page isErrorPage="true" %>的情況下才可以使用Exception對象
getMessage():返回錯(cuò)誤信息
printStackTrace():以標(biāo)準(zhǔn)錯(cuò)誤的形式輸出一個(gè)錯(cuò)誤和錯(cuò)誤的堆棧
toString():以字符串的形式返回1個(gè)對異常的描述
session(保存用戶信息)
作用:分別保存每一個(gè)用戶的信息
session.putValue("name",val)
session.getValue("name")
注意:session中保存和檢索的信息不能是基本數(shù)據(jù)類型,而必須是JAVA的相應(yīng)的Object對象。
方法:
getAttribute(String name):獲得指定名字的屬性,若該屬性不存在,將返回null
getattributeNames():返回session對象中存儲的第一個(gè)屬性對象,結(jié)果集是一個(gè)Enumeration類的實(shí)例
getCreationTime():返回該session對象創(chuàng)建的時(shí)間,以毫秒計(jì),從1970年1月1日起
getId():每生成一個(gè)session對象,服務(wù)器都會給其一個(gè)不會重復(fù)的編號,此方法返回當(dāng)前session的編號
getLastAccessedTime():返回當(dāng)前session對象最后1次被操作的時(shí)間,返回自1970年1月1日起至今的毫秒數(shù)
getMaxInactiveInterval():獲得session對象的生存時(shí)間
removeAttribute(String name):刪除指定的屬性(包括屬性名、屬性值)
setAttribute(String name,Java.lang.Object value):設(shè)定指定名字的屬性值,并將其存儲在session對象中
使用Java Bean組件
特點(diǎn):是可以在任何地方重用包括了可以在應(yīng)用程序中、其它組件、文檔、web站點(diǎn)和應(yīng)用程序構(gòu)造器工具的多種方案中再利用。
JavaBean的概念
JavaBean是一種獨(dú)立于平臺和結(jié)構(gòu)的應(yīng)用程序接口,它本身可以忽略內(nèi)部的結(jié)構(gòu)及細(xì)節(jié)問題,只需定義其外部的特征及對外功能就行。
它有三種接口面可以獨(dú)立對外進(jìn)行開發(fā),就是:屬性、方法和事件
JavaBean的屬性
JSP組件的屬性有兩種:單值屬性、索引屬性
單值屬性:
相當(dāng)于平時(shí)編程中定義的一個(gè)成員變量,它只能有一個(gè)數(shù)據(jù)值,這個(gè)數(shù)據(jù)值的類型可以是Java中的任意數(shù)據(jù)類型,包括類和接口。
如:
int counter;
float tax;
String name;
Date datetime;
注:一種特殊的單值屬性(布爾屬性),它只有兩種允許的值:true、false
索引屬性:
相當(dāng)于平時(shí)說的數(shù)組,當(dāng)存放一批同類型的數(shù)據(jù)時(shí),需要用到索引屬性。
如:int ID[];
String name[];
Float score[];
JavaBean的方法
方法包括構(gòu)造方法和訪問方法。
構(gòu)造方法:
類似于類中的構(gòu)造器(即對它及它的成員變量進(jìn)行初始化),它的方法名要和此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中定義和使用的方法差不多),注意它的取名規(guī)則:
讀取一個(gè)屬性:getXXX()
改寫一個(gè)屬性:setXXX()
訪問單值屬性:如對上面的counter單值屬性,它的兩個(gè)訪問方法可以為:
讀取屬性值:
public int getCounter{
return counter;
}
改寫屬性值:
public void setCounter(int counter){
this.counter=counter;
}
訪問布爾型的單值屬性:對讀取屬性值采用isXXX()方法
如對上面的布爾型的屬性whizkid的訪問可以為:
public boolean isWhizkid(){
return whizkid;
}
訪問索引屬性:有時(shí)要定義好幾個(gè)訪問方法,但它們的取名規(guī)則還是一樣的,如對上面的姓名屬性,它的讀取和改寫方法需這樣定義:
讀取索引屬性中的一個(gè)屬性值:
public String getName(int index){
return name[index];
}
讀取索引屬性中的所有屬性值:
public String[] getName(){
return name;
}
改寫索引屬性中的一個(gè)屬性值:
public void setName(int index,String str){
name[index]=str;
}
改寫索引屬性中的所有屬性值:
public void setName(String[] str){
name=str;
}
在JSP中創(chuàng)建用JavaBean編寫的一個(gè)bean,實(shí)際上就是創(chuàng)建此類的一個(gè)對象。
客戶端做的工作
客戶端的工作可分兩部分:
一、向服務(wù)器端發(fā)出請求即向服務(wù)器端發(fā)出提交
二、在客戶端進(jìn)行校驗(yàn)、以及頁面的修飾等功能
客戶端提交的方法
客戶端的提交方法分兩種:get與post提交
get可傳遞的信息只有2kb左右,而且是明碼傳送信息,所有的信息均可在地址欄中看見。
post可傳遞大量信息,加密傳送,所有的信息均可在地址欄中是不可見的。
post提交
所有的post提交只能在form中產(chǎn)生,提交方式又分兩種:直接提交(submit提交)、間接提交(腳本提交)
1)直接提交:點(diǎn)擊提交按鈕,立即發(fā)生提交
<form method=post action=*.asp>
<input type=submit value="注冊">
注:submit按鈕有一個(gè)默認(rèn)事件,就是提交
<input type=submit value="注冊" >
注:在提交前,首先在屏幕上返回一個(gè)警告框"hello",若return的是true,則頁面發(fā)生提交;若return的是false,頁面不會發(fā)生提交。</form>
2)間接提交:是指點(diǎn)擊按鈕本身并不能完成提交,而只有通過腳本才能完成的提交,稱為間接提交。
<input type=button value="注冊" >
注:
在onclick處還可為onmousedown、onmouseup等事件名稱
button只是普通按鈕,本身并不能發(fā)生提交,只能通過onclick指定的腳本程序才能完成提交
點(diǎn)擊"注冊"后,先執(zhí)行onclick事件觸發(fā)的函數(shù),若返回值為true則發(fā)生提交,否則提交中止。
get提交
get提交發(fā)生在form表單和url中
1)在form中產(chǎn)生的
<form method=get action=*.asp>
2)在所有的url中產(chǎn)生的
在地址欄中輸入url地址,后跟所要傳遞的參數(shù)
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")
服務(wù)器端做的工作
獲得客戶端信息的方法是通過request對象來完成的。
客戶端提交到服務(wù)器端的信息分為三類:
第一類:客戶機(jī)信息(包括客戶端的ip地址、端口號、主機(jī)名、提交方式等等)
第二類:通過form或url方式提交到服務(wù)器端的信息
第三類:cookie信息
獲得第一類信息用:
request.getHeader("User-agent")返回客戶端瀏覽器的版本號、類型
getHeader(String name):獲得http協(xié)議定義的傳送文件頭信息
request. getMethod():獲得客戶端向服務(wù)器端傳送數(shù)據(jù)的方法有GET、POST、PUT等類型
request. getRequestURI():獲得發(fā)出請求字符串的客戶端地址
request. getServletPath():獲得客戶端所請求的腳本文件的文件路徑
request. getServerName():獲得服務(wù)器的名字
request.getServerPort():獲得服務(wù)器的端口號
request.getRemoteAddr():獲得客戶端的IP地址
request.getRemoteHost():獲得客戶端電腦的名字,若失敗,則返回客戶端電腦的IP地址
request.getProtocol():
request.getHeaderNames():返回所有request header的名字,結(jié)果集是一個(gè)Enumeration(枚舉)類的實(shí)例
request.getHeaders(String name):返回指定名字的request header的所有值,結(jié)果集是一個(gè)Enumeration(枚舉)類的實(shí)例
獲得第二類 get 信息用:
request. getQueryString("變量名呀或控件名")獲得查詢字符串,該串由客戶端以GET方法向服務(wù)器端傳送
獲得第二類 post 信息用:
request.getParameter(String name):獲得客戶端傳送給服務(wù)器端的參數(shù)值,該參數(shù)由name指定
request.getParameterNames():獲得客戶端傳送給服務(wù)器端的所有的參數(shù)名,結(jié)果集是一個(gè)Enumeration(枚舉)類的實(shí)例
request.getParameterValues(String name):獲得指定參數(shù)所有值
獲得第三類Cookie信息用:
request.getCookies( "cookie變量名"):返回客戶端的cookie對象,結(jié)果是一個(gè)cookie數(shù)組
數(shù)據(jù)庫初級部分 為了大家方便,以ACCESS為例
配置步驟:
在"開始"——"設(shè)置"——"控制面板"——"管理工具"——"數(shù)據(jù)源(ODBC)"——"系統(tǒng)DSN"——"添加"——"選擇數(shù)據(jù)源驅(qū)動(dòng)程序"——"完成"——"ODBC安裝填寫數(shù)據(jù)源名,點(diǎn)擊‘確定’"——"完成"即可。
數(shù)據(jù)庫連接的五要素:
IP地址
端口號(端口號對某個(gè)數(shù)據(jù)庫服務(wù)是基本固定的,除非特別設(shè)定)意味著對應(yīng)的數(shù)據(jù)庫的驅(qū)動(dòng)程序
選擇數(shù)據(jù)庫
帳號、密碼(是分配給數(shù)據(jù)庫的)
發(fā)出SQL語句(通過Statement對象發(fā)送)
JDBC原理
JDBC是JAVA與數(shù)據(jù)的連接。因?yàn)镺DBC是完全用C語言編寫的,而JAVA中實(shí)現(xiàn)與C語言程序的通信是比較困難的,因此就產(chǎn)生了由JAVA語言編寫的用于JAVA程序與數(shù)據(jù)庫連接的接口技術(shù)。
JDBC與數(shù)據(jù)庫的連接
JDBC與具體的某種數(shù)據(jù)庫連接,是直接通過JDBC API類庫中的類來自動(dòng)裝載驅(qū)動(dòng)程序的。此類庫一般在java.sql包中,它包含了用于實(shí)現(xiàn)與數(shù)據(jù)庫連接的其它功能的類,包括與數(shù)據(jù)庫建立連接、傳送查詢和接受查詢結(jié)果。以下四個(gè)類的詳細(xì)介紹:
作用:
與數(shù)據(jù)庫建立連接
發(fā)送SQL語句
處理結(jié)果
connection cn=DriverManager.getConnection("jdbc:odbc:wombat","login","password");
Statement stmt=cn.createStatement();//發(fā)送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");
}//處理結(jié)果
DriverManager類
此類用于裝載驅(qū)動(dòng)程序,它所有的成員都是靜態(tài)成員,所以在程序中無須對它進(jìn)行實(shí)例化,直接通過類名就可以訪問它。
DriverManager類是JDBC的管理層,作用于用戶和驅(qū)動(dòng)程序間加載驅(qū)動(dòng)程序
Class.forName("公司名.數(shù)據(jù)庫名.驅(qū)動(dòng)程序名")
如:Class.forName("sun.jdbc.odbc.jdbcOdbcDriver")
建立連接
加載Driver類并在DriverManager類注冊后,就可用來與數(shù)據(jù)庫建立連接。當(dāng)調(diào)用Driver.Manager.getConnection()發(fā)出連連接請求時(shí),DriverManager將檢查每個(gè)驅(qū)動(dòng)程序,看它是否可以建立連接。
方法:Connection getConnection(String url,String user,String password)
其中user和password是登錄數(shù)據(jù)庫的用戶和密碼
第一個(gè)參數(shù)是指向數(shù)據(jù)庫的url,它的格式如下:
jdbc:(subprotocol):(subname)
subprotocol:子協(xié)議,指定連接何種數(shù)據(jù)庫或用什么方式連接數(shù)據(jù)庫
subname:確立一個(gè)連接,可以是一個(gè)數(shù)據(jù)源名,也可以是指向一個(gè)網(wǎng)上數(shù)據(jù)庫
如:以下是通常用驅(qū)動(dòng)程序(JDBC-ODBC橋驅(qū)動(dòng)程序),并連一個(gè)student數(shù)據(jù)源,用匿名登錄的的示例:
Class.forName("sun.jdbc.odbc.jdbcOdbcDriver");//加載驅(qū)動(dòng)程序
String url="jdbc:odbc:student";
Connection cn=DriverManager.getConnection(url,"anonymous","");
GetConnection():返回一個(gè)連接類對象。若成功,此對象就指向此數(shù)據(jù)庫的一個(gè)連接;否則,此對象將為空null
Connection類
connection類是指向同一個(gè)數(shù)據(jù)庫的連接。
作用:管理指向數(shù)據(jù)庫的連接,如:向數(shù)據(jù)庫發(fā)送查詢和接收數(shù)據(jù)庫的查詢結(jié)果都是在它基礎(chǔ)上的;完成同數(shù)據(jù)庫的連接的所有任務(wù)之后關(guān)閉此連接。
方法:
Statement createStatment():新建一個(gè)Statement對象,此對象可以向數(shù)據(jù)庫發(fā)送查詢信息
void close():關(guān)閉同數(shù)據(jù)庫的連接并釋放占有的JDBC資源
Boolean isClose():判斷是否仍與數(shù)據(jù)庫連接
Statement類
作用:Statement對象用于將SQL語句發(fā)送到數(shù)據(jù)庫中。
創(chuàng)建Statement對象
建立了到特定數(shù)據(jù)庫的連接后,就可用該連接發(fā)送SQL語句。Statement對象用Connection的方法createStatement創(chuàng)建。
Connection cn=DriverManager.getconnection(rul,"sunny","");
statement stmt=cn.createStatement();
為了執(zhí)行Statement對象,被發(fā)送到數(shù)據(jù)庫的SQL語句將被作為參數(shù)提供給Statement的方法
ResultSet rs=stmt.executeQuery("select a,b,c from table2");
使用Statement對象執(zhí)行語句
Statement接口提供了三種執(zhí)行SQL語句的方法
executeQuery():用于產(chǎn)生單個(gè)結(jié)果集的語句,如:select語句
executeUpdate():用于執(zhí)行insert、update或delete、語句等,返回值是一個(gè)整數(shù),指示受影響的行數(shù)(即更新計(jì)數(shù))
execute():用于執(zhí)行返回多個(gè)結(jié)果集、多個(gè)更新計(jì)數(shù)或二者組合的語句
語句完成
語句在已執(zhí)行且所有結(jié)果返回時(shí),即認(rèn)為已完成。
對于返回一個(gè)結(jié)果集的executeQuery()方法,在檢索完ResultSet對象的所有行時(shí)該語句完成。
對于方法executeUpdate(),當(dāng)它執(zhí)行時(shí)語句即完成
在少數(shù)調(diào)用execute()的情況下,只有在檢索所有結(jié)果集或它生成的更新計(jì)數(shù)之后語句才完成
關(guān)閉Statement對象
Statement對象將由Java垃圾收集程序自動(dòng)關(guān)閉。但我們最好顯示地關(guān)閉它們,因?yàn)闀⒓瘁尫艛?shù)據(jù)管理系統(tǒng)資源,有助避免潛在內(nèi)存問題。
主要方法
ResultSet executeQuery(String sql):返回一個(gè)靜態(tài)的sql查詢結(jié)果
int executeUpdate(String sql):查詢一行sql聲明中insert、update、delete的數(shù)目或返回0
void close():關(guān)閉同數(shù)據(jù)庫的連接和所占有的JDBC資源
ResultSet類(紀(jì)錄集)
作用:裝載查詢結(jié)果,并可以通過它的不同方法提取出查詢結(jié)果。ResultSet包含符合SQL語句中條件的所有行,且它通過一套get方法(這些get方法可以訪問當(dāng)前行中的不同列)提供了對這些行中數(shù)據(jù)的訪問。
ResultSet.next():將紀(jì)錄指針移動(dòng)到ResultSet紀(jì)錄集的下一行,使之成為當(dāng)前行。
注:紀(jì)錄集是一張二維表,其中有查詢所返回的列標(biāo)題及相應(yīng)的值。
對于方法executeUpdate(),當(dāng)它執(zhí)行時(shí)語句即完成
在少數(shù)調(diào)用execute()的情況下,只有在檢索所有結(jié)果集或它生成的更新計(jì)數(shù)之后語句才完
-------結(jié)束!
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
請輸入用戶名和密碼,或者創(chuàng)建一個(gè)新用戶!
">創(chuàng)建一個(gè)新用戶
本文來自ChinaUnix博客,如果查看原文請點(diǎn):
http://blog.chinaunix.net/u1/35623/showart_274334.html
歡迎光臨 Chinaunix (http://www.72891.cn/)
Powered by Discuz! X3.2