zoukankan      html  css  js  c++  java
  • 笔记-JavaWeb学习之旅10

    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

  • 相关阅读:
    109 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 03 新增功能及实现 05 问题解析--通过一个方法完成学生和专业的双向关联
    108 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 03 新增功能及实现 04 问题解析--数组未实例化造成的空指针异常
    107 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 03 新增功能及实现 03 编写方法完成学生个数统计功能
    106 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 03 新增功能及实现 02 新增属性完成学生信息存储
    105 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 03 新增功能及实现 01 新增需求及分析
    session与cookie的区别和联系
    session和cookie的区别
    Web服务器主动推送技术
    webSocket的场景应用
    TCP、Http和Socket 优劣比较
  • 原文地址:https://www.cnblogs.com/train99999/p/10992188.html
Copyright © 2011-2022 走看看