jsp我們學(xué)完也有好長一段時(shí)間間了,過程中總結(jié)的一點(diǎn)點(diǎn)基礎(chǔ)知識,拿來與初學(xué)者分享,直到最后做我們一個(gè)小小的項(xiàng)目,寵物醫(yī)院,也是用我們最簡單的工具jcreater4.0來做的,呵,到了ecliplse下才發(fā)現(xiàn),開發(fā)速度如此之快,不過這樣也打好了我們的基礎(chǔ)....不多說了,把所學(xué)到的小小總結(jié)發(fā)來至此吧,愿給初學(xué)者帶來便利,同時(shí)愿高人給以指點(diǎn)不足之處.....
首先來說一下我們jsp的課程:第一部分為servlet技術(shù),包括servelt入門,會話跟蹤,javamal和servlet.第二部分就是jsp技術(shù),包括:jsp簡介,jsp腳本和指令的使用,jsp隱式對象,javabean與jsp中的標(biāo)準(zhǔn)動作,jsp表達(dá)式語言,自定義標(biāo)簽,jsp自定義表簽庫.第三部分就是過濾器的設(shè)計(jì)模式,包括過濾器和mvc設(shè)計(jì)模式.
一.servlet知識及常見錯(cuò)誤和規(guī)律.
1.桌面運(yùn)行程序與web應(yīng)用程序在過程實(shí)質(zhì)是一樣的---基于請求與響應(yīng)的過程.
2.http協(xié)議(超文本傳輸協(xié)議)
1).無狀態(tài):多次請求信息之間無聯(lián)系.
2).用于internet發(fā)送請求和響應(yīng)消息
3).使用端口接收和發(fā)送消息,默認(rèn)為80端口.
端口:為內(nèi)存緩沖區(qū)(多線程接收數(shù)據(jù))
windows: 0---65535端口
0---4096為系統(tǒng)端口
3.什么是servlet?
server let服務(wù)器端小程序.
用來處理客戶端發(fā)送的請求,并由服務(wù)器響應(yīng)給客戶端的java編寫的程序.
servlet只在服務(wù)器運(yùn)行
4.servlet詳解:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
public class myservlet extends httpservlet
{
public void doget(httpservletrequest request,httpservletresponse response)
throws servletexception,ioexception
{
response.setcontenttype("text/html;charset=gb2312");
request.setcharacterencoding("gb2312");
response.sendredirect("login.jsp"); //重定向方法
request.getparameter(""); //讀取客戶端數(shù)據(jù)
/ /以下方法為轉(zhuǎn)發(fā),不同于重定向的是:轉(zhuǎn)發(fā)時(shí)數(shù)據(jù)不丟失.
servletcontext context=this.getservletcontext();
requestdispatcher dispatcher=context.getrequestdispatcher("/welcome.jsp");
dispatcher.forward(request,response);
...//以下方法為包含(用得相對較少)
dispatcher.include(request,response);
}
public void dopost(httpservletrequest request,httpservletresponse response)
throws servletexception,ioexception
{
doget(request,response);
}
}
(2).當(dāng)需要向servlet傳遞參數(shù)的時(shí)候,src="servlet?name=' ' ";
5.執(zhí)行servlet時(shí),發(fā)生下載提示:
(1).可能性一:text/html;charset=gbk中間分號寫成逗號.
(2).可能性二:xml中配置信息出錯(cuò).
(3).可能性三:如定義全局變量時(shí),例:content_typed在以后所用中放在雙引號之中.
(4).可能性四:當(dāng)上面的text/html,charset中寫錯(cuò)字符的時(shí)候,也會提示下載.
6執(zhí)行servlet時(shí),發(fā)生404錯(cuò)誤:
(1).多為xml中配置出錯(cuò).
(2).可能在servlet通信方法中url出錯(cuò).
(3).表單提交時(shí):action路徑.
(4).比較弱智的錯(cuò)誤就是標(biāo)記寫錯(cuò),請仔細(xì)檢查.
7.執(zhí)行servlet時(shí),發(fā)生403錯(cuò)誤:
(1).tomcat下站點(diǎn)里發(fā)生錯(cuò)誤.
8.執(zhí)行servlet時(shí),發(fā)生405錯(cuò)誤:
(1).servlet中沒有post提交方法時(shí).
95.執(zhí)行servlet時(shí),發(fā)生500錯(cuò)誤:
(1).多數(shù)為servlet程序代碼中發(fā)生異常錯(cuò)誤.
10.執(zhí)行時(shí),取出的數(shù)據(jù)為null.就要根據(jù)實(shí)際情況對應(yīng)錯(cuò)誤提示去找.
11.執(zhí)行jsp頁時(shí),發(fā)生500錯(cuò)誤提示....
多數(shù)為jsp頁面在轉(zhuǎn)譯過程中發(fā)生編譯錯(cuò)誤! 甚是嚴(yán)重錯(cuò)誤,可以按提示回頭去找...
二.xml配置
<!--config中的配置信息,當(dāng)中配置需要在servlet中的xml中-->
<servlet>
<init-param>
<param-name>sess</param-name>
<param-class>com.serv<param-class>
</init-param>
<servlet-name>myservlet</servlet-name>
<servlet-class>com.myservetl</servlet-class>
</servlet>
<!--此為對myservlet進(jìn)行映射-->
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<servlet-class>/url</servlet-class>
<servlet-mapping>
<!--context中配置信息-->
<context-param>
<param-name>ses</param-name>
<param-class>com.ser</param-class>
</context-param>
注意:配置信息只能讀取,并且config是在單個(gè)servlet中能訪問,context是全局訪問
三.
========================會話跟蹤技術(shù)總結(jié)========================
用戶授權(quán).
隱藏表單域
url重寫
cookie使用
--------------------------------------------------------------------------------------------
1.會話:是同一客戶端和服務(wù)器之間在同一段時(shí)間的多次請求和響應(yīng).
2.session使用(重點(diǎn))
httpsession session=request.getsession();
session.setattribute("name",object); //附值
session.getattribute(); //取值
session.removeattributer();
3.cookie(類)
1).cookie是什么?
cookie是一段字符串,由http支持,在客戶端可以永久保存.寫入(硬盤).
每次請求,響應(yīng)中都會為cookie留有空間.
2).用法:
cookie cookie=new cookie("name",cookie); //必須指定cookie的鍵與值,且必須為字符串.
response.addcookie(cookie);
cookie.setmaxage(3600); //以秒為單位.
//讀取客戶端發(fā)送過來的cookie,返回值類型為: cookie數(shù)組
request.getcookies();
//循環(huán)讀取鍵與值.
使用過程:(1).生成cookie, new cookie("","")
(2).設(shè)置生存周期 >0,setmaxage(秒).
(3).發(fā)送到客戶端:response.addcookie(cookie);
小常識:(1).一個(gè)網(wǎng)站最多向一個(gè)客戶端寫20個(gè)cookie.
(2).一個(gè)客戶端最多接收300個(gè)cookie.
4.session與cookie這間的關(guān)系:
session的id作為cookie的值在客戶端與服務(wù)器之間進(jìn)行傳遞.
--------------------------------------------------------------------------------------------
四.構(gòu)建實(shí)體bean的原則:
/*
* 1.bean類為公有
* 2.類成員為私有
* 3.必有一個(gè)無參構(gòu)造
* 4.有set()和get()方法
* 5.方法命名為setxxx()或getxxx()方法
*/
五.mvc實(shí)現(xiàn)數(shù)據(jù)封裝
此數(shù)據(jù)封裝標(biāo)準(zhǔn)按mvc總結(jié).
所需內(nèi)容: 1.servlet 2.javabean 3.operbean(dbconnection) 4.jsp
由servlet提取前臺數(shù)據(jù),然后將數(shù)據(jù)封裝于javabean中,再實(shí)例化operbean,調(diào)用operbean中方法,
將javabean對象以參數(shù)的形式傳過去,并進(jìn)行一系列的操作后,返回?cái)?shù)據(jù)存入arraylist中或者其它集合內(nèi),并將集合對象封裝session對象中,便于在前臺取值.
servlet控制:
........
arraylist lis=new arraylist();
string name=request.getparameter("username");
javabean bean=new javabean();
bean.setname(name);
operbean oper=new operbean();
lis=oper.opermethod(bean);
httpsession session=request.getsession();
session.setattribute("list",lis);
operbean邏輯:
...
public arraylist opermethod(javabean bean)
{
arraylist lis=new arraylist();
string usr=bean.getname("name");
string sql="select * from student where name='"+usr+"'";
dbconnection db=new dbconnection();
...//操作數(shù)據(jù)業(yè)務(wù)
return lis;
}
前臺業(yè)務(wù):
...
arraylist list=(arraylist)session.getattribute("lis");
iterator ite=list.iterator();
while(ite.harnext()) //遍歷輸出
{
javabean bean=(javabean)ite.next();
.
//取bean中值
}
//由此可以進(jìn)行"用戶登陸","數(shù)據(jù)的增刪改查","注銷登陸"等操作.....
以上所有jsp技術(shù)都是沒有與struts等框架相關(guān)的,只是簡單的mvc思想,只有懂得以上簡單的思想,才可以進(jìn)一步的對框架這些高層次的東西鉆研,我感覺是如此,畢竟我也是個(gè)初學(xué)者,還有好多知識不懂,也在不停的學(xué)習(xí)之中,如果有哪個(gè)朋友有好的見意或者好的學(xué)習(xí)方法,請多多指教!
國內(nèi)最大的酷站演示中心!新聞熱點(diǎn)
疑難解答
圖片精選