• Servlet介绍与配置


    Servlet的介绍与配置

    Servlet 是 Java 语言官方推出一个 web 容器,是用来构建web应用程序的框架
    Servlet 编写的代码是需要运行在web服务器上的, 不能通过main方法进行调用

    Web 服务器

    tomcat: 是一个非常轻量级的服务器、通常用来部署java的中小型web应用型,普通被企业认可
    jboss : 是一个商用的 web应用服务器,主要应用与大型java应用程序
    weblogic : 是Oracle提供的基于java的web应用服务器、支持大型的java应用程序、多用于银行、政府项目
    apache : 是一个开源的优秀的web服务器,不能直接部署java服务,主要可以做 web代理服务器来使用
    IIS : 是微软提供的一个基于 .net 的 web服务器

    安装与配置Tomcat

    Tomcat 官方下载解压后的目录结构

    apache-tomcat-9.X
        bin :  内置了tomcat的一些命令
        conf : 内置了tomcat 的配置文件
        lib: 存放tomcat 需要的第三方库依赖库
        logs : 存放tomcat 运行产生的日志(通过分析日期、可以解决项目中的问题)
        temp : 存放系统运行产生的临时文件
        webapps : 存放多个java web项目, 用来做项目部署
        work : web应用程序在运行过程中jsp转换后的java字节码文件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    修改 tomcat端口号

    tomcat 端口号默认是 8080
    配置文件是 conf/server.xml

    
    
    • 1
    • 2
    • 3

    URIEncoding="UTF-8"是解决WEB服务器在进行GET请求传入中文参数乱码的、在Tomcat8之后的版本可以不在设置

    搭建一个基于 Servlet的 web 项目

    怎么编写一个 Servlet 类

    • 引入 Servlet 相关的依赖包
    
        org.apache.tomcat
        tomcat-servlet-api
        9.0.65
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 编写一个 java 类 、继承 HttpServlet

    • 重写 HttpServlet 中的 service 方法

    • 在 类上使用 @WebServlet 设置请求路径

    Servlet 的生命周期

    • init() : 初始化Servlet , 该方法中编写的代码只会被执行一次,且在第一次使用servlet的时候,加载

    可以给 Servlet 初始化一些数据、如果想让 init 在 tomcat 启动完成后就执行, 那么需要在该Servlet添加一个配置
    @WebServlet(value = “/xxx”, loadOnStartup = 1) , loadOnStartup默认值 -1

    • service() : 提供服务的方法,每次请求 都会被 执行的代码

    • doXxx() : (doGet, doPost, doPut, doDelete) : 和请求方式相关的方法、如果是 get 请求,则会在调用service之后,自动调用 doGet

    • destroy() : 销毁, 当销毁(web服务关闭的时候)servlet对象的时候,会执行的代码,只会被执行一次

    HttpServletRequest 请求对象

    浏览器 -> 服务器 封装的 对象 就被称为 请求对象
    请求对象 通常可以用来 获取 从浏览器 携带的 信息

    • getScheme() :获取请求的协议, 例如返回 http
    • getServerName() : 获取服务的域名、例如返回 localhost
    • getServerPort() : 获取服务的端口、例如返回 8080
    • getContextPath() : 获取项目名,例如返回 /servlet
    • getRequestURI() : 获取请求地址(端口号后面的内容,问号前面的内容)
    • getRequestURL() : 获取网址(不包含请求参数)
    • getHeaderNames() : 获取所有的请求头、返回一个枚举对象
    • getHeader(name) : 根据请求头、获取请求头的值,请求头信息的键都是小写的
    • getCookies() : 获取浏览器存储的所有Cookie, 如果没有,返回 null
    • getMethod() : 获取请求的方法(大写表示),例如返回 GET, POST

    获取页面请求的参数

    • getParameter(String key) : 根据请求参数的名 获取 请求参数值(单值)

    如果 传入 key ,则 返回一个 字符串, 如果没有传 key, 则返回 null
    如果 key 传入了多个,只会获取到第一个值

    • getParameterValues(String key) : 根据请求参数的名、获取请求参数值(多值)

    • request.getParameterNames() : 获取所有的请求参数名,返回一个枚举对象 (了解)

    • request.getParameterMap() : 获取所有的请求参数,返回一个 Map 对象

    乱码解决访问

    POST 传参中文乱码解决方案

    request.setCharacterEncoding("UTF-8")
    
    • 1

    Idea 控制台输出的内容乱码解决方案

    -Dfile.encoding=UTF-8
    
    • 1

    GET 参数中文乱码解决方案

    
    
    • 1
    • 2
    • 3

    响应的数据在浏览器中乱码解决方案

    response.setCharacterEncoding("UTF-8")
    
    // 响应 网页 乱码解决方案
    response.setContentType("text/html;charset=UTF-8"); 
    
    // 响应 JSON 乱码解决访问
    response.setContentType("application/json;charset=utf-8");
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    JSP 页面乱码解决方案

    <%@page pageEncoding="UTF-8" contentType="text/html; utf-8" %>
    
    • 1

    页面跳转

    • 转发 forward
    • 重定向 redirect

    使用 request 实现 页面的 转发 跳转

    request.getReqeustDispatcher(urlpattern).forward(request, response);
    
    • 1

    整个跳转是 1 次请求
    地址栏的地址不会发生变化(从请求开始的地址 — > 响应的结束地址 地址没有发生改变)
    可以通过 request 向页面传递 数据 request.setAttribute(key ,val)
    可以在跳转的页面中,通过 request.getAttribute(key) 来获取数据
    request 只能在 自身服务器提供的 服务中 进行跳转
    转发到的请求 和 原请求的 请求方式 是一致的

    jsp页面通常不允许直接访问,转发的操作通常推荐跳转到jsp页面中

    使用 response 实现 页面的 重定向 跳转

    response.sendRedirect(requestURI|URL); 
    
    • 1

    整个跳转是 2次 请求
    地址栏的地址发生了变化(从请求开始的地址 — > 响应的结束地址 地址没有发生改变)
    不能通过 request 向页面传递数据
    可以跳转到任意的网址
    重定向的请求地址 一定是采用 GET 请求访问的

    将 JSP 页面 进行保护

    在 web开发中,通常不允许用户直接访问到 jsp 页面,1.会暴露网站的开发技术、2.经过转发可以携带数据,更方便网页的展示、3.路径更优雅
    WEB-INF 是一个非常特殊的目录、该目录下存储的所有内容不能直接访问,但可以通过转发来获取

    Servlet 三大作用域容器

    可以进行数据存储
    数据的格式是键值对格式的数据,键是字符串格式、值是任意数据类型
    可以在JSP页面中获取对应的数据
    setAttribute(key, val) : 用来存储数据
    getAttribute(key) : 获取存储的数据
    removeAttribute(key) : 移除存储的数据

    • request (HttpServletRequest)
    • session (HttpSession)
    request.getSession() ;
    
    • 1
    • application (ServletContext)
    request.getSession().getServletContext()
    
    • 1

    存储在request作用域中的数据 只能在同一个请求中才能够使用,会随请求的结束而销毁

    存储在session作用域中的数据 当 session没有过期(默认30分钟) 或者 浏览器没有关闭 的时候,可以在任何位置使用,可以跨请求传递数据
    session是基于用户(浏览器) 的、所以存储在session中的数据在不同用户间是隔离的

    存储在application作用域中数据 整个 web应用程序都可以访问和使用、会随web应用程序的关闭而销毁。

    Session 的工作原理

    Cookie : 是存储在浏览器中的一段字符串、Cookie可以用来做登录的标识 , Cookie是基于浏览器的技术
    Session : 是存储服务器中的数据的、也是用来存储登录的标识、Session是基于服务器的技术

    当用户访问session的时候、服务器会获取浏览器中的Cookie信息找到一个 Cookie的键为 jsessionid 的Cookie

    如果找不到 jsessionid 对应的Cookie , 那么 服务器 会创建一个 Session对象,并将 session对象的唯一标记ID 存储到 浏览器的Cookie中
    键是 jsessionid , 值 为 session的唯一标记ID

    如果找到了jsessionid对应的Cookie, 则 获取 对应的 Cookie value值(session的ID) , 并根据 value 值 从 SessionStore 容器中,获取管理的
    session对象, 并返回 session对象

    如果浏览器禁用了Cookie、 那么要使用session的时候,需要在地址上拼接一个 ;jsessionid=XXXXXXXXXXXXXXXXXXX

    在 JSP 中使用 脚本指令

    • <% … %> : 可以编写 java 代码,支持多行代码, 每行代码必须以 ; 结尾

    • <%= … %> : 输出结果、= 后面只能写 java 表达式 、且 不用使用 ; 结果

    on对象, 并返回 session对象

    如果浏览器禁用了Cookie、 那么要使用session的时候,需要在地址上拼接一个 ;jsessionid=XXXXXXXXXXXXXXXXXXX

    在 JSP 中使用 脚本指令

    • <% … %> : 可以编写 java 代码,支持多行代码, 每行代码必须以 ; 结尾

    • <%= … %> : 输出结果、= 后面只能写 java 表达式 、且 不用使用 ; 结果

    • <%! … %> : 用来定义 内部类 、 成员变量和方法

  • 相关阅读:
    tap栏切换(固定位置型)
    80端口被占用问题根源解决 HTTP Error 404. The requested resource is not found.
    Swin Transformer目标检测—训练自己数据集
    含文档+PPT+源码等]精品基于SSM的社区疫情防控平台[包运行成功]计算机毕设Java项目源码程序设计
    探索C语言中的联合体与枚举:数据多面手的完美组合!
    Windows安装cassandra,数小时多个bug总结记录
    SQL 查询的执行顺序
    蓝桥杯-班级活动
    Elastic Stack 8.11:引入一种新的强大查询语言 ES|QL
    二叉树详解(求二叉树的结点个数、深度、第k层的个数、遍历等)
  • 原文地址:https://blog.csdn.net/weixin_52953038/article/details/126931956