05_JSP/Servletææ¯
ç¨åºæ¶æï¼C/Sæ¶æ(客æ·ç«¯Client/æå¡å¨Server)>B/Sæ¶æ(æµè§å¨Browser/æå¡å¨)
B/Sæ¶æï¼è¯·æ±/ååºäº¤äº(æµè§å¨<>æå¡å¨-åºç¨æå¡å¨<>æ°æ®åºæå¡å¨)
ç»ä¸èµæºå®ä½ç¬¦URL(åè®®/主æº/èµæºä½ç½®/åæ°)-èµæºæè¿°ç¬¦URI(Http请æ±)
http://localhost:8080(主æºç«¯å£)/myweb(ç½ç«)/test.html(èµæº)
Webæå¡å¨ï¼WebLogic(JavaEEè§è)-WebSphere(JavaEEè§è)-JBoss(JavaEEè§è)-Tomcat(jsp/servletè§è,䏿¯æEJB)
javaSEè§èï¼æ¯æ IOæµï¼éåï¼ç½ç»ç¼ç¨ï¼çº¿ç¨ææ¯
javaEEè§èï¼æ¯æ13ç§ææ¯ servletãjspãejbãjdbc
Tomcatå®è£ ï¼window(exe/msi)-linux(rmp)
ç³»ç»åéé ç½®ï¼JAVA_HOME(jdkè·¯å¾)->CLASSPATH->Path(jdk\binç®å½)
Linuxé¨ç½²Tomcatï¼
- å°Tomcatå缩å è§£åè³/usr/tomcatç®å½ä¸ï¼unzip tomcat_8.0.zip
- æ§è¡startup.shæä»¶å¯å¨tomcatï¼./startup.sh
rootç¨æ·æ§è¡startup.shæ¶Permission Denied--chmod +x追å 坿§è¡æé
- æµè¯Tomcatï¼http://localhost:8080--对å¤å¼æ¾ç«¯å£:/sbin/iptables -l INPUT -p tcp --dport 8091-j ACCEPT
Tomcatæå¡å¨ç®å½ç»æ(Apache):
/binï¼æä½æä»¤ï¼startup.bat(window)/sh(Linux) shutdown.bat/sh
/confï¼é ç½®æä»¶ï¼server.xml(é»è®¤ç«¯å£8080) context.xml
/libï¼åæ¾jarå
/logï¼æ¥å¿ä¿¡æ¯
/tmpï¼ä¸´æ¶æä»¶ç®å½
/webappsï¼åæ¾åå¸çwebåºç¨(ç½ç«)æä»¶,/ROOTé»è®¤ç½ç«(访é®ä¸éè¦åºç¨åç§°)
/workï¼è¿è¡ç®å½ï¼æ¾ç½®JSPçæçServlet
Tomcatå¯å¨è¿ç¨ï¼bin/startup.bat>JAVA_HOME>CLATALINA_HOMEç¯å¢åé(Tomcatæ ¹ç®å½)>/webapps
Tomcatæå¡å¨ä¼å(å å|å¹¶åè¿æ¥æ°|ç¼å)ï¼
a)å åä¼åï¼ä¸»è¦æ¯å¯¹Tomcatå¯å¨åæ°è¿è¡ä¼åï¼å¯ä»¥å¨Tomcatå¯å¨èæ¬ä¸ä¿®æ¹å®çæå¤§å åæ°ç
b) çº¿ç¨æ°ä¼åï¼Tomcatçå¹¶åè¿æ¥åæ°ï¼ä¸»è¦å¨Tomcaté ç½®æä»¶ä¸server.xmlä¸é ç½®ï¼æ¯å¦ä¿®æ¹æå°ç©ºé²è¿æ¥çº¿ç¨æ°ï¼ç¨äºæé«ç³»ç»å¤çæ§è½ç
c) ä¼åç¼åï¼æå¼å缩åè½ï¼ä¿®æ¹åæ°ï¼æ¯å¦å缩çè¾åºå 容大å°é»è®¤ä¸º2KBï¼å¯ä»¥éå½çä¿®æ¹
å建Web项ç®ï¼MyEclipse>new Web Project>ProjectName+JavaEE Version
Eclipseé¨ç½²Tomcat(æå¨é¨ç½²/èªå¨é¨ç½²)ï¼windows>Preferences>Tomcat(å ³èjdk)
>Deploy Project(é¨ç½²é¡¹ç®)>Servers(Start/Stop/Config Tomcat)
Web项ç®è°è¯ï¼è®¾ç½®æç¹>Tomcat(debug Server)>æ§è¡å°æç¹:F5(è·³å ¥)/F6/F7(è·³å)/F8(è·³å°ä¸ä¸ä¸ªæç¹)
Webå¼åç®å½ç»æï¼src(servlet)-WebRoot(META-INFãWEB-INFãweb.xmlãJSP)
Webåºç¨(ç½ç«)ç®å½ç»æï¼
|- WebRootï¼æ ¹ç®å½ï¼ä¸ä¸ªwebåºç¨å¿ é¡»æä¸ä¸ªæ ¹ç®å½
|- éæèµæºï¼html+css+javascript+images+xml
|-WEB-INFï¼éé¢çæä»¶ä¸è½éè¿æµè§å¨ç´æ¥è®¿é®ï¼éè¦å¨web.xmlä¸é ç½®
|-classesï¼åæ¾classåèç
|-libï¼åæ¾jarå ï¼ä¸è½æåç®å½
|-web.xmlï¼ webåºç¨çé ç½®æä»¶
Webåºç¨ç¨åºé¨ç½²ï¼
æ¹å¼ä¸ï¼Webåºç¨(çæjarå )æ·è´è³/Webappsç®å½
<!âweb.xmlæä»¶ä¸é ç½®é»è®¤ROOTé¦é¡µ-->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
æ¹å¼äºï¼é ç½®èæç½ç«(Tomcatä¸ç½ç«å离)
<!- ä¿®æ¹%tomcat%/conf/server.xml ->
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" >
<!--é ç½®èæç½ç«
docBase: webåºç¨æå¨çç»å¯¹è·¯å¾ä½ç½®
path: èªå®ä¹è®¿é®webåºç¨ä½¿ç¨çåç§°
path为空ï¼åä¸éè¦å称访é®è¯¥webåºç¨ï¼èä¸ä¼å äºROOTåºç¨
-->
<Context docBase="C:\projects\myweb" path="/访é®ç½ç«åç§°"/>
</Host>
æ¹å¼ä¸ï¼æ·»å é ç½®æä»¶æ¹æ³é ç½®èæç½ç«
<!- %tomcat%/conf/Catalina/localhostç®å½ä¸æ·»å abc.xmlæä»¶ ->
<?xml version="1.0" encoding="utf-8"?>
<!-- é ç½®èæç½ç«ï¼è®¿é®webåºç¨åç§°æ¯xmlæä»¶åabc -->
<Context docBase="C:\projects\myweb"/>
ç«ç¹host(1)>ç½ç«(å¤)ï¼éæèµæº(html+css+javascript)-å¨æèµæº(servlet+jsp)
Httpåè®®ï¼è¯·æ±request-httpåè®®(tcp/ipåºç¡ä¸å°è£ çåè®®)-ååºresponse
请æ±(请æ±è¡|请æ±å¤´|空è¡|å®ä½å 容)-ååº(ååºè¡|ååºå¤´|空è¡|å®ä½å 容)
Http请æ±:æµè§å¨->æå¡å¨ï¼è¯·æ±ï¼--请æ±ä¸æ¬¡èµæºæä»¶ï¼è¯·æ±ä¸æ¬¡
GET(æäº¤æ¹å¼) /project/hello(URIèµæºæè¿°ç¬¦)?(GET请æ±åæ°) HTTP/1.1 --请æ±è¡
--Httpçæ¬ï¼HTTP1.0(䏿¬¡è¯·æ±)-HTTP1.0(夿¬¡è¯·æ±)
--Httpè¯·æ±æ¹å¼ï¼GET/POST/HEAD/PUT/CONNECT/TRACE/DELETE
--æå¸¸ç¨è¯·æ±æ¹å¼ï¼<form action=âæäº¤å°åâ method=âget/postâ>
--GETæäº¤åæ°æ¾ç¤ºå¨å°åæ POSTå¨è¯·æ±å®ä½å 容ä¸
--请æ±å¤´(å¤ä¸ªã以é®å¼å¯¹å½¢å¼åºç°)
Host: localhost:8080 --请æ±ååºç主æºå端å£
User-Agent: Mozilla/5.0 (Windows NT 6.1;) Firefox/34.0 --æµè§å¨ç±»å
Accept: text/html,application/xhtml+xml,application/xml; --æµè§å¨æ¥åçæ°æ®ç±»å
Accept-Charset: ISO-8859-1 --æµè§å¨æ¥åæ°æ®ç¼ç æ ¼å¼
Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3 --æµè§å¨æ¥åçè¯è¨
Accept-Encoding: gzip, deflate --æµè§å¨æ¥åçæ°æ®åç¼©æ ¼å¼
Referer: http://localhost/index.jsp --å½åè¯·æ±æ¥æº(鲿¢éæ³é¾æ¥)
Cookie: name=admin --æµè§å¨ä¿åçcookieæ°æ®
If-Modified-Since: Tue, 12 Jul 2016 12:12:16 GMT --æµè§å¨ç¼åæåä¿®æ¹æ¶é´
Connection: keep-alive(ä¿æè¿æ¥)/close --æµè§å¨åæå¡å¨è¿æ¥ç¶æ
Data: Sun, 12 Dec 2016 12:12:12 GMT --请æ±ååºæ¶é´
-- ä¸ä¸ªç©ºè¡
name=admin&password=123(POSTåæ°) --请æ±å®ä½å 容
Httpååº:æå¡å¨->æµè§å¨ï¼ååºï¼
HTTP/1.1 200(ç¶æç ) OK --ååºè¡
--httpå议常è§çç¶æç (æå¡å¨å¯¹äºè¯·æ±å¤ççç»æ)ï¼
200ï¼è¡¨ç¤ºè¯·æ±å¤ç宿
302ï¼è¡¨ç¤ºè¯·æ±éè¦è¿ä¸æ¥ç»å,éå¸¸è¯¥ç¶æç ålocationååºå¤´ç»å使ç¨
404ï¼è¡¨ç¤ºå®¢æ·ç«¯é误,æ¾ä¸å°èµæº
500ï¼è¡¨ç¤ºæå¡å¨é误(代ç é误)
--ååºå¤´(å¤ä¸ª)
Location: http://localhost/index.jsp --éå®åçå°å
Server:apache tomcat --æå¡å¨çç±»å
Content-Encoding: gzip --æå¡å¨åéç»æµè§å¨çæ°æ®åç¼©æ ¼å¼
Content-Length: 80 --æå¡å¨åéç»æµè§å¨çæ°æ®é¿åº¦
Content-Language: zh-cn --æå¡å¨æ¯æè¯è¨
Content-Type: text/html; charset=GB2312--æå¡å¨åéç»æµè§å¨çæ°æ®ç±»ååæ°æ®ç¼ç æ ¼å¼
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT --æå¡å¨èµæºçæåä¿®æ¹æ¶é´
Refresh: 1;url=http://localhost ---宿¶å·æ°ææ¯énç§è·³è½¬èµæº
Content-Disposition: attachment; filename=aaa.zip -- 以ä¸è½½æ¹å¼æå¼èµæº
Transfer-Encoding: chunked
Set-Cookie:SS=Q0=5Lb_nQ; path=/search -- æå¡å¨åéç»æµè§å¨çcookieæ°æ®
Expires: -1 --éç¥æµè§å¨ä¸ä½¿ç¨ç¼å
Cache-Control: no-cache
Pragma: no-cache
Connection: close/Keep-Alive --è¿æ¥ç¶æ
Date: Sun, 12 Dec 2016 12:12:16 GMT --ååºååºçæ¶é´
--ä¸ä¸ªç©ºè¡
HelloServlet!Sun Dec 12 12:12:16 CST 2017 --å®ä½å 容ï¼ç¨æ·ç´æ¥çå°çå 容ï¼
Servlet
客æ·ç«¯http请æ±>Webæå¡å¨è½¬å>servlet容å¨>è§£æurllå¹¶æ ¹æ®web.xmlæ¾å°ç¸å¯¹åºçservlet,ä¼ érequestãresponse对象>å¤çå®ä¸å¡é»è¾åï¼å°ä¿¡æ¯æ¾å ¥å°responseå¹¶ååºå°å®¢æ·ç«¯
servlet(å®ç°Servletæ¥å£,ç»§æ¿HttpServlet,交ç»Tomcatæå¡å¨è¿è¡)
Servletæ¥å£>GenericServlet(éç¨,ä¸åºäºä»»ä½åè®®)>HttpServlet(åºäºhttp)
Servletå¼åæ¥éª¤ï¼ç¼åHelloServlet(ç»§æ¿HttpServletçjavaç±»,éådoget/doPostæ¹æ³)>>Tomcatè¿è¡(web.xmlé ç½®)>>url访é®
//ä¿®æ¹Servlet模æ¿ï¼MyEclipse\Common\plugins\com.genuitec.eclipse.wizard.jar>åç¼©å æ¹å¼æå¼>ä¿®æ¹Servlet.java
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//å¤ç代ç
}
web.xml:
<!-- æµè§å¨è®¿é®ï¼http://localhost:8080/webproject/Hello -->
<!-- Servleté ç½®ä¿¡æ¯ -->
<servlet>
<description></description>
<!-- Servletå é¨åç§° -->
<display-name>HelloServlet</display-name>
<servlet-name>HelloServlet</servlet-name>
<!-- Servletç±»çå ¨åï¼å å+ç±»å -->
<servlet-class>com.hfxt.servlet.HelloServlet</servlet-class>
</servlet>
<!-- Servletæ å°ä¿¡æ¯ -->
<servlet-mapping>
<!--Servletå é¨åç§°ï¼ä¸Servleté ç½®çå 容åç§°ä¿æä¸è´ -->
<servlet-name>HelloServlet</servlet-name>
<!-- servletæ å°è·¯å¾ï¼å¤é¨è®¿é®Servletçè·¯å¾(åç§°) -->
<url-pattern>/Hello</url-pattern>
</servlet-mapping>
Servletç¼ç¨ï¼
servletæ§è¡è¿ç¨ï¼Tomcatå¯å¨å è½½web.xml>>æµè§å¨è¾å ¥url>>æªåå符串,å¾å°è®¿é®èµæº/hello>>å¹é servletæ å°ä¿¡æ¯url-pattern>>servleté 置信æ¯servlet-calss(å符串com.hfxt.servlet.HelloServlet)>>å建HelloServlet对象,è°ç¨æ¹æ³æ§è¡
servletè·¯å¾æ å°:精确å¹é (ä¼å ):/helloãæ¨¡ç³å¹é :/*ã/hello/*ã*.åç¼å
<url-pattern>/Hello</url-pattern>
<url-pattern>/*</url-pattern>
<url-pattern>*.html</url-pattern>
缺çè·¯å¾(è§£æwebåºç¨ä¸çéæèµæº)ï¼å æ¾å¨æèµæº>åæ¾éæèµæº
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
servletçå½å¨æï¼æé æ¹æ³>åå§å>æå¡>鿝
æé æ¹æ³ï¼å®ä¾å,å建Servlet对象(åå®ä¾|å¤çº¿ç¨)
åå§åinit():åå§åServlet对象>>HttpServletRequest/Response对象
æåinit(ServletConfig)(é»è®¤è°ç¨)-æ åinit(GenericServlet,éåå®ç°åå§åé»è¾)
æå¡server():>>doGet/doPost()
鿝destory():éæ°é¨ç½²ç½ç«æåæ¢æå¡å¨è°ç¨
tomcatæå¡å¨æ§è¡ççå½å¨æä¼ªä»£ç ï¼
//å符串ï¼com.hfxt.servlet.HelloServlet
- éè¿åå°ï¼å建HelloServlet对象 --è°ç¨1次
//å¾å°HelloServletçclass(åèç )对象
Class clz = Class.forName(âcom.hfxt.servlet.HelloServletâ);
//éè¿class对象è°ç¨(æ å)æé æ¹æ³
Object obj = clz.newInstance;
- éè¿åå°ï¼è°ç¨init()æ¹æ³ --è°ç¨1次
//å¾å°initæ¹æ³å¯¹è±¡
Method m = clz.getDeclaraeMethod(âinitâ,ServletConfig.class);
//è°ç¨initæ¹æ³
m.invoke(obj,config); //
- éè¿åå°ï¼è°ç¨server()æ¹æ³ --è°ç¨n次
//å¾å°serveræ¹æ³å¯¹è±¡
Method m = clz.getDeclaraeMethod(âserviceâ,HttpServletRequest.class, HttpServletResponse.class);
//è°ç¨serveræ¹æ³
m.invoke(obj,request,response);
- éè¿åå°ï¼è°ç¨destrory()æ¹æ³ --è°ç¨1次
//å¾å°destroryæ¹æ³å¯¹è±¡
Method m = clz.getDeclaraeMethod(âdestroryâ,null);
//è°ç¨destroryæ¹æ³
m.invoke(obj,null);
Servlet线ç¨å¹¶å(servlet对象å¨tomcat䏿¯åå®ä¾å¤çº¿ç¨,å¤ä¸ªçº¿ç¨åæ¶æä½Servletçæååé):对使ç¨å°æååéç代ç åå 忥é(忥代ç å/åæ¥æ¹æ³)
static int count = 1; //æååéï¼å¯è½è¢«ä¸åç¨æ·çº¿ç¨å ±äº«å°,å¼åå¤çº¿ç¨å¹¶åé®é¢
/**
* 1ï¼åæ¥ä»£ç å
* ç»ä½¿ç¨å°å ±äº«æ°æ®ç代ç åæ·»å 忥é
* 注æ:忥éå¿ é¡»å¤ä¸ªçº¿ç¨å¯ä¸ç
*/
synchronized (ThreadDemo.class) {
response.getWriter().write("ä½ å½åæ¯ç¬¬"+count+"个访客ï¼"); //A线ç¨ååæ§è¡å®è¿å¥ä»£ç ï¼è¢«Bçº¿ç¨æ¢å»äºæ§è¡æ¶æº
//ç¡ç
/*try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}*/
count++;
}
//method(response);
}
/**
* 2 ï¼åæ¥æ¹æ³
* @param response
*/
/*public synchronized static void method(HttpServletResponse response){
try {
response.getWriter().write("ä½ å½åæ¯ç¬¬"+count+"个访客ï¼");
} catch (IOException e1) {
e1.printStackTrace();
} // A线ç¨ååæ§è¡å®è¿å¥ä»£ç ï¼è¢«Bçº¿ç¨æ¢å»äºæ§è¡æ¶æº
//ç¡ç
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
count++;
}*/
Servletèªå¨å è½½ï¼tomcatæå¡å¨å¯å¨çæ¶åå建servlet对象
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class> com.hfxt.servlet.HelloServlet</servlet-class>
<!-- tomcatæå¡å¨å¯å¨çæ¶åèªå¨å建servlet对象 -->
<!-- æ£æ´æ°:æ°å¼è¶å¤§,å建对象çä¼å 级è¶ä½ -->
<load-on-startup>1</load-on-startup>
</servlet>
Servletéè¦å¯¹è±¡ï¼HttpServletRequest-HttpServletRequest-ServletConfig-ServletContext
HttpServletRequest对象ï¼å°è£ 请æ±ä¿¡æ¯
HttpServletRequest对象ï¼å°è£ ååºä¿¡æ¯
ServletConfig对象(servletä¸ä¸æå¯¹è±¡)ï¼å°è£ ä¸ä¸ªservletåå§ååæ°ä¿¡æ¯
ServletContext对象ï¼å°è£ webåºç¨ç¯å¢ä¿¡æ¯
HttpServletRequest对象:
//1.tomcatæå¡å¨æ¥æ¶å°æµè§å¨åéçè¯·æ±æ°æ®
//2.tomcatæå¡å¨æhttp请æ±ä¿¡æ¯å°è£ æHttpServletRequest对象
//3.tomcatæå¡å¨è°ç¨doGet()/doPost()æ¹æ³ï¼ærequestå¯¹è±¡ä¼ å ¥servlet
//4.éè¿HttpServletRequest对象å¾å°http请æ±ä¿¡æ¯
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//serviceæ¹æ³æ¯servletæ ¸å¿æå¡æ¹æ³(ç¨åºå ¥å£)
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//éè¿request对象è·åæ°æ®
请æ±è¡ï¼
request.getMethod(): è¯·æ±æ¹å¼
request.getRequestURI():请æ±èµæº
request.getRequestURL()
request.getProtocol():åè®®çæ¬
请æ±å¤´ï¼
request.getHeader("name"): æ ¹æ®è¯·æ±å¤´è·å请æ±å¼
request.getHeaderNames(): è·åææè¯·æ±å¤´åç§°(return Enumeration)
å®ä½å 容ï¼
request.getInputStream(): return InputStream
è·ååæ°æ¹å¼ï¼Get(åæ°è·å¨URIçåé¢)-Post(åæ°æ¾å¨å®ä½å 容ä¸)
GETï¼request.getQueryString();
POSTï¼request.getInputStream();
éç¨è·ååæ°æ¹å¼ï¼ï¼ä¸åPoståGetï¼
request.getParameter(name): æ ¹æ®åæ°åè·ååæ°å¼(è·åä¸ä¸ªåæ°å¼)
request.getParameterValues(name): æ ¹æ®åæ°åè·ååæ°å¼(è·åå¤ä¸ªåæ°å¼)
request.getParameterNames(): è·åææåæ°åç§°
request.getParameterMap(): è·åææåæ°
//å¤ç代ç (æ¡ä¾):
User-Agent头ï¼getHeader>User-Agent>è·åç¨æ·æµè§å¨ç±»å
referer头(è¶ é¾æ¥è¯·æ±å¤´)ï¼ç´æ¥è®¿é®ä¸è½½é¾æ¥>è¯å«éæ³è¯·æ±>è·³å°å®ä¹ä¸è½½é¡µé¢>å¼å§ä¸è½½
}
HttpServletResponse对象:
//1.tomcatæå¡å¨æä¾ä¸ä¸ªHttpServletResponse对象
//2.éè¿serviceæ¹æ³æresponseå¯¹è±¡ä¼ å ¥servletä¸
//3.éè¿response对象修æ¹ååºæ°æ®
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//serviceæ¹æ³
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ååºè¡ï¼response.setStatus(ç¶æç ): è®¾ç½®ç¶æç
ååºå¤´ï¼response.setHeader(name,value): 设置ååºå¤´
å®ä½å 容ï¼
response.getWriter().writer(): 以åç¬¦æ ¼å¼åéå®ä½å 容
response.getOutputStream().writer(): 以åèæ ¼å¼åéå®ä½å 容
}
ç¼ç ï¼è¯·æ±å符(æµè§å¨)>åè(utf-8)>è§£ç (æå¡å¨)>å符(é»è®¤iso-8859-1)>>䏿乱ç
(æå¡å¨)å符>设置ç¼ç æ ¼å¼(utf-8)>åè>è§£ç (æµè§å¨)>å符(utf-8)
请æ±åæ°(æµè§å¨->æå¡å¨):request.setCharcterEncoding("utf-8");
è§£å³getä¹±ç é®é¢(æå¨è§£ç )ï¼
if("GET".equals(request.getMethod())){
name = new String(name.getBytes("iso-8859-1"),"utf-8");
}
è§£å³postä¹±ç é®é¢ï¼request/response.setCharacterEncoding("utf-8")
ååºæ°æ®(æå¡å¨->æµè§å¨):response.setContentType("text/html;charset=utf-8");èªéåºç¼ç
ServletConfig对象ï¼web.xmlä¸Servleté 置信æ¯>ServletConfig对象
//ä¸ä¸ªç½ç«ä¸å¯è½ä¼åå¨å¤ä¸ªServletConfig对象ï¼ä¸ä¸ªServletConfig对象就å°è£ äºä¸ä¸ªservletçé 置信æ¯
String config.getInitParameter(ânameâ) æ ¹æ®åæ°åç§°è·ååæ°å¼
Enumeration config.getInitParameterNames() è·åææåæ°åç§°
<servlet>
<servlet-name>ConfigDemo</servlet-name>
<servlet-class>com.hfxt.servlet.ConfigDemo</servlet-class>
<!-- é ç½®servletåæ° -->
<init-param>
<param-name>key</param-name>
<param-value>value</param-value>
</init-param>
</servlet>
ServletContext对象ï¼web.xmlä¿¡æ¯(å æ¬å ¨å±åæ°)>ServletContext对象
//ä¸ä¸ªç½ç«åªä¼å建ä¸ä¸ªServletContext对象ï¼ä»£è¡¨æ´ä¸ªç½ç«çç¯å¢ä¿¡æ¯
this.getServletConfig().getServletContext(); è·åServletContext对象
//ServletContext对象:å¯å¨çæ¶åå建
//ServletConfig对象:è°ç¨initæ¹æ³ä¹åå建çï¼å¨ServletContext对象å建ä¹å
public ServletCofig{
ServletContext context;
public ServletConfig(context){
this.context=context;
}
public ServetContxt getServletContext(){
return;
}
ServletConfig config = new ServletConfig(context);
public MyServlet extends HttpSevlet{
publlic init(ServletConfig config){
SevletContext context= config. getServletContext();
}
}
ServletContext对象5大ä½ç¨:读åwebä¸ä¸æè·¯å¾ã读åå ¨å±åæ°ãä½ä¸ºå对象使ç¨ã转å页é¢ã读åwebèµæºæä»¶
Servletä¸ä¸ªå对象ï¼ServletContext-HttpServletRequest-HttpSession
//1.è·åwebçä¸ä¸æè·¯å¾(项ç®å¨Tomcatä¸è¿è¡çè·¯å¾)
java.lang.String context.getContextPath()
//2.è·åå ¨å±åæ°
<!-- å ¨å±åæ°é ç½® -->
<context-param>
<param-name>AAA</param-name>
<param-value>AAA'value</param-value>
</context-param>
java.lang.String getInitParameter(java.lang.String name)
java.util.Enumeration getInitParameterNames()
//3.å对象(ä¿åæ°æ®,è·åæ°æ®):å¨ä¸åçèµæºä¹é´æ¥å ±äº«æ°æ®
Servlet1>ä¿åæ°æ®(setAttribute)->å对象(容å¨,Map)->è·åæ°æ®(getAttribute)>Servlet2
void setAttribute(java.lang.String name, java.lang.Object object) ä¿åæ°æ®
java.lang.Object getAttribute(java.lang.String name) å¾å°æ°æ®
void removeAttribute(java.lang.String name) æ¸ é¤æ°æ®
//4.请æ±è½¬å
RquestDispatcher getRequestDispatcher(String path).forward(request,response)
//5.读åweb项ç®çèµæºæä»¶
java.lang.String getRealPath(java.lang.String path)
java.io.InputStream getResourceAsStream(java.lang.String path)
java.net.URL getResource(java.lang.String path)
转ååéå®åï¼
转å(æå¡å¨è¡ä¸º):卿å¡ç«¯å®ä½æ°èµæºï¼å§ç»æ¯ä¸æ¬¡è¯·æ±; å¯ä»¥å®ç°è¯·æ±ä¿¡æ¯çå ±äº«; 客æ·ç«¯çURLä¸å
request.getRequestDispapatcher(âURLâ).forword(request,response);
éå®å(æµè§å¨è¡ä¸º):æå¡ç«¯è®©å®¢æ·ç«¯éæ°è¯·æ±èµæºï¼ä¸¤æ¬¡è¯·æ±; ä¸è½å®ç°è¯·æ±ä¿¡æ¯çå ±äº«;客æ·ç«¯çURLå为æ°è¯·æ±çURL
response.sendRedirect("url");
请æ±éå®å(æµè§å¨è¡ä¸º)ï¼response.sendRedirect(path)
1ï¼å°åæ ä¼åéæ¹åï¼åæéå®åå°çå°åã
2ï¼å¯ä»¥è·³è½¬å°é¡¹ç®å çèµæºï¼ä¹å¯ä»¥è·³è½¬é¡¹ç®å¤çèµæº
3ï¼æµè§å¨åæå¡å¨ååºä¸¤æ¬¡è¯·æ±ï¼é£ä¹å°±ä¸è½ä½¿ç¨è¯·æ±æ¥ä½ä¸ºå对象æ¥å ±äº«æ°æ®ã
请æ±è½¬å(æå¡å¨è¡ä¸º)ï¼request.getRequestDispapatcher(âURLâ).forword
(request,response);
1ï¼å°åæ ä¸ä¼æ¹åã
2ï¼åªè½è·³è½¬å°é¡¹ç®å çèµæºï¼ä¸è½è·³è½¬å°é¡¹ç®å¤çèµæº
3ï¼æµè§å¨åæå¡å¨ååºä¸æ¬¡è¯·æ±ï¼é£ä¹å¯ä»¥ä½¿ç¨è¯·æ±ä½ä¸ºåå¯¹è±¡å ±äº«æ°æ®ã
ä¼è¯ç®¡çï¼æµè§å¨-ä¼è¯æ°æ®(ä¼è¯ç®¡ç)-æå¡å¨
ä¼è¯ç®¡çææ¯:Cookie(ä¼è¯æ°æ®ä¿å卿µè§å¨)-Session(ä¼è¯æ°æ®ä¿å卿å¡å¨)
Cookieç¹ç¹ï¼
1ï¼ä¼è¯æ°æ®æ¾å¨æµè§å¨ç«¯
2ï¼æ°æ®ç±»ååªè½stringï¼è䏿大å°éå¶ç
3ï¼ç¸å¯¹æ°æ®åæ¾ä¸å®å ¨
Sessionç¹ç¹:
1ï¼ä¼è¯æ°æ®æ¾å¨æå¡å¨ç«¯ï¼æå¡å¨å åï¼ï¼å ç¨æå¡å¨èµæº
2ï¼æ°æ®ç±»åä»»æç±»åï¼æ²¡æå¤§å°éå¶ç
3ï¼ç¸å¯¹å®å ¨
Cookieææ¯åçï¼
1ï¼æå¡å¨å建Cookie对象ï¼ä¿åä¼è¯æ°æ®ï¼æCookieæ°æ®åéç»æµè§å¨
response.addCookie(cookie); (ååºå¤´ï¼set-cookie:name=admin)
2)æµè§å¨è·åcookieæ°æ®ï¼ä¿å卿µè§å¨ç¼ååºï¼ç¶åå¨ä¸æ¬¡è®¿é®æå¡å¨æ¶æºå¸¦cookieæ°æ®
(请æ±å¤´ï¼cookie:name=admin)
3)æå¡å¨è·åæµè§å¨åéçcookieæ°æ®
request.getCookies();
Cookie对象ï¼
//1.å建Cookie对象ï¼ç¨äºåå¨ä¼è¯æ°æ®
new Cookie(java.lang.String name, java.lang.String value)
//2.ä¿®æ¹Cookie对象
void setPath(java.lang.String uri)
void setMaxAge(int expiry)
void setValue(java.lang.String newValue)
//3.æcookieæ°æ®åéç»æµè§å¨ä¿å(ååºå¤´set-cookie)
response.addCookie(cookie);
//4.æµè§å¨å¸¦çcookieè®¿é®æå¡å¨ï¼æå¡å¨æ¥æ¶cookieä¿¡æ¯(请æ±å¤´cookie)
request.getCookies();
Sessionææ¯åç:
1ï¼æå¡å¨å建Sessionå¯¹è±¡ï¼æå¡å¨ä¼ç»è¿ä¸ªsession对象åé ä¸ä¸ªå¯ä¸çæ è®°JSESSIONID
2ï¼æJSESSIONIDä½ä¸ºCookieåéç»æµè§å¨
3ï¼æµè§å¨å¾å°JSESSIONIDä¿å䏿¥ï¼å¨ä¸æ¬¡è®¿é®æ¶æºå¸¦è¿ä¸ªJSESSIONIDå»è®¿é®æå¡å¨
4ï¼æå¡å¨å¾å°JSESSIONIDï¼å¨æå¡å¨å åä¸æç´¢æ¯å¦å卿å®JSSESSINOIDçsession对象
5ï¼å¦ææ¾å°ï¼åè¿åè¿ä¸ªsession对象
6ï¼å¦ææ¾ä¸å°ï¼å¯è½ç´æ¥è¿ånullï¼æè åå建æ°çsession对象ã
HttpSession session = request.getSession();
HttpSession对象ï¼
1ï¼å建HttpSession对象ï¼ç¨äºä¿åä¼è¯æ°æ®
session = request.getSession()/getSession(true); å建æè·åsession对象(没æåå建)
request.getSession(false); å¾å°session对象,没æç´æ¥è¿ånull
2ï¼ä¿®æ¹HttpSession对象
void setMaxInactiveInterval(int interval) 设置sessionå¯¹è±¡çæææ¶é´(ç§)
void invalidate() æå¨éæ¯session对象
<!-- é»è®¤æ åµï¼çå¾ 30åéç©ºé²æ¶é´,session对象æä¼éæ¯ -->
<!-- è®¾ç½®å ¨å±çsessionå¯¹è±¡è¿ææ¶é´(å) -->
<session-config>
<session-timeout>1</session-timeout>
</session-config>
//设置JSESSIONIDçæ¶é´ï¼ä¸ä¼éçæµè§å¨å ³éè丢失
Cookie c = new Cookie("JSESSIONID",session.getId());
c.setMaxAge(1*30*24*60*60);//1个æ
response.addCookie(c);
3ï¼ä¿åä¼è¯æ°æ®(ä½ä¸ºå对象)
session.setAttribute("name",Object); ä¿åæ°æ®
session.getAttribute("name"); è·åæ°æ®
session.removeAttribute("name"); å 餿°æ®
JSP
JSP(Java Server Page):è¿è¡å¨æå¡å¨ç«¯çJavaæå¡é¡µé¢(HTMLåµå¥java代ç )
JSPæ¬è´¨æ¯Servlet,jspå å«servletææ¯
Jspçæä½³å®è·µ:servletææ¯(åjava代ç )-jspææ¯(è¾åºhtml代ç )
JSPè¿è¡ç®å½ï¼tomcatçworkç®å½, åæ¾jsp页é¢è¿è¡è¿ç¨ä¸äº§ççä¸´æ¶æä»¶
JSPæ§è¡è¿ç¨ï¼ç¿»è¯é¶æ®µ>ç¼è¯é¶æ®µ>æ§è¡é¶æ®µ
ç¬¬ä¸æ¬¡è®¿é®jsp:jsp页é¢(.jsp)>ç¿»è¯>javaæºæä»¶(.class)>ç¼è¯>classæä»¶(.class)>å建类对象>æ§è¡ç±»ä¸çæ¹æ³
第n次访é®jsp(ä¸ä¿®æ¹jsp代ç ): ç´æ¥æ§è¡ç±»ä¸çæ¹æ³
JSPçå½å¨æï¼ç¿»è¯(javaæä»¶)>ç¿»è¯(classæä»¶)>æé æ¹æ³>_jspinitæ¹æ³>_jspServeræ¹æ³>_jspDestroyæ¹æ³
jsp䏿ç¼ç ï¼jspåèæä»¶(é»è®¤ç¼ç GBK)>ç¿»è¯(è§£ç pageEncoding=utf-8)>javaå符æä»¶>ç¼è¯(utf-8)>classæä»¶>è¾åº(contentType="text/html;charset=UTF-8")>æµè§å¨(èªå¨åæ¢ç¼ç æ ¼å¼)
pageEncoding>jspæä»¶ä¼èªå¨åæpageEncodingçç¼ç å¼>contentType
JSPåºæ¬è¯æ³ï¼æ¨¡æ¿|æä»¤|表达å¼|èæ¬|声æ(åé/æ¹æ³)|注é
æä»¤ï¼<%@ æä»¤ %> pageå½ä»¤-taglibå½ä»¤-includeå½ä»¤(卿å å«/éæå å«)
<%-- pageå½ä»¤:åè¯tomcatæå¡å¨å¦ä½ç¿»è¯jspæä»¶ --%>
<%@ page language="java"(ç¿»è¯jspæä»¶çè¯è¨) import="java.util.*"
pageEncoding="UTF-8" --ç¿»è¯jspæä»¶çç¼ç
contentType="text/html;charset=UTF-8" --æå¡å¨åéç»æµè§å¨çæ°æ®ç±»ååå 容ç¼ç æ ¼å¼
session="true" -- æ¯å¦æå¼sessionåè½:trueæå¼,falseå ³é
buffer="8kb" -- jsp页é¢çç¼ååºå¤§å°
isELIgnored="false" --æ¯å¦å¿½ç¥EL表达å¼:true忽ç¥,falseä¸å¿½ç¥ã
errorPage="/common/error.jsp" -- æå®jspé误å¤ç页é¢
isErrorPage="true" --æå®å½å页é¢ä¸ºé误å¤ç页é¢ï¼å¯ä»¥ä½¿ç¨å 置对象exceptionæ¥è¯¢é误信æ¯
<!-- é ç½®å ¨å±çé误å¤çé¡µé¢ -->
<error-page>
<error-code>404</error-code>
<location>/common/404.html</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/common/500.jsp</location>
</error-page>
%>
<%-- taglibå½ä»¤:å¯¼å ¥jspçæ ç¾åº --%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%-- includeå½ä»¤:å¯¼å ¥å ¶ä»é¡µé¢ --%>
<%@ include file="/common/page.jsp" %>
<jsp:include page="path"/> --卿å å«(ç¸å½äºè¿½å )
<%@ include file="common.jsp" %> --éæå å«(ç¸å½äºå¤å¶ç²è´´)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">
<title>JSP</title>
</head>
<body>
<% --JSP Start
模æ¿ï¼jsp页é¢çhtml代ç
注éï¼<%-- JSP注é --%><!-- HTML注é -->
--htmlçæ³¨éä¼è¢«ç¿»è¯åæ§è¡,èjspçæ³¨éä¸ä¼è¢«ç¿»è¯åæ§è¡
表达å¼ï¼<%= åéæè¡¨è¾¾å¼ %>
--åçæ¯ä½¿ç¨out.print()æ¹æ³åæµè§å¨è¾åºå 容
èæ¬ï¼<% javaè¯å¥ %> å±é¨åé(æ¹æ³å )<% type name=value %>
--èæ¬åå°ä¸å¨å°ç¿»è¯å°javaæä»¶ç_jspServciceæ¹æ³ä¸æ§è¡
声æï¼<%! åéææ¹æ³ %> å ¨å±åé(æååé)<%! type name=value %>
--声æçåéä½ä¸ºæååéï¼å£°æçæ¹æ³ä½ä¸ºæåæ¹æ³
%> --JSP End
</body>
</html>
JSPå 置对象ï¼jspç´æ¥èªå¨å建æè·å常ç¨çå¼å对象
request-response-config-application-session-exception page-out-pageContext
jsp对象 ç±»å
request HttpServletRequest 请æ±å¯¹è±¡
response HttpServletResponse ååºå¯¹è±¡
config ServletConfig é 置对象
application ServletContext servletä¸ä¸æå¯¹è±¡(容纳N次ä¼è¯)
session HttpSession ä¼è¯å¯¹è±¡(容纳N次请æ±)
exception Throwable å¼å¸¸ä¿¡æ¯å¯¹è±¡
page(页é¢å¯¹è±¡this) Object jspæä»¶ç¿»è¯åçjavaç±»
out JspWriter è¾åºå¯¹è±¡
pageContext PageContext jspä¸ä¸æå¯¹è±¡
out: ç¸å½äºå¸¦ç¼ååè½çPrintWriter(åå°ååºæ¬¡æ°,æé«æç)
out.println("Hello JSP!");
out.write("Hello JSP!"); <%--åæµè§å¨è¾åº --%>
JSPç¼åæºå¶ï¼ç¼å满(buffer="8kb")/jsp页颿§è¡å®æ¯/ç¼åå ³é/æå¨å·æ°ç¼åflush()
<%
out.write("123");
System.out.println("å½åç¼ååºå¤§å°ï¼"+out.getBufferSize());
System.out.println("ç¼ååºå©ä½å¤§å°ï¼"+out.getRemaining());
//æå¨å·æ°
//out.flush();
response.getWriter().write("abc");--页é¢è¾åºé¡ºåºï¼abc 123
%>
pageContext(页é¢ä¸ä¸æå¯¹è±¡)ï¼éè¿pageContext对象è·åå ¶ä»8个å 置对象(使ç¨èªå®ä¹æ ç¾);ä½ä¸ºå对象使ç¨
//ä¿åå°pageå
pageContet.setAttribute("name",Object);
//ä¿åå°å ¶ä»åï¼PAGE_SCOPEãREQUEST_SCOPEãSESSION_SCOPEãAPPLICATION_SCOPE
pageContext.setAttribute("name,Object,PageContext.PAGE_SCOPE)
//è·åpageå
pageContext.getAttribute("name")
//ä»å ¶ä»åä¸è·åï¼PAGE_SCOPEãREQUEST_SCOPEãSESSION_SCOPEãAPPLICATION_SCOPE
pageContext.getAttribute("name,PageContext.PAGE_SCOPE)
//èªå¨æç´¢åä¸ªåæ°æ®
pageContext.findAttribute("name")
jspå对象(å ±äº«æ°æ®ãä¿åæ°æ®ãè·åæ°æ®)ï¼page-request-session-application
åå¯¹è±¡çæ¹æ³ï¼setAttribute()ãgetAttribute()ãremoveAttribute()
åä½ç¨èå´:pageå<requestå<sessionå<applicationå --æç´¢é¡ºåº(å°>大)
pageåï¼å¨åä¸ä¸ªjsp页é¢ä¸æ°æ®ææ
requeståï¼å¨åä¸ä¸ªè¯·æ±ä¸æ°æ®ææ
sessionåï¼å¨åä¸ä¸ªä¼è¯ä¸æ°æ®ææ
applicationåï¼å¨åä¸ä¸ªç½ç«ä¸æ°æ®ææ
jsp转ååéå®åï¼
<%
//设置请æ±çç¼ç æ¹å¼
request.setCharacterEncoding("UTF-8");
//设置ååºçç¼ç æ¹å¼
response.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");
if(username.equals("admin")){//ç»éæå
request.setAttribute("mess", "æå");//屿§ååæ°æ®
//String str = (String) request.getAttribute("mess");//åå¼
response.sendRedirect("index.jsp");//éå®å
}else{
request.setAttribute("mess", "失败");
//session.setAttribute("user", username);
request.getRequestDispatcher("login.jsp").forward(request, response);//转å
}
%>
EL(åå¼)åJSTL(æä½)
EL表达å¼(Expression Langage)ï¼æ¿ä»£jsp表达å¼,åæµè§å¨è¾åºå对象ä¸çåéæè¡¨è¾¾å¼è®¡ç®çç»æ
åºæ¬è¯æ³ï¼${åé/表达å¼} --代æ¿<%= åé/表达å¼%>
ELæä½ç¬¦ï¼.(常ç¨)ã[]
ELè¿ç®ç¬¦ï¼ç®æ°(+-*/)-å ³ç³»(> < >= <= ==)-é»è¾(&& || !)-æ¡ä»¶è¿ç®ç¬¦-empty(å¤ç©ºè¡¨è¾¾å¼)
ELå 置对象ï¼pageContextãpageScopeãrequestScopeãsessionScopeãapplicatinoScopeãparamãparamValuesãheaderãheaderValuesãcookieãinitParam
EI访é®ä½ç¨åï¼page/request/session/application
pageScope/requestScope/sessionScope/applicationScope
åå¼çæ°æ®ç±»åï¼æ®éåç¬¦ä¸²ãæ®éå¯¹è±¡ãæ°ç»æListéå
<%
String name="admin";
pageContext.setAttribute("name",name);
Student stu = new Student("admin","abc");
request.setAttribute("stu",stu);
List<String> list=new ArrayList<String>();
list.add("aaa");
request.setAttribute("list", list);
%>
å符串:${ name } <!--ä»å个åèªå¨æç´¢ï¼çä»·äº<%=request.findAttribute(ânameâ)%> -->
æ®é对象:${ stu.name } <!-- 访é®åé .æä½ç¬¦ çä»·äºè°ç¨å¯¹è±¡çgetXXXæ¹æ³ -->
${requestScope["student.name"]} <!-- 访é®å¯¹è±¡å±æ§ []æä½ç¬¦ -->
${requestScope.list[1] } <!-- 访é®éå -->
<!-- ELè¿ç®ç¬¦ -->
${a>b?1:2}
${not empty username} <!-- è¿åtrue -->
JSPæ ç¾ï¼æ¿ä»£JSPèæ¬,宿æ¡ä»¶å¤æ,èµå¼,è¿ä»£çåè½
å¨ä½æ ç¾(jspå ç½®æ ç¾)-JSTLæ ç¾(æ åæ ç¾)-èªå®ä¹æ ç¾
å¨ä½æ ç¾ï¼<jsp:forward/>è½¬åæ ç¾ã<jsp:param/>åæ°æ ç¾ã<jsp:include/>å 嫿 ç¾
å 嫿 ç¾åç(卿å å«):å å«ä¸è¢«å å«ç页é¢åç¬ç¿»è¯æä¸åçjavaæä»¶ï¼è¿è¡æ¶åå¹¶
éæå å«ï¼å åå¹¶åç¿»è¯,ä¸è½æºå¸¦åæ° <%@include%>
卿å å«ï¼å ç¿»è¯ååå¹¶,æºå¸¦åæ° <jsp:include />
<jsp:forward page="path"/> --跳转页é¢
<jsp:param name="paramName" value="paramValue" /> --ä¼ å
<jsp:include page="/common/header.jsp" /> --卿å å«
<jsp:userBean id=ââ class=ââ scope=âpageâ /> -- new对象
<jsp:setProperty> --设置æå®å¯¹è±¡çæå®å±æ§
<jsp:getProperty> --ååºæå®å¯¹è±¡çæå®å±æ§ã
JSTLæ ç¾(java standard tag libarary)ï¼javaæ åæ ç¾åº
æ ç¾åºåç±»ï¼æ ¸å¿æ ç¾åº(c)-å½é åæ ç¾åº(fmt)-EL彿°åº(fn)-SQLæ ç¾åº(sql)-XMLæ ç¾åº(x)
<!-- å¯¼å ¥jarå :jstl.jarãstandard.jar -->
<!-- å¼ç¨åº -->
<!-- uri: 表示éè¦å¯¼å ¥çæ ç¾åºçuriåç§°ãæ¯ä¸ªæ ç¾åºé½ä¼æä¸ä¸ªtldåç¼åçæ ç¾å£°ææä»¶ï¼å¨tldæä»¶ä¸é½æå¯ä¸çuriçåç§°
prefix: ä½¿ç¨æ ç¾åºçåç¼ï¼éç¨åtldæä»¶çshort-nameåç§°ç¸å -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<!-- æ ¸å¿æ ç¾åºc -->
ä¿åæ°æ®ï¼<c:set></c:set>
è·åæ°æ®ï¼<c:out value=""></c:out>
忡件夿ï¼<c:if test=""></c:if>
夿¡ä»¶å¤æï¼<c:choose></c:choose>ã<c:when test=""/>ã<c:otherwise />
è¿ä»£(循ç¯)ï¼<c:forEach />ã<c:forTokens items="" delims=""></c:forTokens>
éå®åï¼<c:redirect></c:redirect>
<!-- var:æ°æ®çåç§° value:ä¿åçæ°æ®å¼ scope:ä¿åå°å -->
<!-- requestä½ç¨ååå¼ =>request.setAttribute("username","admin"); -->
<c:set var="username" value="admin" scope="request"></c:set>
<!-- è·ååå¯¹è±¡æ°æ®
value: 代表è·ååä¸çæä¸ªåç§°å 容ãå¦ææ°æ®å¨åä¸,å¿ é¡»ä½¿ç¨ELè¯æ³å»è·å
default: é»è®¤å¼ãå½åéè¦è·åçå 容为null,ç¨é»è®¤å¼ä»£æ¿
escapeXml: é»è®¤æ åµä¸ä¸ºtrue,outæ ç¾ä¼æè¾å ¥çå 容è¿è¡è½¬ä¹ã妿ä¸è½¬ä¹å为false
-->
<c:out var="${name}" default="é»è®¤å¼"></c:out>
<%
int i = 1;
pageContext.setAttribute("i", 1);
%>
<c:if test="${i == 1 }">iç弿¯1</c:if>
<c:choose>
<c:when test="${i==1 }">
i弿¯1
</c:when>
<c:otherwise>
i弿ªç¥
</c:otherwise>
</c:choose>
<!-- è¿ä»£ -->
<!-- begin: èµ·å§ä½ç½®,ä»0å¼å§
end: ç»æä½ç½®
step: å¢å æ¥é¿,é»è®¤step为 1
items: éå对象(æ°ç»|Listéå|Mapéå),妿æ¯è·ååæ°æ®ï¼é£ä¹ä½¿ç¨EL表达å¼è·å
var: æ¯ä¸ªå ç´ åç§°
varStatus: å½åç¶æå¯¹è±¡,该对象å°è£ å½åå ç´ ç¶æä¿¡æ¯
-->
<!-- Listéå-->
<%
User u1 = new User(1,"aaa");
User u2 = new User(2,"bbb");
List<User> list = new ArrayList<User>();
list.add(u1);
list.add(u2);
request.setAttribute("list", list);
%>
<c:forEach var=âuâ items="${requestScope.list }">
${u.id } ${u.name }
</c:forEach>
<!-- Mapéå-->
<!-- forEachæ ç¾éåMapéåæ¶,ææ¯ä¸ªMapç对象使ç¨Entryå°è£ ,Entryå°è£ é®å¯¹è±¡åå¼å¯¹è±¡
éè¿getKey()è·åé®å¯¹è±¡ï¼éè¿getValue()è·åå¼å¯¹è±¡ -->
<c:forEach items="${map}" var="entry">
${entry.key } - ${entry.value }
</c:forEach>
<!-- å½é å/æ ¼å¼åæ ç¾åºfmt -->
<!-- æ ¼å¼åæ¥æ -->
<fmt:formatDate pattern="yyyy-MM-dd HH:mm:ss" value="<%=new Date() %>" />
<!-- æ ¼å¼åæ°å -->
<fmt:formatNumber pattern=â###,###.00â value="12332232.33438971" />
<!-- çä»·äº request.setCharacterEncoding("UTF-8"); -->
<fmt:requestEncoding value="UTF-8" />
<!-- 彿°æ ç¾åºfnï¼å¿ é¡»åå¨EL表达å¼ä¸ -->
<!-- 夿æ¯å¦ä»¥.txtç»å°¾ -->
${fn:endsWith("aaa.txt", ".txt")}
<!-- æªåå符串 -->
${fn:substring("abcdefghijklmn", 6,8)}
èªå®ä¹æ ç¾ï¼
å¼åæ¥éª¤:æ ç¾å¤çç±»(xxTag,ç»§æ¿SimpleTagSupport)+tldæä»¶(WEB-INF/.tld)+使ç¨(taglib)
æ§è¡åç:setJspContext>setParent(ç¶æ ç¾)>setJspBody(æ ç¾ä½å 容)>doTag(è°ç¨æ ç¾)
<!-- WEB-INF/xx.tldæä»¶ -->
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<!-- æ ç¾ççæ¬å· -->
<tlib-version>1.1</tlib-version>
<!-- ç®ååç§°ï¼ç¨äºä½¿ç¨æ ç¾åºçåç¼ -->
<short-name>ct</short-name>
<!-- æ¯æ ç¾åºçå¯ä¸åç§° -->
<uri>http://ct.hfxt.cn</uri>
<!-- å®ä¹ä¸ä¸ªæ ç¾ -->
<tag>
<!-- æ ç¾åç§° -->
<name>xx</name>
<!-- æ ç¾å¤çç¨åºçå ¨åï¼ å å+ç±»å -->
<tag-class>ct.hfxt.cn.tag.xxTag</tag-class>
<!-- æ ç¾ä½å 容è¾åºæ ¼å¼ -->
<body-content>scriptless</body-content>
</tag>
<tag>
<!-- æ ç¾åç§° -->
<name>parent</name>
<!-- æ ç¾å¤çç¨åºçå ¨åï¼ å å+ç±»å -->
<tag-class>ct.hfxt.cn.tag.ParentTag</tag-class>
<!-- æ ç¾ä½å 容è¾åºæ ¼å¼ -->
<body-content>scriptless</body-content>
</tag>
</taglib>
JDBCåJavaBeanæä½æ°æ®åº
JavaBeanï¼éµå®ä»¥ä¸è§èçæ®éjavaç±»
1.å¿ é¡»æä¸ä¸ªæ åçæé æ¹æ³
2.æç±»ç屿§ç§æåprivate(ä¸è½ç´æ¥è®¿é®å±æ§)
3.å¿ é¡»æä¾å ¬å¼çgetteråsetteræ¹æ³(éè¿getteråsetteræä½å±æ§)
JavaBeanä½ç¨ï¼ç¨äºå°è£ ä¸å¡çæ°æ®,æä½å¯¹è±¡ç屿§(getteræsetteræ¹æ³)
JDBCææ¯ï¼ä½¿ç¨Javaç¨åºè®¿é®ææä½æ°æ®åº(åéSQLè¯å¥)çæ¥å£
ç»å½æ°æ®åº(ip|port|user|password|è¿æ¥çæ°æ®åº)>åésqlè¯å¥
jdbcæ¥å£ï¼æ ¸å¿åºç¡å (java.sql.*)-æ©å±å (javax.sql.*)
JDBCæ¥å£:Driver-Connection-Statement-ResultSet
|-Driveræ¥å£ï¼é©±å¨ç¨åºæ¥å£
|-Connection connect(): ç¨äºè¿æ¥æ°æ®åºçæ¹æ³
å¯ä»¥ä½¿ç¨é©±å¨ç¨åºç®¡çç±»è·åè¿æ¥ï¼DriverManager.getConnection(url,user,pasword);
|-Connectionæ¥å£ï¼ä»£è¡¨åæ°æ®åºçè¿æ¥
|- Statement createStatement(): å建Statementæ¥å£ç对象ã
|- PreparedStatement prepareStatement(String sql): å建PreparedStatement
|- CallableStatement prepareCall(String sql): å建CallableStatementæ¥å£ç对象
|-Statementæ¥å£ï¼ç¨äºæ§è¡éæSQLè¯å¥
|- int executeUpdate(String sql): æ§è¡DDLåDMLè¯å¥ï¼æ´æ°sqlè¯å¥ï¼
|- ResultSet executeQuery(String sql): æ§è¡DQLè¯å¥(æ¥è¯¢sqlè¯å¥)
|-PreparedStatementæ¥å£ï¼ç¨äºæ§è¡é¢ç¼è¯SQLè¯å¥
|- int executeUpdate()ï¼æ§è¡DDLåDMLè¯å¥ï¼æ´æ°sqlè¯å¥ï¼
|- ResultSet executeQuery(): æ§è¡DQLè¯å¥(æ¥è¯¢sqlè¯å¥)
|-CallableStatementæ¥å£ï¼ç¨äºæ§è¡åå¨è¿ç¨SQLè¯å¥
|- ResultSet executeQuery(): åå¨è¿ç¨åªè½æ§è¡æ¥è¯¢sql
|-ResultSetæ¥å£ï¼è¡¨ç¤ºæ°æ®åºç»æé
|- boolean next(): å°å æ ç§»è³ä¸ä¸è¡
|- getXXX(): è·åç»æéä¸çæ¯åçå¼
JDBCæä½æ¥éª¤ï¼è·åè¿æ¥>å建Statement>æ§è¡sql(CRUD)>ç»æé>å ³éèµæº
1)注å驱å¨:Class.forName(驱å¨ç±»åç§°)
2)è·åè¿æ¥å¯¹è±¡:Connection conn = DriverManger.getConnection(url,user,password);
3)å建Statement对象(Statement/PreparedStatement/CallableStament)
conn.createStatement()
conn.preparedStaement(sql);
conn.preparedCall(sql)
4)å¦æä½¿ç¨PreparedStatement/CallableStament,è®¾ç½®åæ°stmt.setXXX(åæ°ä½ç½®,åæ°å¼)
5)æ§è¡sql(åéåæ°)
DDL+DMLï¼stmt.executeUpdate()
DQLï¼ResultSet rs = stmt.executeQuery()
6)å¤çç»æé:rs.next()ãrs.getXXX() åç´¢å¼åååç§°
7)å ³éèµæº:rs.close();stmt.close();conn.close();
å¯¼å ¥å½åè¦è¿æ¥çæ°æ®åºç¸åºçjarå
oracle 10g(ojdbc14.jar)/oracle 11g(ojdbc6.jar)/mySQL(mysql-connecyor)
//MySQL JDBC
private static String url = "jdbc:mysql://localhost:3306/d2017";
//è¿æ¥æ°æ®åºçå符串:jdbcåè®®+æ°æ®åºåè®®+主æºå°å+端å£+è¿æ¥çæ°æ®åº
private static String user = "root";//ç¨æ·å
private static String password = "root";//å¯ç
//1.驱å¨ç¨åº(åªæ³¨å䏿¬¡)
//Driver driver = new com.mysql.jdbc.Driver(); //夿¬¡æ³¨å
Class.forName("com.mysql.jdbc.Driver");//åå°è·å
//2.è·åè¿æ¥(使ç¨é©±å¨ç®¡çç±»)
Connection conn = DriverManager.getConnection(url, user, password);
//Statement
//3)åå¤sql:éæsql
//String sql = "DELETE FROM student WHERE id=2";
//4)å建Statement对象(CRUD)
//Statement stmt = conn.createStatement();
//5)æ§è¡sql
int count = stmt.executeUpdate(sql);
//6)å ³éèµæº
stmt.close();
conn.close();
//PreparedStatement
//3p)åå¤sql:é¢ç¼è¯SQL(?åæ°çå ä½ç¬¦)
String sql = "select * from student where id=?";
//4p)å建PreparedStatement(CRUD):é¢ç¼è¯sqlè¯å¥(æ£æ¥sqlè¯æ³åæé,å©ç¨sqlç¼ååè½ï¼
PreparedStatement stmt = conn.prepareStatement(sql);
//5p)ç»åæ°èµå¼ï¼åæ°çä½ç½®ä»1å¼å§
stmt.setInt(1,16);
//6p)æ§è¡sql
rs = stmt.executeQuery();
//7p)éåç»æé
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println(id+"\t"+name);
}
//8p)å ³éèµæº
JdbcUtil.close(rs,stmt,conn);
//CallableStatement
//3c) åå¤sqlï¼å¸¦åæ°çåå¨è¿ç¨SQL
String sql = "CALL pro_testByStu2(?,?)";
//4c)é¢ç¼è¯
stmt = conn.prepareCall(sql);
//5cï¼åæ°èµå¼
stmt.setInt(1, 4);//设置è¾å ¥åæ°
stmt.registerOutParameter(2, java.sql.Types.VARCHAR);//设置è¾åºåæ°(sqlType)
//6c)åéåæ°ï¼æ§è¡sql
stmt.executeQuery();
//7c)ä»è¾åºåæ°ä¸æ¥çç»æ
/**
* ResultSetçgetXX()æ¹æ³ä¸ºäºè·ååçå¼
* CallableStatementçgetXXX()为äºè·åè¾åºåæ°çå¼
*/
String name = stmt.getString(2);
System.out.println(name);
//8c)å ³éèµæº
JdbcUtil.close( stmt, conn);
//Oracle JDBC
public int selectCount(){
int cnt = 0;
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
//1.å è½½driver驱å¨
Class.forName("oracle.jdbc.OracleDriver");
//2.éè¿DriverManagerè·å¾Connection对象
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:ORCL"
,"t38", "123");
//3.ç¼åSQLå½ä»¤
String sql = "SELECT COUNT(1) c FROM userinfo";
//4.Connection + Stringå建Statement对象
stmt = conn.createStatement();
//5.æ ¹æ®SQLå½ä»¤è°ç¨ç¸åºçæ¹æ³æ§è¡
/* executeQuery(): æ¥è¯¢ï¼è¿åâç»æéâ
* executeUpdate(): å¢å æ¹ï¼è¿åâåå½±åè¡æ°â */
rs = stmt.executeQuery(sql);
//6.å¦ææ¯æ¥è¯¢ï¼åè§£æâç»æéâResultSet
//ç»æéï¼1è¡ç¨ifï¼Nè¡ç¨while
if(rs.next()){//rs.next()æ§è¡ä¸æ¬¡è¯´æfetchä¸è¡è®°å½
/*
* getXxxx(int) æ ¹æ®å段çä½ç½®è·åæ°æ®ï¼ä½ç½®ä»1å¼å§
* getXxxx(String) æ ¹æ®å段çåç§°è·åæ°æ®ï¼ä»¥æ¥è¯¢ç»æéçå称为å
*/
cnt = rs.getInt("c");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
//7.å ³éæ°æ®åºè¿æ¥èµæºï¼é¡ºåºï¼ResultSet, Statement, Connectionï¼
if(rs != null){
rs.close();
}
if(stmt != null){
stmt.close();
}
if(conn != null){
conn.close();
}
return cnt;
}
//é ç½®æä»¶jdbc.propertiesï¼key=value,é®åå¼Stringå½¢å¼
//Oracle
jdbc.driverClassName=oracle.jdbc.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl
jdbc.username=t38
jdbc.password=1234
//MySQL
url=jdbc:mysql://localhost:3306/d2017
user=root
password=root
driverClass=com.mysql.jdbc.Driver
//JdbcUtilå·¥å ·ç±»:MySQL JDBCå°è£
public class JdbcUtil {
private static String url = null; //url
private static String user = null; //user
private static String password = null; //password
private static String driverClass = null; //驱å¨ç¨åºç±»
static{ //注å驱å¨ç¨åº:éæä»£ç
try {
/**
* 读åjdbc.propertiesæä»¶
*/
//1)å建Properties对象
Properties prop = new Properties();
//æé è¾å ¥æµ
/**
*web项ç®:å½åç®å½æå%tomcat%/binç®å½,å¨web项ç®ä¸è½ä½¿ç¨ç¸å¯¹è·¯å¾
*web项ç®å è½½é ç½®æä»¶:ServletContext.getRealPath()/getResourceAsStream()
*/
//1)è·åç±»ç对象
Class clazz = JdbcUtil.class;
//2) 使ç¨ç±»è·¯å¾çè¯»åæ¹æ³å»è¯»åæä»¶
/**
* 类路å¾ï¼æ¥è¯¢ç±»çç®å½/è·¯å¾
* java项ç®ä¸ï¼ç±»è·¯å¾çæ ¹ç®å½ï¼æå项ç®çbinç®å½
* web项ç®ä¸ï¼ç±»è·¯å¾çæ ¹ç®å½ï¼æå项ç®çWEB-INF/classesç®å½
*/
InputStream in = clazz.getResourceAsStream("/jdbc.properties");
//æé è¾å ¥æµ
//InputStream in = new FileInputStream("./src/jdbc.properties");
//2)å è½½æä»¶
prop.load(in);
//3)读åæä»¶å 容
url = prop.getProperty("url");
user = prop.getProperty("user");
password = prop.getProperty("password");
driverClass = prop.getProperty("driverClass");
Class.forName(driverClass);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* è·åè¿æ¥æ¹æ³
*/
public static Connection getConnection(){
try {
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* éæ¾èµæºçæ¹æ³ stmt+conn
*/
public static void close(Statement stmt,Connection conn){
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
/**
* éæ¾èµæºçæ¹æ³ rs+stmt+conn
*/
public static void close(ResultSet rs,Statement stmt,Connection conn){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
}
JDBCæ¹å¤çï¼
Statementæ¹å¤çï¼
void addBatch(String sql) æ·»å sqlå°ç¼ååºï¼ææ¶ä¸åéï¼
int[] executeBatch() æ§è¡æ¹å¤çå½ä»¤ã åéææç¼ååºçsql
void clearBatch() æ¸ ç©ºsqlç¼ååº
PreparedStatementæ¹å¤çï¼
void addBatch() æ·»å åæ°å°ç¼ååº
int[] executeBatch() æ§è¡æ¹å¤çå½ä»¤ã åéææç¼ååºçsql
void clearBatch() æ¸ ç©ºsqlç¼ååº
JDBCå¤çå¤§æ°æ®æä»¶:
mysql:
å符串(varchar/char 65535)>å¤§ææ¬æ°æ®(tinytext/longtext/text)
åèbit>大åèæä»¶:tinyblob(255b)/blob(64kb)/MEDIUMBLOB(16M)/longblob(4GB)
oracleï¼
å符串(varchar/char 65535)>å¤§ææ¬æ°æ®(clob)
åè(bit)>大åèæä»¶(blob)
æ°æ®åºäºå¡ï¼
mysqlæ°æ®åºäºå¡
å¼å¯äºå¡ï¼ set autocommit=0;
æäº¤äºå¡ï¼ commit;
åæ»äºå¡ï¼ rollback;
jdbcæ§å¶äºå¡
å¼å¯äºå¡ï¼ Connection.setAutoCommit(false);
æäº¤äºå¡ï¼ Connection.commit();
åæ»äºå¡ï¼ Connection.rollback();
è¿æ¥æ± ï¼æé«Connection对象çå©ç¨çï¼æé«æ§è¡sqlçæç; æå¤§è¿æ¥
jdbcæ¥éª¤ï¼è·åè¿æ¥->å¾å°Statement->åésql->å
³éè¿æ¥
è¿æ¥æ± è¦ç´ ï¼åå§åè¿æ¥æ°-æå¤§è¿æ¥æ°-æå¤§çå¾
æ¶é´
//èªå®ä¹è¿æ¥æ±
private static LinkedList<Connection> pool = new LinkedList<Connection>();
private int initCount = 5; //è¿æ¥æ± çåå§åè¿æ¥æ°
private int maxCount = 10; //è¿æ¥æ± çæå¤§è¿æ¥æ°
private int currentCount = 0; //ç¨äºè®°å½å½åè¿æ¥æ°é
è¿æ¥æ± å·¥å ·ï¼DBCP(BasicDataSourceè¿æ¥æ± 对象)-C3P0(hibernateå ç½®é»è®¤)
DataSourceæ¥å£:ç»ä¸è¿æ¥æ± è·åè¿æ¥çæ¹æ³
// DBCP
//1)å建dbcpè¿æ¥æ± 对象
BasicDataSource bds = new BasicDataSource();
//2)è®¾ç½®è¿æ¥åæ°
bds.setUrl(url);
bds.setUsername(user);
bds.setPassword(password);
bds.setDriverClassName(driverClass);
//3)è®¾ç½®è¿æ¥æ± åæ°
bds.setInitialSize(5);//åå§åè¿æ¥
bds.setMaxActive(10);//æå¤§è¿æ¥æ°
bds.setMaxWait(3000);//å½è¶ è¿æå¤§è¿æ¥æ°æ¶ï¼æå¤§çå¾ æ¶é´ä¸º3ç§
//4)è·åè¿æ¥
try {
//ä»è¿æ¥æ± ä¸è·åè¿æ¥
for(int i=1;i<=11;i++){
Connection conn = bds.getConnection(); //注æï¼ è¿éè¿åçConnection对象ï¼ä¸æ¯åæ¥çConnectionï¼èæ¯ä»£çåçConnection对象
System.out.println(conn);
//使ç¨è¿æ¥æ± ï¼è®°ä½éæ¾è¿æ¥
if(i==3){
conn.close();//æè¿æ¥å¯¹è±¡æ¾åè¿æ¥æ± ä¸çãè¿æ¥æ± 䏿大è½å¤ä¿åæå¤§è¿æ¥æ°çè¿æ¥å¯¹è±¡
}
}
} catch (SQLException e) {
e.printStackTrace();
}
// C3P0
//1)åå»ºè¿æ¥æ± 对象
ComboPooledDataSource cds = new ComboPooledDataSource();
//2)è®¾ç½®è¿æ¥åæ°
cds.setJdbcUrl(url);
cds.setUser(user);
cds.setPassword(password);
cds.setDriverClass(driverClass);
//3)è®¾ç½®è¿æ¥æ± ç¸å ³çåæ°
cds.setInitialPoolSize(5);//åå§åè¿æ¥æ°
cds.setMaxPoolSize(10);//æå¤§è¿æ¥æ°
cds.setCheckoutTimeout(3000);//æå¤§çå¾ æ¶é´
cds.setMinPoolSize(3); //æå°è¿æ¥æ°
//4)è·åè¿æ¥
for(int i=1;i<=11;i++){
Connection conn = cds.getConnection();
System.out.println(conn);
//å ³é第3个
if(i==3){
conn.close();//æ¬è´¨æ¯æè¿æ¥å¯¹è±¡æ¾åè¿æ¥æ± ä¸
}
}
BeanUtilsï¼æ¹ä¾¿å¼åè æä½javabean对象, æ·è´javabean对象
commons-beanutils.jaræ ¸å¿å +commons-logging.jarè¾ å©å
//1.ä»ä¸ä¸ªjavabeanæ·è´å°å¦ä¸ä¸ªjavabeanå¯¹è±¡ï¼ææå±æ§ï¼
BeanUtils.copyProperties(æ·è´å°ç对象,忥ç对象);
//2.æ·è´ä¸ä¸ªjavabean对象ç屿§
BeanUtils.copyProperty(æ·è´å°ç对象, "æ·è´ç屿§", "æ·è´çå¼");
//3.ä»ä¸ä¸ªmapéå䏿·è´å°javabean对象ä¸
BeanUtils.copyProperties(javabean对象, map);
å æ°æ®ï¼ç¼åæ´éç¨çjdbc代ç
æ°æ®åºå æ°æ®DatabaseMetaData-åæ°å æ°æ®ParameterMetaData-ç»æéçå æ°æ®ResultSetMetaData
1.è¿æ¥æ°æ®åºï¼æ°æ®åºçå æ°æ®å¯¹è±¡DatabaseMetaData
DatabaseMetaData dbmd = conn.getMetaData();
2.é¢ç¼è¯statementæ§è¡sqlï¼é¢ç¼è¯çsqlåæ°ä½¿ç¨åæ°å æ°æ®ParameterMetaData
ParameterMetaData pmd = stmt.getParameterMetaData();
3.æ§è¡æ¥è¯¢sqlï¼è¿åç»æéResultSet rsï¼ä½¿ç¨ç»æéçå æ°æ®ResultSetMetaData
ResultSetMetaData rsmd = rs.getMetaData();
DBUtils: jdbc代ç çå°è£
QeuryRunnerç±»: update()æ´æ°ãquery()æ¥è¯¢
ReusltHandleræ¥å£(æç»æéå°è£ æä¸åç对象):BeanHandlerãBeanListHandlerãScalarHandler
导å : DBCP (commons-dbcp.jaræ ¸å¿å +commons-pool.jarè¾ å©å )ãC3P0(c3p0-0.9.1.2.jar)
//jdbcUtil:è¿æ¥æ± çæ¬çjdbcUtil
public class JdbcUtil {
//ä¸ä¸ªæ°æ®åºåªéè¦ä¸ä¸ªè¿æ¥æ± 对象
private static DataSource ds = new ComboPooledDataSource();
/**
* è·åè¿æ¥æ± å¯¹è±¡çæ¹æ³
*/
public static DataSource getDataSource(){
return ds;
}
/**
* è·åè¿æ¥å¯¹è±¡çæ¹æ³
*/
public static Connection getConnectio(){
try {
return ds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
//SQLUtil
/**
* ResultSetHandleræ¥å£: ç¨äºæç»æéå°è£ æä¸åç±»åç对象
* ArrayHandlerç±»: æç»æéç第ä¸è¡ç»æå°è£ æå¯¹è±¡æ°ç»
* ArrayListHandlerç±»ï¼ æç»æéçæ¯ä¸è¡ç»æå°è£ æå¯¹è±¡æ°ç»ï¼ææ¯ä¸ªå¯¹è±¡æ°ç»æ¾å ¥Listéåä¸
* BeanHandlerç±»ï¼ æç»æéç第ä¸è¡ï¼å°è£ æjavabean对象(常ç¨)
* BeanListHandlerç±»ï¼ æç»æéçæ¯è¡å°è£ æjavabean,ææ¯ä¸ªjavabeanæ¾å ¥Listéåä¸ï¼å¸¸ç¨ï¼
* ScalarHandlerç±»ï¼æ¥è¯¢èå彿°(ä¾å¦:count(*)) (常ç¨)
*/
public class SQLUtil {
/**
* éç¨çæ´æ°æ¹æ³
*/
public static void update(String sql,Object[] values){
try {
ComboPooledDataSource ds = new ComboPooledDataSource();
Connection conn = ds.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql);
ParameterMetaData pmd = stmt.getParameterMetaData();
//å¾å°sql䏿å ä¸ªåæ°
int count = pmd.getParameterCount();
//å¯ä»¥æåæ°å¼æ¾å ¥æ°ç»ä¸
//æ°çèµå¼æ¹å¼
for(int i=1;i<=count;i++){
//setObjectå¯ä»¥è®¾ç½®ä»»ä½ç±»ååæ°
stmt.setObject(i, values[i-1]);
}
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* éç¨çæ¥è¯¢æ¹æ³
*/
public static <T> List<T> query(String sql,Object[] values,Class<T> clazz){
try {
ComboPooledDataSource ds = new ComboPooledDataSource();
Connection conn = ds.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql);
ParameterMetaData pmd = stmt.getParameterMetaData();
//å¾å°åæ°æ°é
int paramCount = pmd.getParameterCount();
//妿æ¯nullï¼åä¸èµå¼äº
if(values!=null){
//åæ°èµå¼
for(int i=1;i<=paramCount;i++){
stmt.setObject(i, values[i-1]);
}
}
ResultSet rs = stmt.executeQuery();
//å¾å°ç»æéçå æ°æ®
ResultSetMetaData rsmd = rs.getMetaData();
//å¾å°åæ°é
int columnCount = rsmd.getColumnCount();
List list = new ArrayList();
while(rs.next()){//è¡
//æ¯ä¸è¡æ°æ®å°±æ¯ä¸ä¸ªå¯¹è±¡
//æé 对象
Object obj = clazz.newInstance();
//é忝å
for(int i=1;i<=columnCount;i++){
//å¾å°è¡¨çåå¼
Object value = rs.getObject(i);
//éè¿ç»æéå æ°æ®å¯ä»¥å¾å°å段åç§°
String columnName = rsmd.getColumnName(i);
//表ä¸çæ¯åçå¼å°±å°è£ å°å¯¹è±¡çæ¯ä¸ªå±æ§ä¸
//约å®ä¸ä¸ªåæï¼è¡¨ä¸çæ¯ä¸ªå段åç§°åjavabean对象ä¸å±æ§åç§°ä¿æä¸è´
//æå¼æ·è´å°javabean对象ä¸
BeanUtils.copyProperty(obj, columnName, value);
}
list.add(obj);
}
return list;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
JNDIæ°æ®æº
使ç¨JNDIæ°æ®æºçæ¥éª¤ï¼
- å¨Tomcatçcontext.xmlé ç½®æä»¶ä¸æ·»å æ°æ®æºé ç½®ï¼
<Resource name="mssql" type="javax.sql.DataSource" auth="Container" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;DataBaseName=petdb"
username="admin" password="123"
maxActive="10" maxIdle="2" maxWait="10000"
/>
- ç»Tomctæ·»å æ°æ®åºé©±å¨jarå ï¼å¨tomcatçlibç®å½ä¸æ·»å æ°æ®åºé©±å¨jarå
- å¨web项ç®çæ ¸å¿é ç½®æä»¶web.xmlä¸å»å ³èè¦ä½¿ç¨çJNDIæ°æ®æº
<resource-ref>
<description>news DataSource</description>
<res-ref-name>mssql</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
- å¨ä»£ç ä¸è·å¾JNDIæ°æ®æºä¸çæä¸ªæ°æ®åºè¿æ¥å¯¹è±¡
Context cxt = new InitialContext();
DataSource ds = cxt.lookup("java:comp/env/mssql");//åç¼java:comp/env/
Connection conn = ds.getConnection();
å页æ¥è¯¢&æ¡ä»¶æ¥è¯¢
å页æ¥è¯¢ï¼å页对象PageBean>Servlet(è½¬åæ°æ®)>jsp页é¢(å±ç¤ºPageBeanæ°æ®)
å页æ¥è¯¢ä¸å±ç»æï¼
javabean对象ï¼å½åé¡µçæ°æ®ãé¦é¡µãä¸ä¸é¡µãä¸ä¸é¡µãæ«é¡µ/æ»é¡µæ°ãå½å页ç ãæ»è®°å½æ°ãæ¯é¡µæ¾ç¤ºè®°å½æ°
daoå±ï¼æ¥è¯¢å½åé¡µçæ°æ®|æ»è®°å½æ°
serviceå±ï¼å°è£ å页javabean对象(é¦é¡µ|ä¸ä¸é¡µ|ä¸ä¸é¡µ|æ«é¡µ/æ»é¡µæ°ï¼
webå±ï¼å½å页ç |æ¯é¡µæ¾ç¤ºè®°å½æ°
æ¡ä»¶æ¥è¯¢ï¼æ ¹æ®ä¸åçæ¡ä»¶æ¼åæ¡ä»¶æ¥è¯¢çsqlè¯å¥
æ¡ä»¶æ¥è¯¢sqlè¯å¥ï¼
select * from 表 where 1=1 (ææç«)
if æ¡ä»¶1
and åæ®µ1 like å 容 (æ¨¡ç³æ¥è¯¢)
if æ¡ä»¶2
and å符2 like å 容
å页+æ¡ä»¶æ¥è¯¢ï¼å页çåºç¡ä¸ï¼ä¿®æ¹è¿ä¸¤æ¡è¯å¥
æ¥è¯¢å½åé¡µæ°æ®çsqlè¯å¥ï¼
select * from 表 where 1=1
if æ¡ä»¶1
and åæ®µ1 like å 容
if æ¡ä»¶2
and å符2 like å 容
limit èµ·å§è¡,æ¯é¡µæ¥è¯¢è¡æ°;
æ¥è¯¢æ»è®°å½æ°çsqlè¯å¥ï¼
select count(*) from 表 where 1=1
if æ¡ä»¶1
and åæ®µ1 like å 容
if æ¡ä»¶2
and å符2 like å 容
//PageBean
public class PageBean {
List<Employee> data; // å½åé¡µæ°æ®
int firstPage; // é¦é¡µ
int prePage; // ä¸ä¸é¡µ
int nextPage;// ä¸ä¸é¡µ
int totalPage;// æ«é¡µ/æ»é¡µæ°
int currentPage;// å½å页
int totalCount;// æ»è®°å½æ°
int pageSize;// æ¯é¡µæ¾ç¤ºè®°å½æ°
public List<Employee> getData() {
return data;
}
public void setData(List<Employee> data) {
this.data = data;
}
/**
* é¦é¡µ
*/
public int getFirstPage() {
return 1;
}
public void setFirstPage(int firstPage) {
this.firstPage = firstPage;
}
/**
* ä¸ä¸é¡µ ç®æ³ï¼å¦æå½å页æ¯é¦é¡µï¼å为1ï¼å¦å为ï¼å½å页-1ï¼
*/
public int getPrePage() {
return this.getCurrentPage()==this.getFirstPage()?1:this.getCurrentPage()-1;
}
public void setPrePage(int prePage) {
this.prePage = prePage;
}
/**
* ä¸ä¸é¡µ ç®æ³ï¼ 妿å½åé¡µæ¯æ«é¡µï¼å为æ«é¡µï¼å¦å为ï¼å½å页+1ï¼
*/
public int getNextPage() {
return this.getCurrentPage()==this.getTotalPage()
? this.getTotalPage()
: this.getCurrentPage()+1;
}
public void setNextPage(int nextPage) {
this.nextPage = nextPage;
}
/**
* æ»é¡µæ° ç®æ³:妿æ»è®°å½æ°%æ¯é¡µæ¾ç¤ºè®°å½æ°è½å¤æ´é¤,å为(æ»è®°å½æ°/æ¯é¡µæ¾ç¤ºè®°å½æ°),å¦å ï¼æ»è®°å½æ°/æ¯é¡µæ¾ç¤ºè®°å½æ°+1ï¼
*/
public int getTotalPage() {
return this.getTotalCount()%this.getPageSize()==0 ? this.getTotalCount()/this.getPageSize(): this.getTotalCount()/this.getPageSize()+1;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
}
//Daoï¼æ ¹æ®æ¡ä»¶æ¼è£ sql
public int queryData(currentpage,pageSize,query){
QueryRunner qr = new QueryRunner(JdbcUtil.getDataSource());
StringBuffer sql = new StringBuffer("select count(*) from table where 1=1 ");
if(query!=null){
if(query.getName()!=null && !query.getName().trim().equals("")){
sql.append(" and name like '%"+query.getName()+"%'");
}
if(query.getId()!=0){
sql.append(" and deptId="+query.getId()+"");
}
}
Long count = (Long)qr.query(sql.toString(), new ScalarHandler());
return count.intValue();
}
//ListServlet
/**** 1ï¼æ¥æ¶ç¨æ·è¾å ¥çåæ°:currentPageåæ° ****/
String currentPage = request.getParameter("currentPage");
if (currentPage == null || currentPage.equals("")) {
// å¦æç¨æ·ç¬¬ä¸æ¬¡è®¿é®ï¼æ²¡æä¼ écurrentPageåæ°ï¼åå½å页为1
currentPage = "1";
}
//æ¥æ¶ç¨æ·è¾å ¥çæ¯é¡µæ¾ç¤ºè®°å½æ°
String pageSize = request.getParameter("pageSize");
//å¦ææ²¡æä¼ éè¿ä¸ªpageSizeåæ°ï¼å为é»è®¤å¼5
if(pageSize==null || pageSize.equals("")){
pageSize = "5";
}
/**** 2)è°ç¨ä¸å¡é»è¾æ¹æ³ï¼è·åç»æ ****/
//1)å°è£ PageBean对象
Service service = new Service();
PageBean pageBean = service.queryPageBean(Integer.parseInt(currentPage)
,Integer.parseInt(pageSize));
/***** 3)æç»æè½¬åå°jsp页颿¾ç¤º ****/
//2)æPageBean对象æ¾å ¥å对象ä¸
request.setAttribute("pageBean", pageBean);
//3)转åå°jsp页颿¾ç¤ºæ°æ®
request.getRequestDispatcher("/List.jsp").forward(request, response);
//List.jsp
<html>
<head>
<title>å页&æ¡ä»¶æ¥è¯¢æ°æ®</title>
</head>
<body>
<table align="center" width="600px">
<tr>
<td>
æ¥è¯¢æ¡ä»¶ï¼<input type="text" value="${param['condition'] }" />
<input type="submit" value="æç´¢"/>
</td>
</tr>
</table>
<table border="1" align="center" width="800px">
<tr>
<th><br>ç¼å·</th>
<th>å§å</th>
</tr>
<c:forEach items="${pageBean.data}" var="emp">
<tr>
<td>${obj.id }</td>
<td>${obj.name }</td>
</tr>
</c:forEach>
<tr>
<td align="center" colspan="6">
<%--
1ï¼å¦æå½å页æ¯é¦é¡µï¼é£ä¹ä¸è½ç¹å»âé¦é¡µâåâä¸ä¸é¡µâï¼å¦åå¯ä»¥ç¹å»
2) 妿å½åé¡µæ¯æ«é¡µï¼é£ä¹ä¸è½ç¹å»âä¸ä¸é¡µâåâæ«é¡µâï¼å¦åå¯ä»¥ç¹å»
--%>
<c:choose>
<c:when test="${pageBean.currentPage==pageBean.firstPage}">
é¦é¡µ
ä¸ä¸é¡µ
</c:when>
<c:otherwise>
<a href="${pageContext.request.contextPath }/ListServlet?currentPage=${pageBean.firstPage }&pageSize=${pageBean.pageSize}">é¦é¡µ</a>
<a href="${pageContext.request.contextPath }/ListServlet?currentPage=${pageBean.prePage}&pageSize=${pageBean.pageSize}">ä¸ä¸é¡µ</a>
</c:otherwise>
</c:choose>
<c:choose>
<c:when test="${pageBean.currentPage==pageBean.totalPage}">
ä¸ä¸é¡µ
æ«é¡µ
</c:when>
<c:otherwise>
<a href="${pageContext.request.contextPath }/ListServlet?currentPage=${pageBean.nextPage }&pageSize=${pageBean.pageSize}">ä¸ä¸é¡µ</a>
<a href="${pageContext.request.contextPath }/ListServlet?currentPage=${pageBean.totalPage }&pageSize=${pageBean.pageSize}">æ«é¡µ</a>
</c:otherwise>
</c:choose>
å½å为第${pageBean.currentPage }页/å ±${pageBean.totalPage }页
å ±${pageBean.totalCount }æ¡æ°æ®
æ¯é¡µæ¾ç¤º <input type="text" size="2" id="pageSize" value="${pageBean.pageSize }" onblur="changePageSize()"/> æ¡
跳转å°ç¬¬<input type="text" id="curPage" size="2" onblur="changePage()"/>页
</td>
</tr>
</table>
</body>
<script type="text/javascript">
/*æ¹åæ¯é¡µæ¾ç¤ºè®°å½æ°*/
function changePageSize(){
//1.å¾å°ç¨æ·è¾å ¥
var pageSize = document.getElementById("pageSize").value;
//夿è§åï¼åªè½è¾å ¥1-2ä¸ªçæ°å
var reg = /^[1-9][0-9]?$/;
if(!reg.test(pageSize)){
alert("åªè½è¾å ¥1-2ä½çæ°å");
return;
}
//2.请æ±ListServletï¼åæ¶åéåæ°(pageSize)
var url = "${pageContext.request.contextPath}/ListServlet?pageSize="+pageSize;
window.location.href=url;
}
/*跳转页é¢*/
function changePage(){
var curPage = document.getElementById("curPage").value;
var reg = /^[1-9][0-9]?$/;
if(!reg.test(curPage)){
alert("åªè½è¾å ¥1-2ä½çæ°å");
return;
}
/*妿è¾å ¥ç页ç 大äºçäºæ»é¡µæ°*/
var totalPage = "${pageBean.totalPage}";
if(curPage>totalPage){
alert("å·²ç»è¶ è¿æ»é¡µæ°");
return;
}
var url = "${pageContext.request.contextPath}/ListServlet?currentPage="+curPage+"&pageSize=${pageBean.pageSize}";
window.location.href=url;
}
</script>
</html>
è¿æ»¤å¨åçå¬å¨
Servletä¸å¤§ç»ä»¶ï¼servlet-è¿æ»¤å¨Filter-çå¬å¨Listener
(servlet)Servletæ¥å£ï¼javax.servlet.Servlet
(è¿æ»¤å¨)Filteræ¥å£ï¼javax.servlet.Filter
(çå¬å¨)Listeneræ¥å£ï¼javax.servlet.*
è¿æ»¤å¨(Filteræ¥å£)ï¼å¨è¯·æ±èµæº(éæèµæºæå¨æèµæº)æååºèµæº,æ§è¡è¿æ»¤ä»»å¡
Filterçå½å¨æ:æé æ¹æ³-initæ¹æ³-doFilteræ¹æ³-destoryæ¹æ³
initæ¹æ³ï¼åå§åæ¹æ³ã
åæ°FilterConfig对象ï¼ç¨äºè¯»åFilteré ç½®çinit-paramåæ°ã
doFilteræ¹æ³ï¼ æ§è¡è¿æ»¤ä»»å¡ãæ¯æ¬¡è®¿é®ç®æ èµæºæ¶è¢«æ§è¡ã
åæ°ä¸: ServletRequest,HttpServletRequestçç¶ç±»ï¼å¯ä»¥å¼ºå¶è½¬æ¢ä¸ºHttpServletREquest
åæ°äºï¼ServletResponse,HttpServletResponseçç¶ç±»ï¼å¯ä»¥å¼ºå¶è½¬æ¢ä¸ºHttpServletResponse
åæ°ä¸ï¼FilterChainï¼æ¯è¿æ»¤å¨é¾å¯¹è±¡ãå½ä¸ä¸ªèµæºåæ¶è¢«å¤ä¸ªè¿æ»¤å¨æè¿æ»¤ï¼é£ä¹å°±å½¢æä¸ä¸ªè¿æ»¤å¨é¾ãè°ç¨FilterChainçdoFilter(request,response)æ¹æ³ï¼æ§è¡è¿æ»¤å¨é¾çä¸ä¸ä¸ªè¿æ»¤å¨ï¼å¦ææ²¡æè¿æ»¤å¨åè°ç¨ç®æ èµæºã
destoryæ¹æ³ï¼éæ¯Filterå¯¹è±¡çæ¶åè°ç¨ã
è£ é¥°è æ¨¡å¼ï¼å½éè¦å¯¹æäºç±»çæ¹æ³è¿è¡å¢å¼ºï¼é£ä¹å¯ä»¥å¯¹è¯¥ç±»è¿è¡è£ 饰
1.ç¼åä¸ä¸ªè£ 饰è ç±»ï¼ç»§æ¿è¢«è£ 饰è ç±»(è¢«è£ é¥°è ç±»æ¯éfinal)
2.声æä¸ä¸ªæååéï¼ç¨äºæ¥æ¶è¢«è£ 饰è 类对象
3.å¨è£ 饰è ç±»çæé æ¹æ³ä¸ï¼æ¥æ¶è¢«è£ 饰è 类对象
4.è¦çéè¦å¢å¼ºçæ¹æ³
è§£å³åæ°ä¸æä¹±ç é®é¢ï¼MyHttpRequestè£ é¥°è ç±»ï¼å¯¹HttpServletRequestçgetParameteræ¹æ³è¿è¡å¢å¼º
getParameterValues("name") / getParameterMap();
ç½é¡µå 容å缩é®é¢ï¼MyHttpResponseè£ é¥°è ç±»,对HttpServletResponseçgetWriteræ¹æ³è¿è¡å¢å¼º
让getWriter()æ¹æ³è¿å带ç¼ååè½çPrintWriter对象ï¼è¿æ ·PrintWriterçwriteæ¹æ³åå ¥çå å®¹å°±ç´æ¥åå ¥å°PinrtWriterä¸çç¼å对象ä¸ãç¶åå¯ä»¥éè¿ç¼å对象ååºå 容ã
ByteArrayOutputStream buf = new ByteArrayOutputStream()
GZIPOutputStream gzip = new GZIPOutputStream(buf);
gzip.write(å 容);
gzip.finish(); //å 容åå ¥å°ByteArrayOutputStreamä¸
byte[] result = buf.toByteArray(); //ä»ByteArrayOutputStreamä¸å¾å°å缩åçå 容
ç»å½æéçè¿æ»¤ï¼SecurityFilterè¿æ»¤å¨ä¸ï¼è¿è¡ç»å½æéç夿ï¼è¿ä¸ªè¿æ»¤å¨è¦è¿æ»¤åªäºéè¦æéæè½è®¿é®çèµæºãï¼æ³¨æï¼ ä¸è¦è¿æ»¤ç»å½é¡µé¢ï¼ç»å½çservletï¼
if(session==null){
没ææéçå¤ç
}else{
String user = (String)session.getAttribute("user");
if(user==null){
没ææéçå¤ç
}
}
//ç»å½æååï¼åºè¯¥è¦æ¾è¡èµæº
chain.doFilter(request,response);
Filter代ç å®ç°ï¼
- å建å®ç°Filteræ¥å£çç±»
- éådoFilter()æ¹æ³ï¼æ¾è¿/è°ç¨ä¸ä¸ä¸ªè¿æ»¤å¨æä¸ä¸ä¸ªèµæºã
- web.xmlé ç½®è¿æ»¤å¨(æ å°é ç½®)ï¼
<!-- é ç½®ä¸ä¸ªè¿æ»¤å¨ -->
<!-- è¿æ»¤å¨é ç½® -->
<filter>
<!-- å é¨åç§° -->
<filter-name>FirstFilter</filter-name>
<filter-class>gz.itcast.a_filter.FirstFilter</filter-class>
</filter>
<!-- è¿æ»¤å¨æ å°é ç½® -->
<filter-mapping>
<!-- å é¨åç§°ï¼åä¸é¢çåç§°ä¿æä¸è´ -->
<filter-name>FirstFilter</filter-name>
<!--è¿æ»¤å¨çurl-patternæ¯è¿æ»¤çè·¯å¾,è䏿¯è®¿é®è¿æ»¤å¨çè·¯å¾ -->
<url-pattern>/target</url-pattern>
</filter-mapping>
<!-- åæ°ç¼ç è¿æ»¤å¨ -->
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.hfxt.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ç½é¡µå 容åç¼©è¿æ»¤å¨ -->
<filter>
<filter-name>GZIPFilter</filter-name>
<filter-class>gz.itcast.d_cases.GZIPFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>GZIPFilter</filter-name>
<url-pattern>/content</url-pattern>
</filter-mapping>
çå¬å¨ï¼çå¬å¿ 须交ç»tomcatæå¡å¨è¿è¡
webçäºä»¶ç¼ç¨:
äºä»¶æºï¼ServletContext对象 ServletRequest对象 HttpSession对象 ï¼å对象ï¼
äºä»¶ï¼ ServletContextEvent ServletRequestEventï¼xxx(å建æéæ¯å¯¹è±¡ï¼å¯¹è±¡ç屿§ä¿®æ¹)
äºä»¶çå¬å¨(æ¥å£)ï¼ServletContextListener ServletRequestListerner
ServletContext对象ï¼
ServletContextListenerï¼å建å鿝
ServletContextAttributeListenerï¼å±æ§å¢å ï¼ä¿®æ¹ï¼å é¤
ServletRequest对象ï¼
ServletRequestListenerï¼å建å鿝
ServletRequestAttributeListenerï¼å±æ§å¢å ï¼ä¿®æ¹ï¼å é¤
HttpSession对象ï¼
HttpSessionListenerï¼å建å鿝
HttpSessionAttributeListenerï¼å±æ§å¢å ï¼ä¿®æ¹ï¼å é¤
- åå»ºç¨æ·ç±»å®ç°HttpSessionBindingListeneræ¥å£
- éåvalueBound()åvalueUnbound()æ¹æ³ï¼å®ç°ç¨æ·æ°éçç»è®¡
- å¨web.xmlé ç½®çå¬å¨
<listener>
<!--çå¬å¨æå±ç±»çå®å ¨éå®å-->
<listener-class>com.hfxt.entity.UserListener</listener-class>
</listener>
æä»¶ä¸ä¼ åä¸è½½
ä¸ä¼ ï¼
ä¸ä¸ªæ¡ä»¶:
aï¼ä»¥postæ¹å¼æäº¤ç表å
bï¼è¡¨åå å¿ é¡»æ<file/> ç»ä»¶
cï¼æè¡¨åçenctype屿§è®¾ç½®ä¸ºmultipart/form-data
使ç¨apacheç»ç»çä¸ä¼ å·¥å ·
DiskFileItemFactory : 设置ä¸ä¼ ç¯å¢ãç¼å大å°ï¼ç¼åç®å½
æ ¸å¿ç±»ï¼ServletFileUploadï¼ ç¨äºè§£æä¸ä¼ çæä»¶
List<FileItem> parserRequest(request); è§£æä¸ä¼ æä»¶ï¼è¿åæä»¶å¯¹è±¡éå
FileItem对象ï¼ä»£è¡¨ä¸ä¸ªä¸ä¼ åçæä»¶(åç§°ï¼å¤§å°ï¼ç±»åï¼å 容)
FileItem.isFormFiled(): å¤æè¯¥æä»¶æ¯å¦æ¯æ®é表åç»ä»¶ã
FileItem.getString()ï¼ è·åæ®é表åç»ä»¶çå 容
1ï¼è®¾ç½®é嶿件大å°ï¼
ServletFileUpload.setFileSizeMax() : 设置å个æä»¶
ServletFileUpload.setSizeMax() è®¾ç½®æ»æä»¶
2ï¼è®¾ç½®æä»¶åç¼ç
ServletFileUpload.setHeaderEncoding("utf-8);
3ï¼è®¾ç½®ä¸ä¼ æä»¶çè¿åº¦çå¬å¨
ServletFileUpload.setProgressListener(çå¬å¨çå®ç°ç±»);
ä¸è½½ï¼
使ç¨servletè¿è¡æä»¶ä¸è½½ï¼
设置ååºå¤´ï¼éç¥æµè§å¨ä»¥ä¸è½½æ¹å¼æå¼æä»¶
response.setHeader("content-disposition,"attachment;filename=xxx.jpg");
1ï¼è¯»åå°æå¡å¨æä»¶
InputStream in = xxxxxxxx
2ï¼ææä»¶æµè¾åºå°æµè§å¨ä½ä¸ºååºçå®ä½å 容
OutputStream out = response.getOutputStream();
byte[] buf = new byte[1024];
int len = 0;
while( (len=in.read(buf))!=-1 ){
out.wirte(buf,0,len);
}
ç¬¬ä¸æ¹æ§ä»¶
ç¬¬ä¸æ¹ç»ä»¶ï¼ç¬¬ä¸æ¹ç»ç»æä¾çç»ä»¶
CKEditorï¼ç½é¡µä¸å®ç°æè§å³æå¾çç¼è¾å¨
*å¨é¡µé¢ä¸å¼å ¥ckeditor.js:
<script type=âtext/javascriptâ src=âcjeditor/ckeditor.jsâ>
</script>
*å¨é¡µé¢å å ¥textareaï¼ä½¿ä¹æä¸ºckeditor
<textarea id=ânewscontentâ name=ânewscontentâ class=âckeditorâ>
</textarea>
*éè¿config.jsé ç½®CKEditor
Webå¼å模å¼:模å1(jsp+javabean)-模å2(java+Servlet+javabean)
MVCï¼Mdoel模å(javabean)-Viewè§å¾(jstl+el)-Cotrolleræ§å¶å¨(servlet)
项ç®å¼åç»æï¼daoå±(CURD)-serviceå±(ä¸å¡é»è¾)-webå±(servlet+jsp)