欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaWeb 入門(mén):Hello Servlet

 更新時(shí)間:2021年07月16日 16:03:52   作者:寧在春  
這篇文章主要介紹了Servlet開(kāi)發(fā)JavaWeb工程示例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

Servlet 概述

  • serlvet sun公司 開(kāi)發(fā)動(dòng)態(tài)web 的一門(mén)技術(shù)。
  • Servlet(Server Applet)是Java Servlet的簡(jiǎn)稱(chēng),稱(chēng)為小服務(wù)程序或服務(wù)連接器,用Java編寫(xiě)的服務(wù)器端程序,具有獨(dú)立于平臺(tái)和協(xié)議的特性,主要功能在于交互式地瀏覽和生成數(shù)據(jù),生成動(dòng)態(tài)Web內(nèi)容。
  • 廣義的Servlet是指任何實(shí)現(xiàn)了這個(gè)Servlet接口的類(lèi),。Servlet運(yùn)行于支持Java的應(yīng)用服務(wù)器中。從原理上講,Servlet可以響應(yīng)任何類(lèi)型的請(qǐng)求,但絕大多數(shù)情況下Servlet只用來(lái)擴(kuò)展基于HTTP協(xié)議的Web服務(wù)器。
  • sun公司在api 中提供了一個(gè)接口 如果我們想要開(kāi)發(fā)一個(gè)servlet程序 我們只需要做到兩點(diǎn)

1、寫(xiě)一個(gè)普通類(lèi)實(shí)現(xiàn)servlet 這個(gè)接口

2、把寫(xiě)好的servlet 放進(jìn)服務(wù)器。

sun公司給出了兩個(gè)默認(rèn)的實(shí)現(xiàn)類(lèi) HttpServlet 和 GenericServlet

Hello Servlet

工程結(jié)構(gòu)

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-KhBPeiJV-1620396757425)(C:\Users\ASUS\Desktop\javaweb_study\javaweb\web服務(wù)器講解.assets\image-20210507221216543.png)]

1、創(chuàng)建一個(gè)maven 項(xiàng)目 添加web框架(將web.xml 換成最新的4.0 后面有完整配置文件) 配置tomcat

2、導(dǎo)入依賴(lài)

dependencies>
    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
    </dependency>
  </dependencies>

3、編寫(xiě)一個(gè)Servlet程序 編寫(xiě)一個(gè)普通類(lèi)實(shí)現(xiàn)HttpServlet接口

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
 * @author crush
 *  idea 提示快捷鍵  alt + enter
 *  重寫(xiě)快捷鍵 是 ctrl + o
 */
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter writer = resp.getWriter();
        writer.print("hello Servlet");
        System.out.println("");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

4、編寫(xiě)Servlet 的映射

為什么需要映射?我們是不是需要通過(guò)瀏覽器去訪問(wèn),而瀏覽器需要連接web服務(wù)器,需要在web 服務(wù)器注冊(cè)我們寫(xiě)的servlet,還需要給它一個(gè)瀏覽器能夠訪問(wèn)的路徑。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.crush.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

測(cè)試:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-dO79ndZl-1620396757428)(C:\Users\ASUS\Desktop\javaweb_study\javaweb\web服務(wù)器講解.assets\image-20210507221205112.png)]

Servlet的運(yùn)行過(guò)程

Servlet程序是由Web服務(wù)器調(diào)用的,Web服務(wù)器收到客戶(hù)端的Servlet訪問(wèn)請(qǐng)求后:

  • ①Web服務(wù)器首先檢查是否已經(jīng)裝載并創(chuàng)建了該Servlet的實(shí)例對(duì)象。如果是,則直接執(zhí)行第④步,否則,執(zhí)行第②步;
  • ②裝載并創(chuàng)建該Servlet的一個(gè)實(shí)例對(duì)象;
  • ③調(diào)用Servlet實(shí)例對(duì)象的init()方法;
  • ④創(chuàng)建一個(gè)用于封裝HTTP請(qǐng)求消息的HttpServletRequest對(duì)象和一個(gè)代表HTTP響應(yīng)消息的HttpServletResponse對(duì)象,然后調(diào)用Servlet的service()方法并將請(qǐng)求和響應(yīng)對(duì)象作為參數(shù)傳遞進(jìn)去;
  • ⑤Web應(yīng)用程序被停止或重新啟動(dòng)之前,Servlet引擎將卸載Servlet,并在卸載之前調(diào)用Servlet的destroy()方法。

img

5、Mapping 問(wèn)題:

1、一個(gè)Servlet 可以指定一個(gè)映射路徑

<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.crush.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>

2、一個(gè)Servlet 可以指定多個(gè)映射路徑

<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.crush.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello2</url-pattern>
</servlet-mapping>

3、一個(gè)Servlet 可以指定通用映射路徑

<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.crush.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello.*</url-pattern>
</servlet-mapping>

4、默認(rèn)請(qǐng)求路徑

<servlet>
    <servlet-name>helloServlet</servlet-name>
    <servlet-class>com.crush.servlet.HelloServletDays</servlet-class>
</servlet>    
<servlet-mapping>
    <servlet-name>helloServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

5、可以指定一些前綴或者后綴

<servlet>
    <servlet-name>helloServlet</servlet-name>
    <servlet-class>com.crush.servlet.HelloServletDays</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>helloServlet</servlet-name>
    <url-pattern>*.crush</url-pattern>
</servlet-mapping>

6、優(yōu)先級(jí)問(wèn)題

指定固定的映射路徑優(yōu)先級(jí)最高,如果找不到就會(huì)走默認(rèn)的處理請(qǐng)求。

模擬指定error 頁(yè)面

1、寫(xiě)一個(gè)ErrorServlet 類(lèi)

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
 * @Author: crush
 * @Date: 2021-05-07 23:03
 * version 1.0
 */
public class ErrorServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter writer = resp.getWriter();
        writer.print("404");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

2、配置映射路徑

<servlet>
    <servlet-name>error</servlet-name>
    <servlet-class>com.crush.servlet.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>error</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

測(cè)試:訪問(wèn)不存在的路徑 會(huì)直接到訪問(wèn)我們自己寫(xiě)的ErrorServlet 訪問(wèn)其他的具體的路徑仍然不變

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-PUm7RU9R-1620400096023)(C:\Users\ASUS\Desktop\JavaWeb_study\JavaWeb\5Servlet概述.assets\image-20210507230742029.png)]

總結(jié)

本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • java高效讀大文件(csv,text)的幾種處理方式

    java高效讀大文件(csv,text)的幾種處理方式

    這篇文章主要給大家介紹了關(guān)于java高效讀大文件(csv,text)的幾種處理方式,Java中處理大文件時(shí),通常需要采取一些特定的策略來(lái)避免內(nèi)存溢出或性能問(wèn)題,文中通過(guò)代碼及圖片介紹的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • mybatis輸入映射和輸出映射實(shí)例詳解

    mybatis輸入映射和輸出映射實(shí)例詳解

    這篇文章主要介紹了mybatis輸入映射和輸出映射,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 基于java實(shí)現(xiàn)簡(jiǎn)單的圖片類(lèi)別識(shí)別

    基于java實(shí)現(xiàn)簡(jiǎn)單的圖片類(lèi)別識(shí)別

    這篇文章主要為大家詳細(xì)介紹了如何基于java實(shí)現(xiàn)簡(jiǎn)單的圖片類(lèi)別識(shí)別功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • springboot如何實(shí)現(xiàn)自動(dòng)裝配源碼解讀

    springboot如何實(shí)現(xiàn)自動(dòng)裝配源碼解讀

    這篇文章主要介紹了springboot如何實(shí)現(xiàn)自動(dòng)裝配源碼賞析,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 使用springboot每日推送早安問(wèn)候語(yǔ)到用戶(hù)微信的全過(guò)程

    使用springboot每日推送早安問(wèn)候語(yǔ)到用戶(hù)微信的全過(guò)程

    近期網(wǎng)上又出現(xiàn)一股給女朋友做微信公眾號(hào)推送的潮流,所以這篇文章主要給大家介紹了關(guān)于如何使用springboot每日推送早安問(wèn)候語(yǔ)到用戶(hù)微信的相關(guān)資料,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • Java實(shí)現(xiàn)合并多個(gè)升序鏈表

    Java實(shí)現(xiàn)合并多個(gè)升序鏈表

    本文主要介紹了Java實(shí)現(xiàn)合并多個(gè)升序鏈表,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • ibatis遷移到mybatis3的注意事項(xiàng)

    ibatis遷移到mybatis3的注意事項(xiàng)

    這篇文章主要介紹了ibatis遷移到mybatis3的注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下
    2017-10-10
  • MyBatis-Plus實(shí)現(xiàn)公共字段自動(dòng)填充功能詳解

    MyBatis-Plus實(shí)現(xiàn)公共字段自動(dòng)填充功能詳解

    在開(kāi)發(fā)中經(jīng)常遇到多個(gè)實(shí)體類(lèi)有共同的屬性字段,這些字段屬于公共字段,也就是很多表中都有這些字段,能不能對(duì)于這些公共字段在某個(gè)地方統(tǒng)一處理,來(lái)簡(jiǎn)化開(kāi)發(fā)呢?MyBatis-Plus就提供了這一功能,本文就來(lái)為大家詳細(xì)講講
    2022-08-08
  • Java多態(tài)性定義與用法實(shí)例詳解

    Java多態(tài)性定義與用法實(shí)例詳解

    這篇文章主要介紹了Java多態(tài)性定義與用法,較為詳細(xì)的分析了多態(tài)的概念、功能以及java定義與實(shí)現(xiàn)面向?qū)ο蠖鄳B(tài)性的相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09
  • JAVA使用commos-fileupload實(shí)現(xiàn)文件上傳與下載實(shí)例解析

    JAVA使用commos-fileupload實(shí)現(xiàn)文件上傳與下載實(shí)例解析

    這篇文章主要介紹了JAVA使用commos-fileupload實(shí)現(xiàn)文件上傳與下載的相關(guān)資料,需要的朋友可以參考下
    2016-02-02

最新評(píng)論