• 笔记-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

  • 相关阅读:
    2013年工作总结
    jquery的ajax向后台servlet传递json类型的多维数组
    web客户端通过ajaxfileupload方式上传文件
    servlet向ajax传递list数据类型,ajax向servlet传递array数据类型
    simplemodal — jquery弹出窗体插件
    【摘抄】活在当下
    unix网络编程 str_cli epoll 非阻塞版本
    unix网络编程str_cli使用epoll实现
    unix网络编程str_cli的epoll实现
    linux 建议锁和强制锁
  • 原文地址:https://www.cnblogs.com/train99999/p/10992188.html
Copyright © 2020-2023  润新知