欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

笔记-JavaWeb学习之旅10

程序员文章站 2024-01-13 15:10:10
Servlet server applet运行在服务器端的小程序,servlet就是一个接口,定义了Java类被浏览器访问到的规则(Java类重写这个接口,就可以被浏览器(tomcat)识别) Servlet方法: init方法:只执行一次,Servlet在第一次被访问时或者在服务器启动时被创建,就 ......

servlet

server applet运行在服务器端的小程序,servlet就是一个接口,定义了java类被浏览器访问到的规则(java类重写这个接口,就可以被浏览器(tomcat)识别)

servlet方法:

init方法:只执行一次,servlet在第一次被访问时或者在服务器启动时被创建,就会执行init方法,

service方法:可以执行多次,每一次访问服务器就执行一次

destroy方法:在服务器被关闭前,就执行一次

servletconfig getserletconfig方法:获取servletconfig对象

string getservletinfo:获取servlet的一些信息

注解配置

在servlet3.0之前需要这样web.xml来配置项目的路径

笔记-JavaWeb学习之旅10

在servlet3.0之后可以通过注解配置来选择项目路径了

笔记-JavaWeb学习之旅10

笔记-JavaWeb学习之旅10

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);
    }
}

笔记-JavaWeb学习之旅10