JavaWeb-servlet、cookie和session

笔记整理来源于尚硅谷,仅供本人复习使用,无其它目的

一、Servlet技术

1.什么是Servlet

JavaWeb-servlet、cookie和session_第1张图片

2.手动实现Servlet程序

(1)、编写一个类去实现Servlet接口
(2)、实现service方法,处理请求,并响应数据

package JavaWeb;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

public class HelloServlet implements Servlet {

    //service方法是专门用来处理请求和响应的
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("3.Service方法:servlet被访问了");
        //强制转换为子类HttpServletRequest类型,因为只有子类才有.geiMethod()方法
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        //子类调用.geiMethod()方法,获取请求方式
        String method = httpServletRequest.getMethod();
        //判断
        if ("GET".equals(method)){
            doGet();
        }else if ("POST".equals(method)){
            doPost();
        }


    }

    //做GET请求的操作
    public void doGet(){
        System.out.println("请求方式为GET请求!!");
        System.out.println("请求方式为GET请求!!");
        System.out.println("请求方式为GET请求!!");
    }

    //做POST请求的操作
    public void doPost(){
        System.out.println("请求方式为POST请求!!");
        System.out.println("请求方式为POST请求!!");
        System.out.println("请求方式为POST请求!!");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {
        System.out.println("4.destroy销毁方法");
    }
}

(3)、到web.xml中去配置servlet程序的访问地址


    
    <servlet>
        
        <servlet-name>HelloServletservlet-name>
        
        <servlet-class>JavaWeb.HelloServletservlet-class>     
    servlet>
    
        
    	<servlet-mapping>
        
        <servlet-name>HelloServletservlet-name>

        
        <url-pattern>/hellourl-pattern>
    servlet-mapping>

3.URL 定位到 servlet 程序去访问

JavaWeb-servlet、cookie和session_第2张图片

4.Servlet的生命周期

(1)、执行Servlet构造器方法

public HelloServlet() {
        System.out.println("1.构造器方法");
    }

(2)、执行init初始化方法

 @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("2.init初始化方法");
        }

注意:第(1)、(2)步,是在第一次访问的时候创建Servlet程序会调用。
(3)、执行service方法

    //service方法是专门用来处理请求和响应的
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("3.Service方法:学习JavaWeb的第一天!!");

    }

注意:第(3)步,每次访问都会调用。

(4)、执行destroy销毁方法

  @Override
    public void destroy() {
        System.out.println("4.destroy销毁方法");
    }

注意:第(4)步:在 web 工程停止时候调用。
JavaWeb-servlet、cookie和session_第3张图片

5.通过继承HttpServlet实现Servlet程序

一般在实际项目开发中, 都是使用继承HttpServlet类的方式去实现Servlet程序。
(1)、编写一个类去继承HttpServlet 类
(2)、根据业务需要重写doGet或doPost 方法

public class HelloServlet2 extends HttpServlet {

    //重写init方法
    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);//必须加上这句,否则无法进入hello2页面,会报404错误,子类重写了父类的init方法,则调用时父类的init方法就会丢失,为了避免丢失则添加super
        System.out.println("重写init方法");

    }


    //get请求调用
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("HelloServlet2的doGet方法!!");

        ServletConfig servletConfig = getServletConfig();
        System.out.println("获取初始化参数userName的值:"+servletConfig.getInitParameter("userName"));
        System.out.println("获取初始化参数url的值:"+servletConfig.getInitParameter("url"));
    }
    //post请求调用
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("HelloServlet2的doPost方法!!");
    }
}

(3)、到web.xml中的配置Servlet程序的访问地址


    <servlet>
        <servlet-name>HelloServlet2servlet-name>
        <servlet-class>JavaWeb.HelloServlet2servlet-class>
    servlet>
   
    <servlet-mapping>

        <servlet-name>HelloServlet2servlet-name>
        <url-pattern>/hello2url-pattern>
    servlet-mapping>

JavaWeb-servlet、cookie和session_第4张图片

6.idea创建servlet程序

JavaWeb-servlet、cookie和session_第5张图片
JavaWeb-servlet、cookie和session_第6张图片
idea会自动在xml配置文件中创建servlet程序以及在对应的包创建类
JavaWeb-servlet、cookie和session_第7张图片
JavaWeb-servlet、cookie和session_第8张图片

7.Servlet 类,继承体系

JavaWeb-servlet、cookie和session_第9张图片

二、ServletConfig类

1.ServletConfig类介绍

JavaWeb-servlet、cookie和session_第10张图片

2.ServletConfig类的三大作用

JavaWeb-servlet、cookie和session_第11张图片

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("2.init初始化方法");

        //1.可以获取Servlet程序的别名servlet -namp的值
        System.out.println("获得HelloServlet程序的别名是:" + servletConfig.getServletName());

        //2.获取初始化参数init-param.

        System.out.println("获取初始化参数userName的值:"+servletConfig.getInitParameter("userName"));
        System.out.println("获取初始化参数url的值:"+servletConfig.getInitParameter("url"));

        //3.获取ServletContext对象
        System.out.println("获取ServletContext对象:"+servletConfig.getServletContext());


    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

在这里插入图片描述


    
    <servlet>
        
        <servlet-name>HelloServletservlet-name>
        
        <servlet-class>JavaWeb.HelloServletservlet-class>
        
        
        
        <init-param>
            
            <param-name>userNameparam-name>
            
            <param-value>rootparam-value>
        init-param>
        
        <init-param>
            <param-name>urlparam-name>
            <param-value>jdbc:mysql://localhost:3306/testparam-value>
        init-param>
        
    servlet>
    
        
    <servlet-mapping>
        
        <servlet-name>HelloServletservlet-name>

        
        <url-pattern>/hellourl-pattern>
    servlet-mapping>

三、ServletContext类

1.什么是 ServletContext ?

JavaWeb-servlet、cookie和session_第12张图片

2.什么是域对象?

(1)域对象,是可以 像Map一样,存取数据的对象,叫做域对象。
(2)这里的域对象 指的是,存取的数据的操作范围
(3)数据存取

在这里插入图片描述

3.ServletContext 常见的 4 个作用

JavaWeb-servlet、cookie和session_第13张图片

servlet程序的xml配置
JavaWeb-servlet、cookie和session_第14张图片


    <servlet>
        <servlet-name>ContextServletservlet-name>
        <servlet-class>JavaWeb.ContextServletservlet-class>
    servlet>


    <servlet-mapping>
        <servlet-name>ContextServletservlet-name>
        <url-pattern>/contexturl-pattern>
    servlet-mapping>

测试代码

public class ContextServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

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

        //1,获取web.xmL中配置的上下文参数context-param
        ServletContext context = getServletConfig().getServletContext();
        System.out.println("上下文参数context-param参数gougege的值是:"+ context.getInitParameter("gougege"));
        System.out.println("上下文参数context-param参数gou的值是:"+ context.getInitParameter("gou"));

        //2,获取当前的工程路径,格式: /工程路径
        System.out.println("当前工程路径:"+context.getContextPath());

        //3,获取工程部署后在服务器硬盘上的绝对路径
        /*
             /   斜杠被服务器解析地址为:http://ip:port/工程名/   映射到IDEA代码的web目录
*/
System.out.println("工程部署后在服务器硬盘上的绝对路径"+context.getRealPath("/")); } }

在这里插入图片描述

四、Http协议

1.什么是HTTP协议

(1)什么是协议?
协议是指双方,或多方,相互约定好,大家都需要遵守的规则,叫协议。

(2)HTTP协议,就是指,客户端和服务器之间通信时,发送的数据,需要遵守的规则,叫HTTP协议。

(3)HTTP协议中的数据又叫报文。

2.请求的HTTP协议格式

(1) 客户端给服务器发送数据叫请求。

(2) GET请求
JavaWeb-servlet、cookie和session_第15张图片
(3)POST请求
JavaWeb-servlet、cookie和session_第16张图片

(4)常用请求头的说明
JavaWeb-servlet、cookie和session_第17张图片

(5) 哪些是GET请求,哪些是POST请求
JavaWeb-servlet、cookie和session_第18张图片

3.响应的HTTP协议格式

(1) 服务器给客户端回传数据叫响应。
JavaWeb-servlet、cookie和session_第19张图片

(2) 常用的响应码说明
JavaWeb-servlet、cookie和session_第20张图片

五、HttpServletRequest类

1.HttpServletRequest类的作用

每次只要有请求进入Tomcat 服务器,Tomcat 服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中。然后传递到service方法( doGet和doPost)中给我们使用。我们可以通过HttpServletRequest对象,获取到所有请求的信息。

2.HttpServletRequest类的常用方法

JavaWeb-servlet、cookie和session_第21张图片

测试代码

public class RequestAPIServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //①getRequestURI()  获取请求的资源路径
        System.out.println("URI->:"+req.getRequestURI());

        //②getRequestURL()  获取请求的统一-资源定位符(绝对路径)
        System.out.println("URL->:"+req.getRequestURL());

        //③getRemoteHost()  获取客户端的ip地址
        System.out.println("ip->:"+req.getRemoteHost());

        //④getHeader()      获取请求头:如浏览器信息UserUser-Agent
        System.out.println("请求头User-Agent->:"+req.getHeader("User-Agent"));

        //⑤getMethod()   获取请求的方式GET或POST
        System.out.println("请求方式->:"+req.getMethod());

    }
}

测试结果
在这里插入图片描述

3.获取请求的参数值

@Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        System.out.println("--------post请求---------");
        //获取用户名
        String username = req.getParameter("username");
        System.out.println("用户名:"+username);

        //获取密码
        String password = req.getParameter("password");
        System.out.println("密码:"+password);

        //获取兴趣爱好
        String[] hobby = req.getParameterValues("hobby");
        System.out.println("兴趣爱好:"+ Arrays.asList(hobby));

    }

JavaWeb-servlet、cookie和session_第22张图片

JavaWeb-servlet、cookie和session_第23张图片

注意:解决post请求的乱码: req.setCharacterEncoding("UTF-8");

4.请求转发

JavaWeb-servlet、cookie和session_第24张图片
柜台一

public class Servlet1 extends HttpServlet {

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求的参数(办事的材料)
        System.out.println("Servlet1(柜台一)查看参数(材料):" + req.getParameter("username"));

        //给servlet1盖章,带到servlet2查看(共享)

        req.setAttribute("key", "柜台一(servlet1)的章");

        //问路去哪:柜台二怎么走(获得请求地址)
         /*
        请求转发必须要以斜杠打头,/斜杠表示地址为: http://ip:port/工程名/,映射到IDEA代码的web目录
*/
RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servlet2"); //跳转(重定向)到servlet2(柜台二) requestDispatcher.forward(req, resp); } }

柜台二


public class Servlet2 extends HttpServlet {



    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取请求的参数(办事的材料)
        System.out.println("Servlet2(柜台二)查看参数(材料):"+request.getParameter("username"));

        //查看servlet1盖的章(共享)
        System.out.println("柜台一是否有章:"+request.getAttribute("key"));


        //处理业务
        System.out.println("servlet2(柜台二)处理自己的业务!!!");
    }
}

例如访问如下ip在这里插入图片描述
JavaWeb-servlet、cookie和session_第25张图片

5.base标签

base 标签,可以设置当前页面中,所有相对路径工作时,参照哪个路径进行跳转
JavaWeb-servlet、cookie和session_第26张图片

六、HttpServletResponse类

1.HttpServletResponse类的作用

JavaWeb-servlet、cookie和session_第27张图片

2.字节流和字符流

JavaWeb-servlet、cookie和session_第28张图片
JavaWeb-servlet、cookie和session_第29张图片
(4)响应乱码

//修改了服务器的字符集
resp.setCharacterEncoding("UTF-8");
//同时设置服务器和客户端都使用UTF-8字符集,还设置了响应头
        resp.setContentType("text/html;charset=UTF-8");
//通过响应头,设置浏览器也使用UTF-8字符集
 resp.setHeader("Content-Type","text/html;charset=UTF-8");

3.请求重定向

JavaWeb-servlet、cookie和session_第30张图片

(1)第一种方式


        //设置响应状态码为302,表示重定向
        resp.setStatus(302);

        //设置响应头,设置新的的地址
        resp.setHeader("Location","http://localhost:8080/0713_Response/response2");

(2)第二种方式

   resp.sendRedirect("http://localhost:8080/0713_Response/response2");

访问网址:http://localhost:8080/0713_Response/response1
会跳转到 : http://localhost:8080/0713_Response/response2

七、Cookie

1.什么是Cookie?

(1).Cookie是服务器通知喜户端保存键值对的一种技术.
(2).客户端有了Cooke后,每次请求都发送给服务器。
(3).每个Cookie的大小不能超过4kb
(4).Cookie是服务器中Servlet程序创建并通过response返回给客户端浏览的的键值对信息。

2.Cookie的创建

(1) 创建Cookie对象

Cookie cookie = new Cookie("key", "value");

(2) 通知客户端保存Cookie

response.addCookie(cookie);

第一次访问没有cookie
JavaWeb-servlet、cookie和session_第31张图片
下一次访问有cookie
JavaWeb-servlet、cookie和session_第32张图片

3.Cookie值的修改

(1)第一种方式
JavaWeb-servlet、cookie和session_第33张图片

(2)第二种方式
JavaWeb-servlet、cookie和session_第34张图片

注意:对于Version 0 cookie,值不应包含空格、方括号、圆括号、等号、逗号、双引景、斜杠、问号、at符号、冒号和分号。空值在所有浏览器上的行为不一定相同。

4.查找指定的cookie

JavaWeb-servlet、cookie和session_第35张图片

5.Cookie生命控制

JavaWeb-servlet、cookie和session_第36张图片

6.Cookie有效路径Path的设置

(1)Cookie的path属性可以有效的过滤哪些Cookie可以发送给服务器,哪些不发
(2)path属性是通过请求的地址来进行有效的过滤。

eg:
CookieA 的 path=/工程路径
CookieB 的 path=/工程路径/abc

请求地址如下:
http://ip:port/工程路径/a.html
CookieA发送
CookieB不发送

http://ip:port/工程路径/abc/a.html
CookieA发送
CookieB发送

JavaWeb-servlet、cookie和session_第37张图片

7.免用户名登陆

JavaWeb-servlet、cookie和session_第38张图片
JavaWeb-servlet、cookie和session_第39张图片JavaWeb-servlet、cookie和session_第40张图片

JavaWeb-servlet、cookie和session_第41张图片

八、Session会话

1.什么是Session?

(1)Session就是一个接口HttpSession。
(2)在web中Session就一会话,维护一个客户端和服务器之间关联的一种技术。
(3)每个客户端都有自己的Session会话,用来保存用户登陆之后的信息。

2.Session和Cookie有什么区别?

Cookie是保存在客户端的,Session是保存在服务器端的

3.如何创建Session和获取(id号,是否为新)

(1)Session的创建与获取

Session的获取和创建的API是一样的

request.getSession()

第一次调用是创建Session会话,之后调用都是获取创建好的Session会话对象。

isNew():判断到底是不是刚创建出来的(新的)

true表示刚创建
false表示获取之前创建

每个会话都有一个身份证号,ID值(唯一),可以通过getId()获取Session的id值
JavaWeb-servlet、cookie和session_第42张图片

JavaWeb-servlet、cookie和session_第43张图片

4.获取session域中数据内容

//设置域数据
request.getSession().setAttribute("key1", "value1");
//获取域数据
request.getSession().setAttribute("key1", "value1");

在这里插入图片描述

5.Session生命周期控制

(1)设置Session的超时时间(以秒为单位),超过指定的时长,Session就会被销毁。
public void setMaxlnactielnterval(int interal)

值为,正数的时候,设定Session的超时时长。
负数表示永不超时( 极少使用)

(2)获取Session的超时时间
public int getMaxInactivelnteral()
(3)当前Session默认的超时时长是多少!

public void invalidate()

Session默认的超时时间长为30分钟。
因为在Tomcat服务器的配置文件web.xml中默认有以下的配置,它就表示配置了当前Tomcat服务器下所有的Session超时配置默认时长为: 30 分钟。

<session-config>
<session-timeout> 30session-timeout>
session-config>

(4)web.xml配置文件中修改web工程所有seession的默认超时时长
在这里插入图片描述
(5)session的超时指的是,客户端两次请求的最大间隔时长。
JavaWeb-servlet、cookie和session_第44张图片
JavaWeb-servlet、cookie和session_第45张图片
(6)Session马上销毁
JavaWeb-servlet、cookie和session_第46张图片

6.浏览器和Session之间关联的技术内幕

JavaWeb-servlet、cookie和session_第47张图片
总结Session技术,底层其实是基于Cookie技术来实现的。客户端在没有Cookie的情况下访问服务器,服务器创建session,并将session存储进内存,同时将sessionId信息通过cookie发送给浏览器,浏览器收到cookies后,当携带当前cookie信息再次访问服务器时,服务器就会从内存中取出对应的session数据。

你可能感兴趣的:(servlet,http,redirect,session,cookie)