几个实用的Servlet应用例子-入门、cookie、session及上传文件
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                几个实用的Servlet应用例子-入门、cookie、session及上传文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                
                            
                            
                            ??1Servlet可以被認為是服務端的applet,它被WEB服務器加載和執行,前端可以顯示頁面和獲得頁面數據,后臺可以操縱數據庫,能完成JavaBean的很多功能。在這里我較為詳細的說說Servlet在Cookie,Session和上傳文件上的應用,在說明時我給出一些能編繹運行的小例子,最后給出一個文件上傳例子以加深印象。?
??2 我們先來看看SERVLET程序的基本構架:?
??3式1:
??4 package?test;
??5 import?javax.servlet.*;?
??6 import?javax.servlet.http.*;?
??7 import?java.io.*;?
??8 import?java.util.*;?
??9 public?class?test?extends?HttpServlet?{?
?10 public?void?init(ServletConfig?config)?throws?ServletException?{?
?11 super.init(config);
?12}?
?13 public?void?service(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{?
?14 int?f?=1;?switch(f){?
?15 case?1:firstMothed(request,respponse);break;?
?16}?
?17}
?18 public?void?firstMothed(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{?
?19 response.setContentType("text/html");
?20 OutputStreamWriter?osw?=?new?
?21 OutputStreamWriter(response.getOutputStream());?
?22 PrintWriter?out?=?new?PrintWriter?(response.getOutputStream());
?23 out.println("<?html>");?
?24 out.println("<?head><?title>Servlet1<?/title><?/head>");
?25 out.println("<?body>你好!");?
?26 out.println("<?/body><?/html>");?
?27 out.close();?
?28}?
?29}?
?30式2:
?31 package?test;?
?32 import?javax.servlet.*;?
?33 import?javax.servlet.http.*;
?34 import?java.io.*;?
?35 import?java.util.*;?
?36 public?class?test?extends?HttpServlet?{?
?37 public?void?init(ServletConfig?config)?throws?ServletException?{
?38 super.init(config);
?39}
?40 public?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{
?41 response.setContentType("text/html");
?42 OutputStreamWriter?osw?=?new?OutputStreamWriter(response.getOutputStream());
?43 PrintWriter?out?=?new?PrintWriter?(response.getOutputStream());
?44 out.println("<?html>");?
?45 out.println("<?head><?title>Servlet1<?/title><?/head>");?
?46 out.println("<?body>你好!");
?47 out.println("<?/body><?/html>");
?48 out.close();
?49}
?50 public?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{
?51 response.setContentType("text/html");
?52 OutputStreamWriter?osw?=?new?OutputStreamWriter(response.getOutputStream());?
?53 PrintWriter?out?=?new?PrintWriter?(response.getOutputStream());?
?54 out.println("<?html>");
?55 out.println("<?head><?title>Servlet1<?/title><?/head>");?
?56 out.println("<?body>你好!");?
?57 out.println("<?/body><?/html>");?
?58 out.close();?
?59}?
?60}?
?61 式1適合于作總控模塊,此SERVLET作中間調度,根據不同的f值調用不同的SERVLET或方法。?
?62式2適合于對html的get和post有不同要求的情況。
?63 但這并不是絕對的,式2就完全可以代替式1,只要在doGet()方法中寫上doPost就與式1完全一樣。
?64在init方法中執行的語句,只要這個servlet被啟動了就一直有效,比如,我們在init()中new了一個對象,那么這個對象的內存空間就永遠存在,除非顯式地把這個對象賦為null,或重啟服務。
?65 HttpServletRequest和HttpServletResponse兩個對象實現http請求,它們有很多有用的方法,在下面的cookie和session管理中會細加描述。
?66 1,?cookie管理?cookie用于在客戶端保存個人所特有的信息,它采取在客戶機寫臨時文件的機制。?
?67 package?test;?
?68 import?javax.servlet.*;?
?69 import?javax.servlet.http.*;?
?70 import?java.io.*;?
?71 import?java.util.*;?
?72 public?class?test?extends?HttpServlet?{
?73 public?void?init(ServletConfig?config)?throws?ServletException?{
?74 super.init(config);
?75}
?76 public?void?service(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{
?77 //寫cookie?
?78 String?CookieName?="js79";?//若是漢字則需編碼?
?79 String?CookieValue?=?"yesky";//若是漢字則需編碼?
?80 Cookie?cookie?=?new?Cookie(CookieName,CookieValue);?
?81 cookie.setMaxAge(age);?//?age?=?Integer.MAX_VALUE?永不過期
?82 cookie.setPath("/");
?83 //讀cookie?
?84 String?value?=?null;
?85 Cookie[]?cookies?=?request.getCookies();
?86 if?(cookies?!=?null)?{
?87 for?(int?i=0;?i<?cookies.length;?i++)?{?
?88 if?(cookies[i].getName().equals(CookieName))
?89 value?=?cookies[i].getValue();?
?90 break;?
?91}?
?92}
?93}
?94 response.setContentType("text/html");?
?95 OutputStreamWriter?osw?=?new?OutputStreamWriter(response.getOutputStream());
?96 PrintWriter?out?=?new?PrintWriter?(response.getOutputStream());
?97 out.println("<?html>");
?98 out.println("<?head><?title>test<?/title><?/head>");?
?99 out.println("cookie鍵:"+CookieName+"<?br>");?
100 out.println("cookie值:?"+value);?
101 out.println("<?/body><?/html>");
102 out.close();
103}
104}
105 2,session管理?
106 Session在Servlet中是很有用的,它比cookie安全可靠靈活,但是管理起來有點麻煩,用得不好會造成服務器的開銷很大,浪費資源。下面是一個基于Session管理一個對象的簡單例子。?
107一個簡單的bean對象TestObject
108 package?test;?
109 public?class?TestObject?extends?Object?{
110 int?id?=?0;?public?String?cur="";
111}?
112 package?test;
113 import?javax.servlet.*;?
114 import?javax.servlet.http.*;?
115 import?java.io.*;?
116 import?java.util.*;
117 public?class?TestMan?extends?HttpServlet?{?
118 public?void?init(ServletConfig?config)?throws?ServletException?{
119 super.init(config);
120}
121 public?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{?
122 int?f?=?1;
123 if(request.getParameter("f")!=null)
124 f?=?
125 Integer.parseInt(request.getParameter("f"));?
126 switch(f){?
127 case?1:?this.getResult(request,response);?
128 break;
129 case?2:
130 this.setSession(request,response);
131 break;?
132}?
133}?
134 public?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{?
135 doGet(request,response);
136}
137 public?void?getResult(HttpServletRequest?request,?HttpServletResponse?response)? throws?ServletException,?IOException?{
138 TestObject?testObject?=?null;
139 testObject?=?getStatus(request,response);
140 String?html?=?testObject.id;?doWrite(?response,html);?
141}
142 public?void?setSession(HttpServletRequest?request,?HttpServletResponse?response)? throws?ServletException,?IOException?{
143 HttpSession?session?=?request.getSession();?
144 TestObject?testObject?=?null;?
145 testObject?=?getStatus(request,response);?
146 String?tmp?=?null;?
147 tmp?=?request.getParameter("id");
148 if(tmp?!=?null)?testObject.id?=?tmp;?
149 session.putValue("testObject?",article);?
150 getResult(request,response);
151}?
152 private?TestObject?getStatus(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{
153 HttpSession?session?=?request.getSession();?
154 TestObject?testObject?=?null;?
155 if(session!=null){
156 if(session.getValue("testObject?")!=null){
157 testObject?=?(TestObject)session.getValue("testObject?");
158}?
159 else{
160 testObject?=?new?TestObject?();
161}
162}
163 else{?
164 testObject?=?new?TestObject?();?
165}
166 return?testObject;?
167}
168 private?void?doWrite(HttpServletResponse?response,String?html)?throws? ServletException,?IOException?{?
169 PrintWriter?out?=?response.getWriter();
170 out.println(html);?
171 out.close();
172}
173 /?
174}?
175 若能輕松搞定上面的例子,相信讀者對SERVLET已有了較為深刻的理解。?
176下面再介紹一個上傳文件例子,其中汲及到了下載的免費JavaBean?(如有感興趣的朋友,可來函索要免費JavaBean源代碼,Email:js79@yesky.com)?
177 上傳基本原理:由頁面發出一個http請求,服務端得到請求后,解析多媒體協議,讀出文件內容,寫文件內容到服務器,所有的這些功能都封裝到JavaBean中。
178 上傳文件的必需條件:Browser端<?form>表單的ENCTYPE屬性值必須為?multipart/form-data,它告訴我們傳輸的數據要用到多媒體傳輸協議,由于多媒體傳輸的都是大量的數據,所以規定上傳文件必須是post方法,<?input>的type屬性必須是file。?
179 package?upload;
180 import?javax.servlet.*;?
181 import?javax.servlet.http.*;?
182 import?java.io.*;?
183 import?java.util.*;?
184 public?class?UpLoadServlet?extends?HttpServlet?{
185 public?void?init(ServletConfig?config)?throws?ServletException{?
186 super.init(config);
187}?
188 public?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{
189 PrintWriter?out?=?response.getWriter();
190 out.println("<?HTML><?HEAD><?TITLE>UpLoad<?/TITLE>"
191 +"<?meta?http-equiv=′Content-Type′?content=′text/html;?charset=gb2312′>"?
192 +"<?/HEAD>"?
193 +"<?body>");?
194 out.println("<?div?align=′center′?valign=′top′>"
195 +"<?span?class=′nava′>請你選擇上傳的文件(請注意文件大小只能在20K之內)<?/span><?BR>"?
196 +"<?form?ENCTYPE=′multipart/form-data′?method=post?action=′′>"?
197 +"<?input?type=′file′?name=′file′>"?
198 +"<?input?type=′submit′?value=′發送′>"?
199 +"<?/form>"
200 +"<?/div>");?
201 out.println("<?/body><?/html>");
202 out.close();?
203}?
204
205 public?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{
206 PrintWriter?out?=?response.getWriter();?
207 int?tmpID?=?1;?try?{
208 MultipartRequest?multi?=?new?MultipartRequest(request,"/home/js79/html/",?5?*?1024?*?1024);
209}
210 catch(Exception?e){
211 tmpID?=?-1;?System.out.println(e);
212}?
213 if(tmpID?==?1){
214 out.println("<?HTML><?HEAD><?TITLE>UpLoad<?/TITLE>"?
215 +"<?meta?http-equiv=′Content-Type′?content=′text/html;?charset=gb2312′>"
216 +"<?/HEAD>"
217 +"<?body>");?
218 out.println("上傳成功!<?/body><?/html>");?
219}?
220 else{
221 out.println("<?HTML><?HEAD><?TITLE>UpLoad<?/TITLE>"
222 +"<?meta?http-equiv=′Content-Type′?content=′text/html;?charset=gb2312′>"?
223 +"<?/HEAD>"
224 +"<?body>");
225 out.println("上傳不成功!<?/body><?/html>");
226}?
227 out.close();
228}
229}? ?
                        
                        
                        ??2 我們先來看看SERVLET程序的基本構架:?
??3式1:
??4 package?test;
??5 import?javax.servlet.*;?
??6 import?javax.servlet.http.*;?
??7 import?java.io.*;?
??8 import?java.util.*;?
??9 public?class?test?extends?HttpServlet?{?
?10 public?void?init(ServletConfig?config)?throws?ServletException?{?
?11 super.init(config);
?12}?
?13 public?void?service(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{?
?14 int?f?=1;?switch(f){?
?15 case?1:firstMothed(request,respponse);break;?
?16}?
?17}
?18 public?void?firstMothed(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{?
?19 response.setContentType("text/html");
?20 OutputStreamWriter?osw?=?new?
?21 OutputStreamWriter(response.getOutputStream());?
?22 PrintWriter?out?=?new?PrintWriter?(response.getOutputStream());
?23 out.println("<?html>");?
?24 out.println("<?head><?title>Servlet1<?/title><?/head>");
?25 out.println("<?body>你好!");?
?26 out.println("<?/body><?/html>");?
?27 out.close();?
?28}?
?29}?
?30式2:
?31 package?test;?
?32 import?javax.servlet.*;?
?33 import?javax.servlet.http.*;
?34 import?java.io.*;?
?35 import?java.util.*;?
?36 public?class?test?extends?HttpServlet?{?
?37 public?void?init(ServletConfig?config)?throws?ServletException?{
?38 super.init(config);
?39}
?40 public?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{
?41 response.setContentType("text/html");
?42 OutputStreamWriter?osw?=?new?OutputStreamWriter(response.getOutputStream());
?43 PrintWriter?out?=?new?PrintWriter?(response.getOutputStream());
?44 out.println("<?html>");?
?45 out.println("<?head><?title>Servlet1<?/title><?/head>");?
?46 out.println("<?body>你好!");
?47 out.println("<?/body><?/html>");
?48 out.close();
?49}
?50 public?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{
?51 response.setContentType("text/html");
?52 OutputStreamWriter?osw?=?new?OutputStreamWriter(response.getOutputStream());?
?53 PrintWriter?out?=?new?PrintWriter?(response.getOutputStream());?
?54 out.println("<?html>");
?55 out.println("<?head><?title>Servlet1<?/title><?/head>");?
?56 out.println("<?body>你好!");?
?57 out.println("<?/body><?/html>");?
?58 out.close();?
?59}?
?60}?
?61 式1適合于作總控模塊,此SERVLET作中間調度,根據不同的f值調用不同的SERVLET或方法。?
?62式2適合于對html的get和post有不同要求的情況。
?63 但這并不是絕對的,式2就完全可以代替式1,只要在doGet()方法中寫上doPost就與式1完全一樣。
?64在init方法中執行的語句,只要這個servlet被啟動了就一直有效,比如,我們在init()中new了一個對象,那么這個對象的內存空間就永遠存在,除非顯式地把這個對象賦為null,或重啟服務。
?65 HttpServletRequest和HttpServletResponse兩個對象實現http請求,它們有很多有用的方法,在下面的cookie和session管理中會細加描述。
?66 1,?cookie管理?cookie用于在客戶端保存個人所特有的信息,它采取在客戶機寫臨時文件的機制。?
?67 package?test;?
?68 import?javax.servlet.*;?
?69 import?javax.servlet.http.*;?
?70 import?java.io.*;?
?71 import?java.util.*;?
?72 public?class?test?extends?HttpServlet?{
?73 public?void?init(ServletConfig?config)?throws?ServletException?{
?74 super.init(config);
?75}
?76 public?void?service(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{
?77 //寫cookie?
?78 String?CookieName?="js79";?//若是漢字則需編碼?
?79 String?CookieValue?=?"yesky";//若是漢字則需編碼?
?80 Cookie?cookie?=?new?Cookie(CookieName,CookieValue);?
?81 cookie.setMaxAge(age);?//?age?=?Integer.MAX_VALUE?永不過期
?82 cookie.setPath("/");
?83 //讀cookie?
?84 String?value?=?null;
?85 Cookie[]?cookies?=?request.getCookies();
?86 if?(cookies?!=?null)?{
?87 for?(int?i=0;?i<?cookies.length;?i++)?{?
?88 if?(cookies[i].getName().equals(CookieName))
?89 value?=?cookies[i].getValue();?
?90 break;?
?91}?
?92}
?93}
?94 response.setContentType("text/html");?
?95 OutputStreamWriter?osw?=?new?OutputStreamWriter(response.getOutputStream());
?96 PrintWriter?out?=?new?PrintWriter?(response.getOutputStream());
?97 out.println("<?html>");
?98 out.println("<?head><?title>test<?/title><?/head>");?
?99 out.println("cookie鍵:"+CookieName+"<?br>");?
100 out.println("cookie值:?"+value);?
101 out.println("<?/body><?/html>");
102 out.close();
103}
104}
105 2,session管理?
106 Session在Servlet中是很有用的,它比cookie安全可靠靈活,但是管理起來有點麻煩,用得不好會造成服務器的開銷很大,浪費資源。下面是一個基于Session管理一個對象的簡單例子。?
107一個簡單的bean對象TestObject
108 package?test;?
109 public?class?TestObject?extends?Object?{
110 int?id?=?0;?public?String?cur="";
111}?
112 package?test;
113 import?javax.servlet.*;?
114 import?javax.servlet.http.*;?
115 import?java.io.*;?
116 import?java.util.*;
117 public?class?TestMan?extends?HttpServlet?{?
118 public?void?init(ServletConfig?config)?throws?ServletException?{
119 super.init(config);
120}
121 public?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{?
122 int?f?=?1;
123 if(request.getParameter("f")!=null)
124 f?=?
125 Integer.parseInt(request.getParameter("f"));?
126 switch(f){?
127 case?1:?this.getResult(request,response);?
128 break;
129 case?2:
130 this.setSession(request,response);
131 break;?
132}?
133}?
134 public?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{?
135 doGet(request,response);
136}
137 public?void?getResult(HttpServletRequest?request,?HttpServletResponse?response)? throws?ServletException,?IOException?{
138 TestObject?testObject?=?null;
139 testObject?=?getStatus(request,response);
140 String?html?=?testObject.id;?doWrite(?response,html);?
141}
142 public?void?setSession(HttpServletRequest?request,?HttpServletResponse?response)? throws?ServletException,?IOException?{
143 HttpSession?session?=?request.getSession();?
144 TestObject?testObject?=?null;?
145 testObject?=?getStatus(request,response);?
146 String?tmp?=?null;?
147 tmp?=?request.getParameter("id");
148 if(tmp?!=?null)?testObject.id?=?tmp;?
149 session.putValue("testObject?",article);?
150 getResult(request,response);
151}?
152 private?TestObject?getStatus(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{
153 HttpSession?session?=?request.getSession();?
154 TestObject?testObject?=?null;?
155 if(session!=null){
156 if(session.getValue("testObject?")!=null){
157 testObject?=?(TestObject)session.getValue("testObject?");
158}?
159 else{
160 testObject?=?new?TestObject?();
161}
162}
163 else{?
164 testObject?=?new?TestObject?();?
165}
166 return?testObject;?
167}
168 private?void?doWrite(HttpServletResponse?response,String?html)?throws? ServletException,?IOException?{?
169 PrintWriter?out?=?response.getWriter();
170 out.println(html);?
171 out.close();
172}
173 /?
174}?
175 若能輕松搞定上面的例子,相信讀者對SERVLET已有了較為深刻的理解。?
176下面再介紹一個上傳文件例子,其中汲及到了下載的免費JavaBean?(如有感興趣的朋友,可來函索要免費JavaBean源代碼,Email:js79@yesky.com)?
177 上傳基本原理:由頁面發出一個http請求,服務端得到請求后,解析多媒體協議,讀出文件內容,寫文件內容到服務器,所有的這些功能都封裝到JavaBean中。
178 上傳文件的必需條件:Browser端<?form>表單的ENCTYPE屬性值必須為?multipart/form-data,它告訴我們傳輸的數據要用到多媒體傳輸協議,由于多媒體傳輸的都是大量的數據,所以規定上傳文件必須是post方法,<?input>的type屬性必須是file。?
179 package?upload;
180 import?javax.servlet.*;?
181 import?javax.servlet.http.*;?
182 import?java.io.*;?
183 import?java.util.*;?
184 public?class?UpLoadServlet?extends?HttpServlet?{
185 public?void?init(ServletConfig?config)?throws?ServletException{?
186 super.init(config);
187}?
188 public?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{
189 PrintWriter?out?=?response.getWriter();
190 out.println("<?HTML><?HEAD><?TITLE>UpLoad<?/TITLE>"
191 +"<?meta?http-equiv=′Content-Type′?content=′text/html;?charset=gb2312′>"?
192 +"<?/HEAD>"?
193 +"<?body>");?
194 out.println("<?div?align=′center′?valign=′top′>"
195 +"<?span?class=′nava′>請你選擇上傳的文件(請注意文件大小只能在20K之內)<?/span><?BR>"?
196 +"<?form?ENCTYPE=′multipart/form-data′?method=post?action=′′>"?
197 +"<?input?type=′file′?name=′file′>"?
198 +"<?input?type=′submit′?value=′發送′>"?
199 +"<?/form>"
200 +"<?/div>");?
201 out.println("<?/body><?/html>");
202 out.close();?
203}?
204
205 public?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{
206 PrintWriter?out?=?response.getWriter();?
207 int?tmpID?=?1;?try?{
208 MultipartRequest?multi?=?new?MultipartRequest(request,"/home/js79/html/",?5?*?1024?*?1024);
209}
210 catch(Exception?e){
211 tmpID?=?-1;?System.out.println(e);
212}?
213 if(tmpID?==?1){
214 out.println("<?HTML><?HEAD><?TITLE>UpLoad<?/TITLE>"?
215 +"<?meta?http-equiv=′Content-Type′?content=′text/html;?charset=gb2312′>"
216 +"<?/HEAD>"
217 +"<?body>");?
218 out.println("上傳成功!<?/body><?/html>");?
219}?
220 else{
221 out.println("<?HTML><?HEAD><?TITLE>UpLoad<?/TITLE>"
222 +"<?meta?http-equiv=′Content-Type′?content=′text/html;?charset=gb2312′>"?
223 +"<?/HEAD>"
224 +"<?body>");
225 out.println("上傳不成功!<?/body><?/html>");
226}?
227 out.close();
228}
229}? ?
轉載于:https://www.cnblogs.com/wubiyu/archive/2008/06/25/1229617.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的几个实用的Servlet应用例子-入门、cookie、session及上传文件的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 33Exchange Server 20
 - 下一篇: windows中VMWare下安装Mac