Java Web 從入門到"改行"(2)--Servlet簡介

1.Servlet 簡介:

JavaWeb應用開發(fā)的核心技術就是JSP、Servlet與JavaBean。Servlet 作為 Java Web 應用開發(fā)的核心技術之一,JSP 以及其他很多優(yōu)秀的Web框架【Struts2】都是基于 Servlet 實現(xiàn)的。

Servlet 的幾個特點:

  • 1.Servlet(Java服務器端小程序,下面編寫的MyServlet.java就是一個典型的Servlet)是用 Java 編寫的平臺無關的服務器端小程序,運行在 Servlet 的容器(如Tomact)中,其生命周期由容器管理。
  • 2.在Web開發(fā)中經(jīng)常用到Servlet的抽象類HttpServlet,該抽象類的兩個對象HttpServletRequest、HttpServletResponse 與客戶進行交互。
  • 3.Servlet經(jīng)常用作控制器,根據(jù)不同的請求,將處理的結果轉(zhuǎn)發(fā)給其它的組建。
  • 4.自己編寫的Servlet需要在web.xml中進行配置。

1.1 Servlet的請求響應時序:

當Servlet被封裝到容器之后,首先調(diào)用 init() 方法進行初始化,初始化后,調(diào)用service() 方法處理用戶的請求,并將處理的結果封裝到HttpServletResponse中返回給客戶,當Servlet實例從容器中移除時調(diào)用destory() 。

Servlet請求響應時序圖

1.2 Servlet的抽象類HttpServlet:

HttpServlet是Servlet的抽象類,HttpServlet 通過**HttpServletRequest、HttpServletResponse **兩個對象與客戶進行交互。其中HttpServletRequest對象負責封裝存放Http請求的信息,HttpServletResponse對象負責封裝存放處理得到的響應結果。
另外,Servlet容器啟動加載Web應用時,會為每個Web容器創(chuàng)建一個ServletContext對象,用于存放整個Web應用的共享數(shù)據(jù),因此,我們可以把ServletContext對象看成Web應用的共享內(nèi)存。

1.HttpServletRequest 對象的常用方法:

  • getParameter("參數(shù)name值"): 獲取Http請求中的指定參數(shù)值。
  • setCharacter("utf-8"): 設置Http請求的編碼方式。
  • get Cookies(): 獲取Http請求的cookies值。

其它更詳細的方法自己查唄

2.HttpServletResponse 對象的常用方法:

  • getWriter(): 返回一個PrintWriter對象。
  • setContentType("text/html"): 設置Http響應的文本格式。
  • setCharacterEncoding("utf-8"): 設置Http響應頭的編碼方式。

其它更詳細的方法自己查唄

3.ServletContext對象的常用方法:

  • setAttribute(String arg0, Object arg1): 把對象和一個屬性進行綁定,將這個對象存儲在ServletContext中
  • getAttribute(String arg0): 根據(jù)給定的屬性名返回所綁定的對象。

其它更詳細的方法自己查唄

1.3 創(chuàng)建一個HttpServlet實例:

在Java Web應用開發(fā)中,創(chuàng)建一個HttpServlet一般遵循以下的步驟:

1.創(chuàng)建自己的Java類并繼承HttpServlet。
2.在Java類中重載HttpServlet的doGet、doPost方法。
3.編寫表現(xiàn)層的JSP文件,并配置form表單中的 action=" " 。
4.在WEB-INF中創(chuàng)建web.xml,并配置servlet。
5.啟動Servlet容器,并生成Http請求進行測試。
6.獲取Http請求信息,進行業(yè)務邏輯處理。
7.生成Http響應結果,以流的形式輸出到客戶端瀏覽器或磁盤文件。

在Eclipse中的總體文件結構:

具體的代碼:
1.視圖層:index.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>
    <FORM name="form1" action="login" method="POST">
        請輸入姓名:
        <INPUT name="name" type="text">
        <INPUT name="submit" value="提交" type="submit">
    </FORM>
</body>
</html>

2.典型的Servlet:MyServlet.java

package ServletTest;

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

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

public class MyServlet extends HttpServlet {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    public MyServlet(){  //構造函數(shù)
        super();
    }
    public void destroy(){//銷毀時調(diào)用
        super.destroy();
        System.out.println("destory()執(zhí)行了");
    }
    //處理Get方式提交過來的數(shù)據(jù)表單
    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException,IOException{
        doPost(request,response);//直接調(diào)用doPost方法
    }
    //處理Post方式提交的數(shù)據(jù)表單
    public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException,IOException{
        response.setContentType("text/html");    //設置Http響應的文檔類型
        response.setCharacterEncoding("UTF-8");   //設置響應采用的編碼方式
        String name = request.getParameter("name");   //獲取提交的表單中name文本框值
        name = new String(name.getBytes("ISO-8859-1"),"utf-8");//將字符編碼轉(zhuǎn)換為utf-8
        PrintWriter out = response.getWriter();  //等到一個PrintWrite對象
        ServletContext context = getServletContext();   //得到整個Web的ServletContext對象
        int count =1;
        if(context.getAttribute("count")==null)   //如果是第一位訪問者
        {
            context.setAttribute("count",new Integer(count));//設置計數(shù)器的初始值
            
        }else{
            count= Integer.parseInt(context.getAttribute("count").toString());//獲取當前的count值
            count++;
            context.setAttribute("count",new Integer(count));//更新計數(shù)器的值
        }
        out.println(name+",你好!你是第"+count+"位訪問者");
        out.flush();//強制性將當前緩存中的內(nèi)容輸出
        out.close();//關閉輸出流,清除當前所有內(nèi)容
        
    }
    //本Servlet裝配到容器后自動執(zhí)行初始化方法
    public void init() throws ServletException{
        System.out.println("init()執(zhí)行了");
    }

}


3.web.xml配置文件內(nèi)容:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>ServletTest.MyServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/login</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

</web-app>

運行之后的結果:

2.預告

Servlet這一部分就寫到這里,接下來會寫有關SSH的部分,因為下一個Java Web項目的要用到SSH,就當是跟大家一起復習一下吧!

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 從三月份找實習到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍閱讀 42,803評論 11 349
  • 本文包括: Servlet簡介關于Servlet的一些類 Servlet生命周期 ServletConfig獲得初...
    廖少少閱讀 4,109評論 1 67
  • 本文包括:1、Listener簡介2、Servlet監(jiān)聽器3、監(jiān)聽三個域?qū)ο髣?chuàng)建和銷毀的事件監(jiān)聽器4、監(jiān)聽三個域?qū)?..
    廖少少閱讀 6,651評論 6 28
  • 0 系列目錄# WEB請求處理 WEB請求處理一:瀏覽器請求發(fā)起處理 WEB請求處理二:Nginx請求反向代理 本...
    七寸知架構閱讀 14,246評論 22 189
  • 這部分主要是與Java Web和Web Service相關的面試題。 96、闡述Servlet和CGI的區(qū)別? 答...
    雜貨鋪老板閱讀 1,502評論 0 10

友情鏈接更多精彩內(nèi)容