get里面只可以获取URL中的参数

post可以获取URL和body中的参数

request

response

设置响应数据

响应数据分为3个部分

1、响应行:HTTP/1.1 200 OK

void setStatus(int sc):设置响应状态码

2、响应头:Content-Type:text/html

void setHeader(String name,String value):设置响应头键值对

3、响应体:如图片,html信息等

PrintWriter getWriter():获取字符输出流

ServletOutputStream getOutputStream():获取字节输出流

完成重定向

特点

  1. 浏览器地址变化
  2. 可以重定向到任意位置的资源(外部内部都可)
  3. 是两次请求,不能在多个资源之间使用Request共享数据
//        //1. 设置状态码
//        response.setStatus(302);
//        //2.设置响应头
//        response.setHeader("location","/demo2");
        //重定向的简写方式
        response.sendRedirect("/demo2");

路径问题

什么时候路径需要加虚拟目录?

浏览器使用–>加虚拟目录

服务端使用–>不加虚拟目录

加虚拟目录时建议使用request.getContextPath()

加虚拟目录

《a herf=》

《form action=》

response.sendRedierct(“”)

不加虚拟目录

request.getRequestDispatcher(“”)

响应字符数据

响应字节数据

会话跟踪技术

会话:

用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。

一次会话中可以包含{% color red 多次 %}请求和响应。

6次请求,3个会话

会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在 同一次会话的多次请求间共享数据

为什么无法在浏览器和服务器不支持数据共享呢?

  1. 浏览器和服务器之间使用的是HTTP请求来进行数据传输
  2. HTTP协议是无状态的,每次浏览器向服务器请求时,服务器都会将该请求视为新的请求
  3. HTTP协议设计成无状态的目的是让每次请求之间相互独立,互不影响
  4. 请求与请求之间独立后,就无法实现多次请求之间的数据共享

会话跟踪技术的具体实现方式:

客户端:Cookie

服务端:Session

Cookie是存储在浏览器端而Session是存储在服务器端

概念

基本使用

原理分析

Session

概念

基本使用

原理分析

钝化和活化

钝化:在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘的文件中

活化:再次启动服务器后,从文件中加载数据到Session

Filter

概念

执行流程

路径说明

  • 拦截具体资源:/index.jsp—>只有访问index.jsp时才会拦截
  • 目录拦截:/user/*—>访问/user下的所有资源,都会被拦截
  • 后缀名拦截:*.jsp—>访问后缀为jsp的资源都会被拦截
  • 拦截所有:/*—>访问所有的资源都会被拦截

Listener

监听器可以在application、session和request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件

基本使用

定义类,实现接口

添加注解

package filter;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

@WebListener
public class Listener implements ServletContextListener, HttpSessionListener, HttpSessionAttributeListener {

    public Listener() {
    }

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        /* This method is called when the servlet context is initialized(when the Web application is deployed). */
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        /* This method is called when the servlet Context is undeployed or Application Server shuts down. */
    }

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        /* Session is created. */
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        /* Session is destroyed. */
    }

    @Override
    public void attributeAdded(HttpSessionBindingEvent sbe) {
        /* This method is called when an attribute is added to a session. */
    }

    @Override
    public void attributeRemoved(HttpSessionBindingEvent sbe) {
        /* This method is called when an attribute is removed from a session. */
    }

    @Override
    public void attributeReplaced(HttpSessionBindingEvent sbe) {
        /* This method is called when an attribute is replaced in a session. */
    }
}