最稳的pk10计划iphone 北京pk10计划手机软件 北京pk10数字的规律 超神手机版pk10软件 pk10北京赛车9码技巧 pk10四期倍投计划表 pk10极速赛车论坛 北京赛车冠军怎样选5码 北京赛车系统下载安装 pk10教程视频 北京pk10选号公式 北京赛车pk10赚钱技巧 北京赛车怎么提升概率 pk10技巧北京快三 北京pk10大小计划
VB.net 2010 視頻教程 VB.net 2010 視頻教程 python基礎視頻教程
SQL Server 2008 視頻教程 c#入門經典教程 Visual Basic從門到精通視頻教程
當前位置:
首頁 > 編程開發 > Java教程 >
  • java教程之筆記-JavaWeb學習之旅10

  • 2019-06-10 21:48 來源:未知

Servlet

server applet運行在服務器端的小程序,servlet就是一個接口,定義了Java類被瀏覽器訪問到的規則(Java類重寫這個接口,就可以被瀏覽器(tomcat)識別)

Servlet方法:

init方法:只執行一次,Servlet在第一次被訪問時或者在服務器啟動時被創建,就會執行init方法,

service方法:可以執行多次,每一次訪問服務器就執行一次

destroy方法:在服務器被關閉前,就執行一次

ServletConfig getSerletConfig方法:獲取ServletConfig對象

String getServletInfo:獲取Servlet的一些信息

注解配置

在Servlet3.0之前需要這樣web.xml來配置項目的路徑

img

在Servlet3.0之后可以通過注解配置來選擇項目路徑了

img

img

Servlet的子類

servlet是一個接口,他有兩個抽象子類GenericServlet和HttpServlet.

package com.Data.HttpServlet;

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;
//Http一共有其中請求方式
//可以使用HttpServlet的方法來判斷請求方式
//繼承HttpServlet
@WebServlet("/demo1")
public class HttpServletDemo extends HttpServlet{
    //重寫父類方法

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //如果是Get請求方式就執行此語句
        System.out.println("doGet.....");//瀏覽器直接訪問服務器的地址使用的是Get方式
    }

    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //如果是Post請求方式就執行此語句
        System.out.println("doPost");//輸出結果doPost
    }
}

使用post方式訪問服務器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <!--指定地址demo3-->
    <!--指定訪問方式post-->
    <form action="/demo1" method="post">
        <input name="username" placeholder="請輸入用戶名">
        <input type="submit" value="登錄">
    </form>
</body>
</html>

HTTP:

概念:Hyper Text Transfer Protocol 超文本傳輸協議,定義了客戶端和服務器端通信時,發送數據的格式

請求消息數據格式

1.請求行 :

格式:請求方式(GET) 請求url(/Hello.html) 請求協議/版本(HTTP1.1)

當請求協議為GET時,請求的參數在請求行中,為POST時,請求的參數在請求體

2.請求頭:就是我瀏覽器告訴服務器我有哪些信息

字符串格式:請求頭名稱:請求頭值

常見的請求頭:

Host: localhost:8080

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0

Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2

Referer: http://localhost:8080/Hello.html(我火狐瀏覽器不知道怎么會沒有顯示這個頭.....),這個頭可以告訴服務器我從哪里來

3.請求空行:就是一個空行,分隔請求頭和請求體

請求體:封裝POST請求消息的請求體參數的,username: zhangsan

Request原理:

1.request和response對象是由服務器創建的,

2.request對象是來獲取請求消息,response對象是來設置響應消息

request對象繼承體系結構:

ServletRequest(父接口)-->HttpServletRequest(子接口)--->RequestFacade(實現類)

request的功能

獲取請求行的數據
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;
//演示Request對象獲取請求行數據
@WebServlet( "/demo")
public class Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //獲取請求行的請求方式
        //request對象有tomcat服務器創建
        String method = request.getMethod();
        System.out.println(method);//GET
        //獲取請求行的虛擬目錄
        String method1 = request.getContextPath();
        System.out.println(method1);//  /day13
        //獲取請求行的URI
        String method2 = request.getRequestURI();
        System.out.println(method2);//  /day13/demo
        //獲取客戶機的IP地址
        String method3 = request.getRemoteAddr();
        System.out.println(method3);//  0:0:0:0:0:0:0:1
        //獲取請求行的請求參數
        String method4 = request.getQueryString();
        System.out.println(method4);// name=zhangsan
    }
}
獲取請求頭的數據
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;
import java.util.Enumeration;


@WebServlet("/RDemo1")
public class RuquestDemo1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //獲取所有請求頭的名稱
        Enumeration<String> headerNames = request.getHeaderNames();
        //遍歷,相當于迭代器
        //有下一個元素就為真
        while(headerNames.hasMoreElements()){
            //獲取元素
            String name = headerNames.nextElement();
            //通過key找到value
            String value = request.getHeader(name);
            System.out.println(name+"------"+value);
            
//          所有頭,獲取出來了
//            host------localhost:8080
//            connection------keep-alive
//            upgrade-insecure-requests------1
//            user-agent------Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
//            accept------text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
//accept-encoding------gzip, deflate, br
//accept-language------zh-CN,zh-HK;q=0.9,zh;q=0.8,en;q=0.7
//cookie------JSESSIONID=0329F34A83457E749B1818AFBE4C0A57; Idea-a0bb733=23efa255-9ce7-42d9-8d0b-9853348226b8; JSESSIONID=8FE68A2847DC38B4290ADBCE1BFD164F

        }
    }
}
獲取請求體數據

請求體:只有在POST請求方式,才有請求體,在請求體中封裝了POST請求的請求參數

首先創建一個html文件,

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <!--綁定服務器的地址-->
    <form action="/day13/RDemo1" method="post">
    <input type="text" name="username"><br>
    <input type="text" name="password"><br>
        <!--向服務器提交數據-->
    <input type="submit" value="注冊">
    </form>
</body>
</html>
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.BufferedReader;
import java.io.IOException;

@WebServlet("/RDemo1")
public class RuquestDemo1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //獲取請求體的請求參數
        //獲取字符流
        BufferedReader reader = request.getReader();
        String line=null;
        while((line=reader.readLine())!=null){
            //讀取一行寫一行
            System.out.println(line);// username=zhangsan&password=123
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


    }
}

其他功能:

獲取請求參數通用方式,不論是get請求還是post請求都可以使用下列方法來獲取參數值

1.String getParameter(String name):根據參數名稱獲取參數值

2.String[] getParameterValues(String name):根據參數名稱獲取參數值的數組

3.Enumeration getParameterNames();獲取所有請求的參數名稱

4.Map<String,String[]> getParameterMap():獲取所有參數的map集合(與3不同的地方是,3所獲得的鍵值對,是一個鍵只獲取一個值,4方法的話一個鍵可以對應對個值)

Map方法的 演示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <!--綁定服務器的地址-->
    <!--//不論是post請求還是get請求都一樣-->
    <form action="/day13/Demo3" method="GET">
    <input type="text" name="username"><br>
    <input type="text" name="password"><br>
    <input type="checkbox" name="hobby" value="打游戲">打游戲
    <input type="checkbox" name="hobby" value="看電影">看電影
        <!--向服務器提交數據-->
    <input type="submit" value="注冊">
    </form>
</body>
</html>
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;
import java.util.Map;
import java.util.Set;

@WebServlet("/Demo3")
//不論是GET請求還是POST請求都可以使用下面的方法獲取請求的參數
public class RequestDemo3 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Map<String,String[]> map = request.getParameterMap();
        //把所有的鍵存到一個集合中
        Set<String> strings = map.keySet();
        for(String key : strings){
            //獲取出每一個鍵
            System.out.println(key);
            //獲取出值的集合
            String[] values = map.get(key);
            //獲取出每一個值
            for(String key2 : values){
                System.out.println(key2);
            }
            System.out.println("---------------");
        }

    }

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

img

pk10赛车冠军技巧
最稳的pk10计划iphone 北京pk10计划手机软件 北京pk10数字的规律 超神手机版pk10软件 pk10北京赛车9码技巧 pk10四期倍投计划表 pk10极速赛车论坛 北京赛车冠军怎样选5码 北京赛车系统下载安装 pk10教程视频 北京pk10选号公式 北京赛车pk10赚钱技巧 北京赛车怎么提升概率 pk10技巧北京快三 北京pk10大小计划
现在学建筑赚钱吗 排三中奖规则 千里马计划官网最新版本 手机捕鱼达人 内蒙古十一选五计划 免费棋牌游戏那个好玩 新用户注册下载app送彩金 山西十一选五的走势图 福建时时彩推测