小技巧
- 快速向下復(fù)制不能用--把Intel快捷鍵先修改為其它按鍵涉波,然-后再禁止酷师,保存。這樣你的eclipse中的Ctrl+alt+down就可用了
- <load-on-startup>3</load-on-startup>優(yōu)先級(jí)寫中間數(shù),防止別人會(huì)有更優(yōu)先數(shù)字(web.xml中會(huì)讓servlet在tomcat啟動(dòng)時(shí)創(chuàng)建)
- 代碼模板: java-templates
package ${enclosing_package};
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ${primary_type_name} extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().write("hello haohao...");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
- web地址正反斜杠均可
- 獲取地址兩種方式狸棍,相對(duì)于web工程和相對(duì)于src(classes)的
context.getrealpath(相對(duì)于web工程【copy到tomcat下的】路徑)
LoginServlet.class.getClassLoader().getResource(相對(duì)于src相對(duì)路徑).getPath();
在tomcat下同樣有編譯的class文件而此時(shí)
- 環(huán)境不一致就buildpath中重新導(dǎo)入system
遇到緩存問題,刪包重新加載
- Servlet
- Servlet 運(yùn)行在服務(wù)端的Java小程序味悄,是sun公司提供一套規(guī)范(接口)隔缀,用來處理客戶端請(qǐng)求、響應(yīng)給瀏覽器的動(dòng)態(tài)資源傍菇。但servlet的實(shí)質(zhì)就是java代碼猾瘸,通過java的API 動(dòng)態(tài)的向客戶端輸出內(nèi)容
- Servlet的API(生命周期)
(1)Servlet接口中的方法
1)init(ServletConfig config)
何時(shí)執(zhí)行:servlet對(duì)象創(chuàng)建的時(shí)候執(zhí)行
ServletConfig : 代表的是該servlet對(duì)象的配置信息
2)service(ServletRequest request,ServletResponse response)
何時(shí)執(zhí)行:每次請(qǐng)求都會(huì)執(zhí)行
ServletRequest :代表請(qǐng)求 認(rèn)為ServletRequest 內(nèi)部封裝的是 http請(qǐng)求的信息
ServletResponse :代表響應(yīng) 認(rèn)為要封裝的是響應(yīng)的信息
3)destroy()
何時(shí)執(zhí)行:servlet銷毀的時(shí)候執(zhí)行
(2)HttpServlet類的方法
1)init()
2)doGet(HttpServletRequest request,HttpServletResponse response)最終執(zhí)行的是service方法
3)doPost(HttpServletRequest request,HttpServletResponse response)
4)destroy()
(3)Servlet的生命周期(面試題)
1)Servlet何時(shí)創(chuàng)建
默認(rèn)第一次訪問servlet時(shí)創(chuàng)建該對(duì)象
2)Servlet何時(shí)銷毀
服務(wù)器關(guān)閉servlet就銷毀了
3)每次訪問必然執(zhí)行的方法
service(ServletRequest req, ServletResponse res)方法
- 其中url-pattern的配置方式:完全匹配 訪問的資源與配置的資源完全相同才能訪問到
- 目錄匹配 格式:/虛擬的目錄../* *代表任意只要前面路徑符合下面不論些什么都會(huì)鏈接到這里
- 擴(kuò)展名匹配 格式:*.擴(kuò)展名
注意:第二種與第三種不要混用 /aaa/bbb/*.abcd(錯(cuò)誤的)
2.服務(wù)器啟動(dòng)實(shí)例化Servlet配置
Servlet的何時(shí)創(chuàng)建:默認(rèn)第一次訪問時(shí)創(chuàng)建
為什么是默認(rèn)?
當(dāng)在servlet的配置時(shí) 加上一個(gè)配置 <load-on-startup> servlet對(duì)象在服務(wù)器啟動(dòng) 時(shí)就創(chuàng)建
3.缺省Servlet
可以將url-pattern配置一個(gè)/丢习,代表該servlet是缺省的servlet
什么是缺省的servlet牵触?
當(dāng)你訪問資源地址所有的servlet都不匹配時(shí) , 缺省的servlet負(fù)責(zé)處理
其實(shí)咐低,web應(yīng)用中所有的資源的響應(yīng)都是servlet負(fù)責(zé)揽思,包括靜態(tài)資源
- 4.歡迎頁(yè)面(先是工程下web.xml,如果沒有則會(huì)找到service的全局web.xml)
2.ServletContext對(duì)象
- ServletContext代表是一個(gè)web應(yīng)用的環(huán)境(上下文)對(duì)象,ServletContext對(duì)象 內(nèi)部封裝是該web應(yīng)用的信息见擦,ServletContext對(duì)象一個(gè)web應(yīng)用只有一個(gè)可用來存取數(shù)據(jù)
- 一個(gè)web應(yīng)用有多個(gè)servlet對(duì)象
- ServletContext對(duì)象的生命周期钉汗?
創(chuàng)建:該web應(yīng)用被加載(服務(wù)器啟動(dòng)或發(fā)布web應(yīng)用(前提,服務(wù)器啟動(dòng)狀 態(tài)))
銷毀:web應(yīng)用被卸載(服務(wù)器關(guān)閉鲤屡,移除該web應(yīng)用) - 獲得ServletContext對(duì)象
1)ServletContext servletContext = config.getServletContext();
2)ServletContext servletContext = this.getServletContext(); - ServletContext的作用
web.xml中配置初始化參數(shù)
通過context對(duì)象獲得參數(shù)
- 獲得web應(yīng)用中任何資源的絕對(duì)路徑
方法:String path = context.getRealPath(相對(duì)于該web應(yīng)用的相對(duì)地址); - ServletContext是一個(gè)域?qū)ο螅捍鎯?chǔ)數(shù)據(jù)的區(qū)域就是域?qū)ο?/li>
- ServletContext域?qū)ο蟮淖饔梅秶赫麄€(gè)web應(yīng)(所有的web資源都可以隨意向 servletcontext域中存取數(shù)據(jù)损痰,數(shù)據(jù)可以共享)
- 域?qū)ο蟮耐ㄓ玫姆椒ǎ?br>
setAtrribute(String name,Object obj);
getAttribute(String name);
removeAttribute(String name); - 簡(jiǎn)單登錄-網(wǎng)站登錄sql檢測(cè)
navicat創(chuàng)建的數(shù)據(jù)庫(kù)(圖形化界面較簡(jiǎn)單)
public class ServletText extends HttpServlet {
@Override
public void init() throws ServletException {
super.init();
// 登錄計(jì)數(shù)
int num = 0;
getServletContext().setAttribute("num", num);
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.獲取名字密碼
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println(username + "00000-");
// 2.傳給數(shù)據(jù)庫(kù)解析
User user = null;
try {
QueryRunner qr = new QueryRunner(C3p0Utiles.getCombpdatasource());
String sql = "select * from user where username=? and password=?";
user = qr.query(sql, new BeanHandler<User>(User.class), username, password);
} catch (Exception e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
// 3.在界面顯示結(jié)果
if (user != null) {
ServletContext cont = this.getServletContext();
Integer num = (Integer) cont.getAttribute("num");
// 登錄計(jì)數(shù)
num++;
response.getWriter().write(user.toString() + num);
cont.setAttribute("num", num);
} else {
response.getWriter().write("sorry to that wrong");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}