最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaWeb?Servlet技術(shù)及其應(yīng)用實(shí)踐

 更新時(shí)間:2023年05月15日 09:59:38   作者:春哥的魔法書  
這篇文章主要介紹了JavaWeb?Servlet技術(shù),Servlet指在服務(wù)器端執(zhí)行的一段Java代碼,可以接收用戶的請(qǐng)求和返回給用戶響應(yīng)結(jié)果,感興趣想要詳細(xì)了解可以參考下文

Servlet

Servlet(Server Applet)是Java Servlet的簡(jiǎn)稱。 是在服務(wù)器端執(zhí)行的 , 用于響應(yīng)客戶端請(qǐng)求的Java類。HttpServlet 是使用java語言對(duì)http通信的實(shí)現(xiàn)。

Servlet聲明

在 web.xml 中聲明Servlet的請(qǐng)求url及對(duì)應(yīng)的類路徑 , 3.0版本后可以在類上使用 @WebServlet(“/test”) 注解來聲明

servlet-class : 內(nèi)部地址路徑

url-pattern : 對(duì)外發(fā)布的名字

servlet-name : 兩者的對(duì)應(yīng)

  <servlet>
    <servlet-name>TestServlet</servlet-name>
    <servlet-class>com.yuan.servlet.TestServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>TestServlet</servlet-name>
    <url-pattern>/testServlet</url-pattern>
  </servlet-mapping>

Servlet生命周期

加載 : 在web.xml中聲明Servlet相關(guān)信息

實(shí)例化 : 由WebServer( 如 : Tomcat )根據(jù)web.xml中聲明信息進(jìn)行實(shí)例化, 實(shí)例化后才能調(diào)用方法

? 第一種方式 : 第一次被請(qǐng)求時(shí), 先實(shí)例化, 然后調(diào)用了 init() 方法進(jìn)行初始化

? 第二種方式 : 在 web.xml 文件中在<servlet></servlet>下加入 <load-on-startup>0</load-on-startup>Web服務(wù)器啟動(dòng)時(shí)就會(huì)實(shí)例化

初始化 : 在init() 方法中,進(jìn)行初始屬性設(shè)置

服務(wù) : 用戶發(fā)請(qǐng)求后, 會(huì)調(diào)用 service(request, response) 方法, 請(qǐng)求/響應(yīng)的信息由WebServer封裝成HttpServletRequest / HttpServletResponse對(duì)象

銷毀 : 當(dāng)servlet被銷毀時(shí), 調(diào)用destroy()方法, 可以在這個(gè)方法中釋放一些資源

垃圾回收 : 被JVM進(jìn)行垃圾回收時(shí), 調(diào)用 finalize() 方法

package com.yuan.servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/testServlet")
public class TestServlet extends HttpServlet {
    @Override
    public void init(ServletConfig config) throws ServletException {
        // 初始化方法
    }
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 服務(wù)方法
    }
    @Override
    public void destroy() {
        //銷毀方法
    }
}

請(qǐng)求方式

Http定義了與服務(wù)器交互的不同方法,最基本的方法有4種,分別是GET,POST,PUT,DELETE。

一個(gè)URL地址,它用于描述一個(gè)網(wǎng)絡(luò)上的資源,而HTTP中的GET,POST,PUT,DELETE就對(duì)應(yīng)著對(duì)這個(gè)資源的查,改,增,刪4個(gè)操作。

GET/POST比較

GET一般用于獲取/查詢資源信息,而POST一般用于更新資源信息

默認(rèn)方式 :

? -GET 超鏈接, location.href, form表單 默認(rèn)都是GET的

? -POST 將 form表單的 method屬性設(shè)置成 post, form通信轉(zhuǎn)成POST方式

傳值方式 :

? -GET 數(shù)據(jù)會(huì)附在URL之后, 參數(shù)顯示在地址欄。所以是明文傳值

? -POST 數(shù)據(jù)放置在HTTP包的包體中, 參數(shù)不在地址欄顯示, 登錄時(shí)要使用POST, 隱藏登錄信息

傳值大小:

? -GET 1K~8K,受瀏覽器的影響, 通常為2K

? -POST 理論上沒有大小的限制, 所以做上傳文件時(shí), 由于文件的大小原因, 只能使用POST

中文傳遞 :

? -GET 默認(rèn)使用ISO-8859-1, 現(xiàn)在的瀏覽器都有優(yōu)化

? -POST 根據(jù)頁面的中文編碼設(shè)置, 服務(wù)器接值要轉(zhuǎn)碼

字符編碼

GB2312編碼:1981年5月1日發(fā)布的簡(jiǎn)體中文漢字編碼國(guó)家標(biāo)準(zhǔn)。GB2312對(duì)漢字采用雙字節(jié)編碼,收錄7445個(gè)圖形字符,其中包括6763個(gè)漢字。

BIG5編碼:臺(tái)灣地區(qū)繁體中文標(biāo)準(zhǔn)字符集,采用雙字節(jié)編碼,共收錄13053個(gè)中文字,1984年實(shí)施。

GBK編碼:1995年12月發(fā)布的漢字編碼國(guó)家標(biāo)準(zhǔn),是對(duì)GB2312編碼的擴(kuò)充,對(duì)漢字采用雙字節(jié)編碼。

? GBK字符集共收錄21003個(gè)漢字,包含國(guó)家標(biāo)準(zhǔn)GB13000-1中的全部中日韓漢字,和BIG5編碼中的所有漢字。

Unicode編碼(UTF-8):國(guó)際標(biāo)準(zhǔn)字符集,它將世界各種語言的每個(gè)字符定義一個(gè)唯一的編碼,以滿足跨語言、跨平臺(tái)的文本信息轉(zhuǎn)換。

u4e00-u9fa5 , 0x3400-0x4DB5 (中文)

兩種轉(zhuǎn)頁

內(nèi)部轉(zhuǎn) :

request.getRequestDispatcher( "目標(biāo)頁面" ) .forward( request, response );

跳轉(zhuǎn)后瀏覽器地址欄不會(huì)變化

目標(biāo)頁面路徑可以使用相對(duì)路徑

使用這種方式跳轉(zhuǎn),傳值可以使用三種方法:url中帶parameter,session,request.setAttribute()

重定向 :

response.sendRedirect( request.getContextPath() + "目標(biāo)頁面" ); 

跳轉(zhuǎn)后瀏覽器地址欄變化。

目標(biāo)頁面要使用絕對(duì)路徑

這種方式要傳值出去的話,只能在url中帶parameter或者放在session中,無法使用request.setAttribute()來傳遞

三種容器

存儲(chǔ)容器 : 是指用于在請(qǐng)求或轉(zhuǎn)頁過程中用來存儲(chǔ)所在傳遞的參數(shù)值的對(duì)象

常用方法

// 添加屬性
.setAttribute(key, value)
// 取屬性值
.getAttribute(key)
// 移除屬性
.removeAttribute(key)

在Web項(xiàng)目中有三種容器, 因?yàn)樗鼈兊淖饔梅秶?生命周期)不同, 也叫三種作用域

其中 application 包含 多個(gè)session , session 包含多個(gè) request

所以 從 request能得到session , 而從 request, session 能得到 application

request請(qǐng)求

類型 : HttpServletRequest

生命周期 : 客戶端發(fā)起請(qǐng)求創(chuàng)建

? 遇到響應(yīng) Response 或者生成頁面結(jié)束

常用方法 :

// 接頁面?zhèn)鱽淼闹?
String value = request.getParameter(key);   //接一個(gè)值
String[] vals = request.getParameterValues(key);  //接一組值
// 得到其它容器
HttpSession session = request.getSession();
ServletContext app = request.getServletContext();
// 得到URL 信息
StringBuffer url = request.getRequestURL();
String scheme = request.getScheme();
String serverName = request.getServerName();
int serverPort = request.getServerPort();
String uri = request.getRequestURI();
String cpath = request.getContextPath();       // 得到絕對(duì)路徑
String servletUrl = request.getServletPath();  // 被請(qǐng)求servlet
String remoteAddr = request.getRemoteAddr();  // 得到客戶端IP

session請(qǐng)求

類型 : HttpSession

生命周期 : 瀏覽器與服務(wù)器建立通信開始

? 主動(dòng)關(guān)閉或長(zhǎng)時(shí)間不與服務(wù)器通信結(jié)束

常用方法 :

// 取session 的 標(biāo)識(shí) id
String sid = session.getId();
// 獲取最長(zhǎng)等待時(shí)間
int max = session.getMaxInactiveInterval();
// 設(shè)置最長(zhǎng)等待時(shí)間, 以秒為單位
session.setMaxInactiveInterval(len);
// 取所屬的上下文
ServletContext app = session.getServletContext();

在 web.xml中也可以設(shè)置最長(zhǎng)等待時(shí)間, 單位是分鐘

  <session-config>
    <session-timeout>30</session-timeout>
  </session-config>

application上下文(全局)

類型 : ServletContext

生命周期 : 項(xiàng)目啟動(dòng)創(chuàng)建

? 項(xiàng)目關(guān)閉結(jié)束

常用方法 :

// 取項(xiàng)目的真實(shí)路徑(發(fā)布路徑)
String path = app.getRealPath(path);
// 取 web.xml 中設(shè)置的參數(shù)
String pv = app.getInitParameter(paramName);

在web.xml 里信息可以被application獲取

  <context-param>
    <param-name>paramName</param-name>
    <param-value>paramValue</param-value>
  </context-param>

ServletConfig設(shè)置對(duì)象

在 Servlet的init() 初始化方法傳入?yún)?shù) ServletConfig

public void init(ServletConfig config) throws ServletException {
    // 取web.xml 文件中在<servlet></servlet>下的信息
	String icon = config.getInitParameter(configName);
	// 取所屬的上下文
	ServletContext app = config.getServletContext();
}

在web.xml 文件中在下的信息

  <servlet>
    <init-param>
      <param-name>configName</param-name>
      <param-value>configValue</param-value>
    </init-param>
    <servlet-name>TestServlet</servlet-name>
    <servlet-class>com.yuan.servlet.TestServlet</servlet-class>
  </servlet>

到此這篇關(guān)于JavaWeb Servlet技術(shù)及其應(yīng)用實(shí)踐的文章就介紹到這了,更多相關(guān)JavaWeb Servlet內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于Java跨域Json字符轉(zhuǎn)類對(duì)象的方法示例

    關(guān)于Java跨域Json字符轉(zhuǎn)類對(duì)象的方法示例

    這篇文章主要給大家介紹了關(guān)于Java跨域Json字符轉(zhuǎn)類對(duì)象的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • SpringBoot3整合pageHelper實(shí)現(xiàn)分頁功能

    SpringBoot3整合pageHelper實(shí)現(xiàn)分頁功能

    PageHelper是一個(gè)開源的Java分頁插件,它提供了方便的分頁查詢功能,適用于大多數(shù)基于Java的持久層框架(如MyBatis、Hibernate等),本文給大家介紹了springboot3整合pageHelper實(shí)現(xiàn)分頁功能的方法,需要的朋友可以參考下
    2024-08-08
  • Java?中的5個(gè)代碼性能提升技巧

    Java?中的5個(gè)代碼性能提升技巧

    這篇文章主要給大家分享了Java的5個(gè)代碼性能提升的技巧,雖然大多數(shù)情況下極致優(yōu)化代碼是沒有必要的,但是作為一名技術(shù)開發(fā)者,我們還是想追求代碼的更小、更快,更強(qiáng)。如果哪天發(fā)現(xiàn)程序的運(yùn)行速度不盡人意,就需要這樣的文章了,需要的朋友可以參考一下
    2021-12-12
  • springboot整合阿里云oss上傳的方法示例

    springboot整合阿里云oss上傳的方法示例

    這篇文章主要介紹了springboot整合阿里云oss上傳的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • SSM 實(shí)現(xiàn)登錄驗(yàn)證碼功能(附源碼)

    SSM 實(shí)現(xiàn)登錄驗(yàn)證碼功能(附源碼)

    這篇文章主要介紹了SSM 實(shí)現(xiàn)登錄驗(yàn)證碼功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-12-12
  • Java實(shí)例化類詳解

    Java實(shí)例化類詳解

    學(xué)習(xí)JAVA這門面向?qū)ο蟮恼Z言,實(shí)質(zhì)就是不斷地創(chuàng)建類,并把類實(shí)例化為對(duì)象并調(diào)用方法。對(duì)于初學(xué)JAVA的人總搞清楚對(duì)象是如何實(shí)例化的,假如類之間存在繼承關(guān)系,那就更糊涂了。下面我們通過兩個(gè)例題來說明對(duì)象的實(shí)例化過程。
    2016-03-03
  • springboot內(nèi)置tomcat之NIO處理流程一覽

    springboot內(nèi)置tomcat之NIO處理流程一覽

    這篇文章主要介紹了springboot內(nèi)置tomcat之NIO處理流程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • IntelliJ IDEA 最常用的配置圖文詳解

    IntelliJ IDEA 最常用的配置圖文詳解

    這篇文章給大家分享了IntelliJ IDEA 詳細(xì)圖解最常用的配置的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以參考學(xué)習(xí)下。
    2018-07-07
  • Java人民幣小寫轉(zhuǎn)大寫字符串的實(shí)現(xiàn)

    Java人民幣小寫轉(zhuǎn)大寫字符串的實(shí)現(xiàn)

    這篇文章主要介紹了Java人民幣小寫轉(zhuǎn)大寫字符串的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java連接數(shù)據(jù)庫oracle中文亂碼解決方案

    Java連接數(shù)據(jù)庫oracle中文亂碼解決方案

    這篇文章主要介紹了Java連接數(shù)據(jù)庫oracle中文亂碼解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05

最新評(píng)論

长汀县| 滨海县| 资中县| 东阳市| 德庆县| 花莲市| 内江市| 法库县| 广宁县| 亚东县| 三亚市| 望奎县| 麦盖提县| 达尔| 太谷县| 涞水县| 勃利县| 肇庆市| 措勤县| 平顶山市| 肥西县| 和硕县| 和田市| 舟山市| 自治县| 健康| 津市市| 鹿泉市| 乐陵市| 阳信县| 襄樊市| 铜陵市| 鹰潭市| 衢州市| 绥化市| 准格尔旗| 崇信县| 友谊县| 明光市| 增城市| 井研县|