layout: post
title: Servlet_HttpServlet_ServletContext
subtitle: 用法
date: 2018-04-13
author: ZL
header-img: img/20180413.jpg
catalog: true
tags:
- Servlet
Servlet
Servlet簡介
Servlet 運行在服務端的Java小程序,是sun公司提供一套規(guī)范(接口)私杜,用來處理客戶端請求皆怕、響應給瀏覽器的動態(tài)資源。但servlet的實質(zhì)就是java代碼值戳,通過java的API 動態(tài)的向客戶端輸出內(nèi)容
servlet規(guī)范:包含三個技術(shù)點:
- servlet技術(shù)
- filter技術(shù)---過濾器
- listener技術(shù)---監(jiān)聽器
最簡單的例子
工程目錄:主要就是一個java和一個xml文件
TestServlet.java的代碼:
package aa;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class TestServlet implements Servlet {
@Override
public void destroy() {
System.out.println("destroy");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
System.out.println("init");
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
System.out.println("service");
arg1.getWriter().write("xxxxxxxxxxxxxxxxxxxx");
}
}
web.xml的代碼:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>ServletDemo2</display-name>
//加載歡迎頁面的順序议谷,找到了一個就不會往下找了
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
//servlet的名字
<servlet-name>test</servlet-name>
//servlet類的全類名
<servlet-class>aa.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
//和所對應的servlet的名字匹配
<servlet-name>test</servlet-name>
//匹配瀏覽器輸入的url
<url-pattern>/Testservlet</url-pattern>
</servlet-mapping>
</web-app>
使用:瀏覽器輸入地址:http://localhost:8080/ServletDemo2/Testservlet
servlet的配置
在web.xml里面的就是servlet的配置
過程:
- 根據(jù)用戶輸入的url匹配url-pattern,
- 然后發(fā)現(xiàn)這個url-pattern的名字叫test堕虹,找到對應的叫test的servlet
- 然后發(fā)現(xiàn)這個servlet的全類名是aa.TestServlet卧晓,然后就可以找到對應的類。
url-pattern的配置方式:
完全匹配 訪問的資源與配置的資源完全相同才能訪問到
<url-pattern>/Testservlet</url-pattern>
目錄匹配 格式:/虛擬的目錄../* *代表任意
<url-pattern>/aaa/bbb/*</url-pattern>
-
擴展名匹配 格式:*.擴展名
<url-pattern>*.html</url-pattern>
注意:第二種與第三種不要混用 /aaa/bbb/*.html(錯誤的)
Servlet的生命周期
init(ServletConfig config)
何時執(zhí)行:servlet對象創(chuàng)建的時候執(zhí)行
ServletConfig : 代表的是該servlet對象的配置信息service(ServletRequest request,ServletResponse response)
何時執(zhí)行:每次請求都會執(zhí)行
ServletRequest :代表請求 認為ServletRequest 內(nèi)部封裝的是http請求的信息
ServletResponse :代表響應 認為要封裝的是響應的信息destroy()
何時執(zhí)行:servlet銷毀的時候執(zhí)行
默認:
servlet對象創(chuàng)建:第一次訪問該serv對象時
servlet對象銷毀:服務器關(guān)閉的時候
eg:對XXXServlet進行了10次訪問赴捞,init()逼裆,destory(),service() 一共執(zhí)行力多少次赦政?
----->1,0,10
當在servlet的配置時 加上一個配置 <load-on-startup> servlet對象在服務器啟動 時就創(chuàng)建
HttpServlet
上面是實現(xiàn)servlet的接口胜宇,但是實際中不用,而是繼承HttpServlet恢着,HttpServlet封裝的更好一些桐愉。
package aa;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyHttpServlet extends javax.servlet.http.HttpServlet {
private static final long serialVersionUID = 1L;
public MyHttpServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
配置方法并沒有改變,還是一樣的掰派。
ServletContext
簡介(類似Android中的Context)
ServletContext代表是一個web應用的環(huán)境(上下文)對象从诲,ServletContext對象 內(nèi)部封裝是該web應用的信息,ServletContext對象一個web應用只有一個
ServletContext對象的生命周期碗淌?
創(chuàng)建:該web應用被加載(服務器啟動或發(fā)布web應用(前提盏求,服務器啟動狀 態(tài)))
銷毀:web應用被卸載(服務器關(guān)閉,移除該web應用)
獲取ServletContext的對象
- ServletContext servletContext = config.getServletContext();
- ServletContext servletContext = this.getServletContext();
ServletContext的作用
-
獲得web應用全局的初始化參數(shù)
web.xml中配置初始化參數(shù)
通過context對象獲得參數(shù)
獲得web應用中任何資源的絕對路徑
String path = context.getRealPath(相對于該web應用的相對地址);ServletContext是一個域?qū)ο?br> 存儲數(shù)據(jù)的區(qū)域就是域?qū)ο?br> ServletContext域?qū)ο蟮淖饔梅秶赫麄€web應(所有的web資源都可以隨意向 servletcontext域中存取數(shù)據(jù)亿眠,數(shù)據(jù)可以共享)
域?qū)ο蟮耐ㄓ玫姆椒ǎ?br> context.setAtrribute(String name,Object obj);
context.getAttribute(String name);
context.removeAttribute(String name);
數(shù)據(jù)是所有servlet可以共享的碎罚。