java EE開發之Servlet第一課:servlet的建立方式
本系列課程是在建立在讀者有一定的 java Web基礎技術的基礎上,如果沒有基礎,那麼看起來會很吃力。
##1,回顧
tomcat就是一個web應用伺服器,那可以這樣說服務總公司,它可以向外界提供服務,但是它本身像一個超級服務場所,允許別人在它指定的地方開門店,但是門店必須在指定的位置,按照它的統一標準開店,由總公司統一管理。那我們建立的一個web專案相當於就是一個門店,然後布屬到webapps下。開了店子弄些服務員,寫的jsp就是服務員,但是jsp必須編譯成 java程式碼 才能執行 ,那麼這個Java檔案就是一個servlet,那麼servlet是另外一種服務員
JSP和SERVLET到底什麼區別呢?
JSP就象賓館前臺的服務員,要長的不錯,讓顧客一看就覺得比較舒服,他主要就是負責顯示這個賓館的形象的.而SERVLET就象部門經理,要處理各種各樣的業務和事情
那我們怎樣才能寫一個
servlet呢,sun公司定義一套實現servlet標準(介面),只要實現了這個介面,就擁有了自己的一個servlet類,那麼類是不會提供服務的,只有這個類的一個物件才能向外界提供服務,那誰來new出這個對像呢 ,由服務總公司new出來,然後給你的門店裡使用
##2.怎樣實現servlet
##方式一:實現servlet介面
###A.介面中方法的解釋
###1)服務的方法
向外界提供服務的方法 ,每請求一次,就向外界提供服務一次,但是要注意下面的例子,i是會遞增的,那證明無論請求多少次此servlet都只有一個物件,所以足以證明servlet 是 單例模式 的
ServletRequest介面的實現類物件封裝了從客戶端向服務端傳送的請求資訊ServletResponse介面的實現類物件封裝了從服務端向客戶端響應的資訊
1 int i=0;
2 public void service(ServletRequest request, ServletResponse response)throws ServletException, IOException {
3 System.out.println("服務了一次"+i+"次");
4 }
寫好了 service就可以讓服務員掛牌服務了
· 怎麼掛牌 :這裡是打了比方等價於servlet的配置
servlet需要配置的目的是為了讓客戶端能夠訪問到該Servlet(服務員)
1 <servlet>
2 <servlet-name>hello</servlet-name>
3 <servlet-class>com.accp.servlet.Hello</servlet-class>
4 </servlet>
5 <servlet-mapping>
6 <servlet-name>hello</servlet-name>
7 <url-pattern>/hello</url-pattern> //注意“/”不能少
8 </servlet-mapping>
· 怎麼訪問呢
瀏覽器中輸入:
埠號//專案名/url-pattern配值的引數值
可以看到我們已經訪問到了我們剛剛透過實現介面的方式的寫的 Servlet,並且成功的呼叫了service方法
###**2)初始化方法 **
ServletConfig 記錄當前這個服務員的資訊(比如芳齡多少啊,哪裡人士等等)ServletConfig其實就是記錄了servlet的配置資訊
**注意:**在servlet被tomcat new出來的時候,就自動建立了ServletConfig這個物件然後tomcat會到new好的ServletConfig扔到方法內,供方法使用
一般使用的方式 :
(設定一個全域性的 ServletConfig,這樣其他的方法就可以使用到這個ServletConfig )
1 private ServletConfig config;
2 public void init(ServletConfig config) throws ServletException {
3 //在這裡進行設定(重要
4 this.config =config;
5 System.out.println("開始學習了");
6 //拿到sevlet名字
7 System.out.println("Servlet名字:"+config.
8 getServletName());
9 }
###**3)銷燬的方法 **
當 sertvlet被銷燬的時候tomcat呼叫此方法,servlet在伺服器重啟或關掉的時候被銷燬
1 public void destroy() {
2 System.out.println("銷燬了");
3 }
###4)獲取config物件的方法
返回 servlet的配置資訊物件
1 public ServletConfig getServletConfig() {
2 return config;
3 }
###5)獲取servlet說明資訊的方法
返回 servlet的說明資訊
1 public String getServletInfo() {
2 return "這是我寫的servlet";
3 }
相當於 :
1 <%@ page info="這是我寫的jsp"%>
2 <% out.println(this.getServletInfo()) %>
3
###B.使用ServletResponse 向客戶端列印輸出資訊
設定響應的編碼
第一種方式:
res.setContentType(“text/html;charset=GB18030”);
與<%@ page contentType=“text/html; charset=GB18030”%>相對應
第二種方式:
使用配置檔案和SevletConfig的配合(更具通用性,很多servlet可以同時使用)
配置檔案
1 <init-param>
2 <param-name>encoding</param-name>
3 <param-value>text/html;charset=GB18030</param-value>
4 </init-param>
SevletConfig物件得到初始化引數
1 String encoding = config.getInitParameter("encoding");
2 res.setContentType(encoding);
3 PrintWriter out = response.getWriter();
4 out.println("Hello! I am servlet!");//輸出英文
5 out.println("你好,我是servlet");//輸出中文
###C.使用ServletRequest物件拿到客戶端資訊
建立一個 jsp,寫一個表單,使用者登入提交,注意action=“url-pattern中的引數”(不要/),然後提交到一個與url-pattern對應的servlet,然後在servlet的service方法中就可以獲 取值
**注意:**中文亂碼問題(post)
1 //解決post方式提交的中文亂碼
2 req.setCharacterEncoding("GB18030");
使用超連結也可以
1 <a href="hello?uname=uu&pwd=uu">登入</a>
##方式二:繼承GenericServlet
重寫 service方法(必須的)
GenericServlet是一個抽象類實現了Servlet介面,增加了一個ServletConfig的引用
1 private ServletConfig config;
2 public void init() throws ServletException {}//新增的
3 public void init(ServletConfig config) throws ServletException {
4 this.config = config;
5 this.init();//呼叫新增的
6 }
這樣就做就沒有以前那麼麻煩,所以如果以後要重寫初始化方法,重寫新增的,如果要重寫原來的有參的 init(),要記得在方法裡寫上這句super.init(config),這是關鍵;
寫一個例子 :根據提交的方式輸出資訊
HttpServletRequest實現了ServletRequest介面
注意:請求是基於 http協議的,所以可以強制轉換
1 HttpServletRequest request = (HttpServletRequest)req;
2 PrintWriter out = res.getWriter();
3 String method = request.getMethod();
4 if(method.equalsIgnoreCase("post")){
5 out.println("hello,post");
6 }else{
7 out.println("hello,get");
8 }
9
這種方式過於麻煩於是可以採取第三種方式解決
##方式三:繼承HttpServlet
專門針對於 http協議的
HttpServlet繼承了GenericServlet,重寫了service方法
注意 : service方法中
1 if (method.equals(METHOD_GET)) {
2 doGet();
3 }else if(method.equals(METHOD_POST)){
4 doGet();
5 }
所以我們繼承 HttpServlet只需要實現doGet()和doPost()
**原理是:**先看自己類裡面有沒有service方法,子類沒有就呼叫父類的service方法,然後根據請求方式,再呼叫子類重寫的doGet()和doPost() (多型)
如果同時又重寫了 service(),出現doGet()和doPost() 失效,是因為自己類的service()裡面並沒有去呼叫doGet()和doPost(),所以要注意在重寫service(),記得在方法體內加入 super.service(req, resp);,重新調回父類的
不推薦重新 service(),除非萬不得已,需要在service()處理資料,記得在方法體內加入super.service(req, resp);
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69940641/viewspace-2908032/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- java EE開發之Servlet第二課:Servlet的三個hashMapJavaServletHashMap
- java EE開發之Servlet第五課:xml解析JavaServletXML
- java EE開發之Servlet第四課:監聽器(Listener)JavaServlet
- java EE開發之Servlet第八課:MVC模式 (基本理解)JavaServletMVC模式
- java EE開發之Servlet第十一課:反射基礎三JavaServlet反射
- Java之ServletJavaServlet
- JAVA網路程式設計基本功之Servlet與Servlet容器Java程式設計Servlet
- JavaWeb開發之建立Servlet無法自動更新web.xml配置JavaWebServletXML
- JavaWeb開發Servlet之getParameter和getAttribute的區別,JavaWebServlet
- Servlet開發-day05Servlet
- java基礎學習:JavaWeb之ServletJavaWebServlet
- 【Java基礎】ServletJavaServlet
- 第2,8章 servlet 開發技術(12課時)Servlet
- 基於jsp和servlet簡單的java web開發(idea)JSServletJavaWebIdea
- JavaWeb開發基礎Servlet APIJavaWebServletAPI
- java Servlet結構概述JavaServlet
- java servlet 生命週期JavaServlet
- Java中Servlet技術JavaServlet
- idea建立servlet工程初體驗IdeaServlet
- Servlet 規範和 Servlet 容器Servlet
- Servlet系列:(一)servlet原理剖析Servlet
- java之使用Servlet生成驗證碼的原始碼分享JavaServlet原始碼
- 96.Servlet Servlet生命週期Servlet
- Servlet第二篇【Servlet呼叫圖、Servlet細節、ServletConfig、ServletContext】ServletContext
- JavaWEB - ServletJavaWebServlet
- JavaWeb——ServletJavaWebServlet
- Servlet概述Servlet
- Java Web(5)-Servlet詳解(下)JavaWebServlet
- Java Web(5)-Servlet詳解(上)JavaWebServlet
- Java-Servlet知識總結JavaServlet
- Servlet的實現Servlet
- 作為servlet容器的hi-nginx-javaServletNginxJava
- tomcat伺服器啟動的方式Servlet入門Tomcat伺服器Servlet
- servlet 轉發與重定向Servlet
- java Servlet結構概述3之請求響應1JavaServlet
- 初識Javaweb之Servlet以及TomcatJavaWebServletTomcat
- Java 網路程式設計----初探ServletJava程式設計Servlet
- Java Servlet session實現登入退出JavaServletSession