1. 程式人生 > >servlet學習和總結

servlet學習和總結

Servlet(Server Applet),全稱Java Servlet,未有中文譯文。是用Java編寫的伺服器端程式。其主要功能在於互動式地瀏覽和修改資料,生成動態Web內容。狹義的Servlet是指Java語言實現的一個介面,廣義的Servlet是指任何實現了這個Servlet介面的類,一般情況下,人們將Servlet理解為後者。 Servlet運行於支援Java的應用伺服器中。從原理上講,Servlet可以響應任何型別的請求,但絕大多數情況下Servlet只用來擴充套件基於HTTP協議的Web伺服器。 一、訪問servlet 1、建立一個Dynamic Web Project專案,記得後面要選上web.xml

2、新建一個SevletHelloWord 類,繼承 HttpServlet 程式碼:
package servletTest1;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SevletHelloWord extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
//		super.doGet(req, resp);
		System.out.print("get");
		doPost(req,resp);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
//		super.doPost(req, resp);
		resp.setCharacterEncoding("gbk");//防止編碼亂碼
		PrintWriter out=resp.getWriter();//PrintWriter文字輸出
		out.println("<html>");
		out.println("<head><title>helloword</title></head>");
		out.println("Servlet hello word!");
		out.println("</html>");
		out.close();//關閉
	}
}

3、修改web.xml(在webconten目錄裡面),用Text 格式開啟,不要用預設的xml格式 新增servlet訪問的選項xml程式碼
<servlet>
  	<servlet-name>servletHelloWord</servlet-name>
  	<servlet-class>servletTest1.SevletHelloWord</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>servletHelloWord</servlet-name>
  	<url-pattern>/helloWorld</url-pattern>
  </servlet-mapping>
4、啟動tomcat 的Servers伺服器,記得要新增該專案
5、開啟成功後,在瀏覽器輸入:http://localhost:8080/servletTest1/helloWorld,出現列印 說明成功了
說明:servlet啟動順序,輸入網址:http://localhost:8080/servletTest1/helloWorld,如圖
二、servlet的生命週期 簡單四步:servlet類載入-》例項化-》服務-》銷燬 下面只簡單說明,
public class LifeServlet extends HttpServlet{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("service");
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("service");
	}

	@Override
	public void destroy() {
		System.out.println("servlet銷燬");
	}

	@Override
	public void init() throws ServletException {
		System.out.println("servlet初始化");
	}
	
	

	
}

執行後輸出:
其中初始化只會出現第一次, destroy方法在容器移除servlet 時執行,同樣只執行一次。這個方法會在所有的執行緒的service()方法執行完成或者超時後執行,呼叫這個方法後,容器不會再呼叫這個servlet的方法,也就是說容器不再把請求傳送給這個servlet。這個方法給servlet釋放佔用的資源的機會,通常用來執行一些清理任務。

三、客戶端跳轉跟伺服器端跳轉

1、在Servlet中獲取session,application 2、客戶端跳轉 :ersponse.sendRedirect("目標地址"); 3、伺服器跳轉:RequestDispatcher rd=request.getRequestDispatcher("目標地址"); 詳細方法,新建一個target.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>目標地址</h1>
request值:<%=request.getAttribute("requestKey") %><br/>
session值:<%=session.getAttribute("sessionKey") %><br/>
application值:<%=application.getAttribute("applicationKey") %><br/>
</body>
</html>

客戶端跳轉程式碼:
public class RedirectServlet extends HttpServlet{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setAttribute("requestKey", "request值");
		HttpSession session=request.getSession();  // 獲取session
		session.setAttribute("sessionKey", "session值");
		ServletContext application=this.getServletContext(); // 獲取application
		application.setAttribute("applicationKey", "application值");
		response.sendRedirect("target.jsp"); // 客戶端跳轉/重定向
	}
	
輸出:
服務端跳轉程式碼:
public class ForwardServlet extends HttpServlet{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setAttribute("requestKey", "request值");
		HttpSession session=request.getSession();  // 獲取session
		session.setAttribute("sessionKey", "session值");
		ServletContext application=this.getServletContext(); // 獲取application
		application.setAttribute("applicationKey", "application值");
		RequestDispatcher rd=request.getRequestDispatcher("target.jsp");
		rd.forward(request, response); // 伺服器調轉/轉發
	}
	
	

	
}
輸出:

區別:服務端就跳轉 能把request、session、application的值都傳過來, 但是客戶端不能把erquest的值傳過來,一般用服務端跳轉較多 主要參考java1234的servlet教程

相關推薦

servlet學習總結

Servlet(Server Applet),全稱Java Servlet,未有中文譯文。是用Java編寫的伺服器端程式。其主要功能在於互動式地瀏覽和修改資料,生成動態Web內容。狹義的Servlet是指Java語言實現的一個介面,廣義的Servlet是指任何實現了這個S

vim 的各種用法,很實用哦,都是本人是在工作中學習總結

運維 列表 vim編輯 一個 .com 設置 windows ati 有意義 (一)初級個性化配置你的vim 1、vim是什麽? vim是Vi IMproved,是編輯器Vi的一個加強版,一個極其強大並符合IT工程師(程序員、運維)習慣的編輯器。如果你是一名職業的SE,那麽

jdk1.8學習、jdk1.9學習、jdk10.0學習總結

font .... date des 什麽 普通 例子 span 由於 由於中文參考資料很少,參考鏈接: https://www.oschina.net/translate/109-new-features-in-jdk-10 http://chuansong.me/n

Java執行緒學習總結(執行緒的概念)

執行緒的概念: 多執行緒允許在程式中併發執行多個指令流,每個指令流都稱為一個執行緒,彼此間互相獨立。它和程序一樣擁有獨立的執行控制,由作業系統負責排程,區別在於執行緒沒有獨立的儲存空間,而是和所屬程序中的其它執行緒共享一個儲存空間,這使得執行緒間的通訊遠較程序簡單。 具體到java記憶體模型,

Hbase基礎語法學習總結

2018-06-12更新:HBase抽數過程中\t對資料插入Hive的影響。Ctrl + backspace 是刪除,單出的Backspace是無效的;Hbase中都是字串,沒有其他型別;List:列出所有表格;Scan tablename:瀏覽表,Hbase預設是儲存三個版

關於彈性盒模型學習總結

面試被問到這個問題,覺得這個看過沒問題,結果還是 紙上得來終覺淺 看一遍理解肯定沒有試一試透徹,於是決定記錄一下====================================================================首先是定義彈性盒模型#wra

Servlet學習心得總結

1)概念:Java Servlet 是執行在 Web 伺服器或應用伺服器上的程式,它是作為來自 Web 瀏覽器或其他 HTTP 客戶端的請求和 HTTP 伺服器上的資料庫或應用程式之間的中間層 2) Servlet 遵循的過程: Servlet 通過呼叫 init (

學習KNN算法體會總結

整數 推斷 代碼 span k-d樹 基本 方式 必須 發現 k-d樹(k-dimensional樹的簡稱),是一種切割k維數據空間的數據結構。主要應用於多維空間重要數據的搜索(如:範圍搜索和近期鄰搜索)。 索引結構中相似性查詢有兩種主要的方

Servlet學習總結

方法 ip 地址 初始 獲取 htm get 客戶端 init 管理 1.什麽是servlet   Servlet 是用來處理客戶端請求並產生動態網頁內容的 Java 類。Servlet 主要是用來處理或者是存儲 HTML 表單提交的數據,產生動態內容,在無狀態的 HTTP

JSPServlet學習筆記1 - 訪問配置

技術分享 exception print pack ping 分享 tdi 1.0 nds 1. 訪問WebContent目錄下的JSP文件 在WebContent中新建一個 test.jsp 文件 <%@ page language="java" co

ShellPython學習教程總結

shell fff 人生巔峰 地址 mark 總結 技術分享 python 因此 博友們好,由於運維相關技術不斷發展,個人能力也不斷提高,日常積累的經驗不能及時更新到以往的博文中。因此,為了更好的幫助大家學習運維技術,特地針對Shell和Python腳本語言總結了文檔,此文

servlet學習(四)請求轉發重定向

一、請求轉發和重定向兩者之間的區別 請求轉發:一次請求,位址列資訊不變。       重定向:兩次請求,位址列資訊會發生改變。 使用時機: 1.如果表單中有資料,而資料又比較重要,不能重複提交,建議使用重定向。 2.如果servlet接受後

Spark學習(柒)- Spark SQL擴充套件總結

文章目錄 Spark SQL使用場景 Spark SQL載入資料 1) RDD DataFrame/Dataset 2) Local Cloud(HDFS/S3) DataFrame與SQL的對比

JavaWeb學習總結(二)——Tomcat伺服器學習使用(一)

JavaWeb學習總結系列: 一、Tomcat伺服器埠的配置   Tomcat的所有配置都放在conf資料夾之中,裡面的server.xml檔案是配置的核心檔案。   如果想修改Tomcat伺服器的啟動埠,則可以在server.xml配置檔案中的Connector節

Servlet學習總結(10)監聽器

監聽器概念         Servlet監聽器是Servlet規範中定義的一種特殊類,用於監聽ServletContext、HttpSession和ServletRequest等域物件的建立與銷燬事件,以及監聽這些域物件中屬性發生修改的事件。 監聽物件: Servle

Linux bash總結(一) 基礎部分(適合初學者學習非初學者參考)

歡迎使用Markdown編輯器 你好! 這是你第一次使用 Markdown編輯器 所展示的歡迎頁。如果你想學習如何使用Markdown編輯器, 可以仔細閱讀這篇文章,瞭解一下Markdown的基本語法知識。 新的改變 我們對Markdown編輯器進行了一些功能

Java Web 學習總結(二)Servlet核心介面+Servlet3.0配置

  Servlet3.0版本對Servlet配置進行了重大變革,Servlet類不需要再麻煩的去編輯web.xml檔案了,只需要在類上面進行註釋就可以了,獲得了 Java 社群的一片讚譽之聲,以下是新增的註解支援。 @WebServlet @WebServlet 用於將一個類宣告為 Servlet,該註解

幾周以來在學習生活中的總結

今天是2018-11-24星期六,學校上課時間第12周   總結一下過去兩週在學習中的不足和收穫以及在生活中遇到的困惑 學習上   最近幾周在學習上收穫不太多,隨著這兩週課程科目和每門課程的作業不斷增加,分配在小組學習的時間相對較少,分配時間不均衡。   但是在過去幾周時間內為了

關於演算法學習總結感悟

時隔一年重讀《演算法導論》,去年讀到了二叉查詢樹就擱淺了,今年從頭撿起,希望能走的 更遠一些。算上大學時的資料結構與演算法課,今年可以算是第三波學習攻勢了。隨著學習的深入, 對演算法的學習漸漸有了些自己的看法和感悟。 一.為什麼學習演算法? 記得初學演算法時不明白為什

Linux rpm 命令引數使用詳解及強制安裝忽略依賴 與 學習rpmbuild總結

轉載連結:http://blog.sina.com.cn/s/blog_5d867af101019b7i.htmlRPMRPM是RedHat Package Manager(RedHat軟體包管理工具)類似Windows裡面的“新增/刪除程式”rpm 執行安裝包二進位制包(B