<Java> 都快被忘掉的servlet

來源:互聯網
上載者:User

標籤:

前言

  作為一個Java web開發人員,掌握sshi等架構是必要的技能,但是用多了架構也要回過頭來看看最土的,最原始的servlet。畢竟mvc架構(struts1/2,springmvc)都是源於它的。

搭建servlet項目

  那麼首先要回憶servlet相關知識,不是去看書,最好最直接的辦法就是直接開啟IDE搭建個簡單的項目。

  1.開啟IDE建立個web項目,一般來說只要你的IDE有裝jdk和tomcat就無需引入任何jar包了(不準備涉及任何資料庫操作)。

  2.在WEB-INF下建立web.xml檔案,先把schema寫好,不知道怎麼寫直接網上複製一下。

  3.開始寫servlet,具體來說就是寫個自己的XXServlet extends HttpServlet,並override兩個必要的方法doGet和doPost就可以了,有心的同學可以把service、destroy、init方法都簡單的實現下,最好在console列印下以便瞭解這些方法的執行順序。

  4.寫好servlet後,要到剛才的web.xml中配置一下,也就是servlet+servlet-mapping,這步有個稍微要注意的就是servlet-mapping中的url-pattern,要知道什麼模式比對什麼樣的url。大概有三種:

完全符合,不解釋如:"/test/list.do"。

目錄匹配:也就是以*結尾的如:"/"或者"/*"或者"/test/*"。

擴充匹配:以*開頭的如:"*.do"。

  還有一個要注意的就是load-on-startup這個值一般可以不寫,不寫的話,tomcat會在使用到的時候才去執行個體化,而寫一個大於0的數的話就會在tomcat啟動的時候就執行個體話,所以一般來說只有在tomcat啟動時候需要使用的servlet才寫,比如web.xml中預設配置的org.apache.catalina.servlets.DefaultServlet和org.apache.jasper.servlet.JspServlet這兩個servlet就是分別是1和3。

  這種配置的麻煩在於每寫一個servlet就要來這邊配置一次,很是繁瑣。

  5.開始寫jsp檔案,這裡一直有個糾結的地方,就是jsp檔案是放在webRoot下還是放在WEB-INF下面,其實,這是沒有規定的,放在WEB-INF下面比較安全,直接全路徑訪問是會報404錯誤的,放在WebRoot下面比較方便,安全方面就用filter去配置許可權。寫jsp的時候一般都知道要在頭部加上一句

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

  這句話的意思就是當前頁面的上下文類型以及編碼格式,並且支援java。其他的和html就差不多了。

  6.這幾步弄好就可以啟動項目了,相當簡單吧。

servlet和jsp的跳轉

  一、從Jsp發送請求到servlet(比如request.getContextPath()值是/appname)

  ①、全路徑訪問,如:/appname/index.jsp

  二、從servlet跳轉Jsp

  ①、request.getRequestDispatch("index.jsp").forword(req, res);//相對路徑

  ②、response.sendRedirect(requst.getContextPath() + "/index.jsp");//絕對路徑

參數傳遞以及EL運算式

  一、jsp傳遞到servlet

  ①、url傳遞,如list.do?limit=10,servlet中通過request.getParamter("limit")擷取

  ②、form傳遞,servlet中也是通過request.getParamter("xx")擷取

  二、servlet傳遞到jsp

  ①、request.setAttribute()

  ②、session.setAttribute()

  三、jsp接收參數

  ①、<%= session.getAttribute()%>或<%= request.getAttribute()%>

  ②、EL運算式:如${info}。它會依次到page、request、session、application中尋找,找到則返回,找不回返回null。 <%@ page isELIgnored="true" %>可以啟用禁用el運算式,且預設是啟用的。

  

深入servlet和安全執行緒

  servlet是單例多線程的,意思就是初始化(init:可以傳入ServletConfig對象,然後用getInitParamter擷取)一次之後,後面如果要使用它的服務(service),tomcat就會找到它來用而不會建立一個。那麼這就要求我們在實現servlet的時候注意安全執行緒的問題。當tomcat要銷毀(destroy)它的時候,注意在destroy裡釋放用到資源。

  下面主要來說說怎麼保證servlet的安全執行緒。

  ①、首先一點init是tomcat執行的,它是單線程的,所以是安全執行緒的,所以只要考慮的是service();

  ②、service方法中如果只涉及到本地變數(也就是局部變數和參數),那麼就是安全執行緒的,為什麼這麼說:jvm的每個線程每執行一個方法就為該方法建立一個棧幀並壓入棧中,也就是說棧幀內的本地變數不是線程共用的,所以說安全執行緒。

  ③、如果service方法訪問(這裡的訪問是指有讀又有寫,如果只是僅僅讀了那麼完全不需要擔心安全執行緒問題)了這三種:servlet的成員變數、全域靜態變數、全域靜態資源(系統檔案之類的)等,就需要加上同步控制語句了(這裡不展開了。。。其實我自己也沒用過。。逃)。

  ④、destroy和init一樣,是單線程的,在伺服器重啟的時候或者長時間不用的時候,都會被銷毀。

<Java> 都快被忘掉的servlet

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.