Servlet汇总

因为看公司代码,有个cookie+jwt.Token登录验证接口,于是回顾下servlet、cookie、session、前后端分离restful、jwt.token相关内容。虽然现在流行的是网关封装各个接口,但是基础还是比较重要,需要重新复习。

Servlet--基础理论、实战代码锻炼:https://how2j.cn/k/servlet/servlet-eclipse/558.html

Servlet--拓展理论、实例参考链接:https://github.com/ZhongFuCheng3y/3y/blob/master/README.md#dollarservlettomcat


背景.Servlet相关对象介绍​

简介Servlet

​ 首先Tomcat是servlet容器,用以 接受和返回 服务端和客户端的请求(在此之前,没有tomcat,就使用socket进行监听处理)。

​ 其次,在上述交互过程中,采用Http协议处理。HTTP协议是客户端和服务器交互的一种通迅的格式

​ 最后,Servlet的生命周期即伴随内置tomcat的调用而产生,伴随tomcat的关闭而销毁。下面列出Servlet相关对象。

  • ServletConfig

​ 通过此配置获取web.xml中参数

  • ServletContext

    ​ tomcat启动时获取整个应用的配置文件。

  • Request、Response

    ​ 分别对应http请求头和响应头

  • Cookie、Session

    Cookie:存储与客户端,存储用户身份。Session:存储与服务端,判断用户身份。

1.Servlet第一篇(tomcat、http协议)

目前都是httpservlet实现servlet的方法,重写doget和dopost方法。

1.tomcat

​ tomcat底层是socket程序,也是jsp、servlet容器。

​ 介绍tomcat中虚拟目录和虚拟主机

​ 虚拟目录:文件不一定都放在webapps下,所以项目启动后要访问其他磁盘下的文件就需要配置虚拟目录

​ 虚拟主机:一个tomcat中配置多个域名,这样就能通过多个域名访问到同一个tomcat中.

2.Http协议

​ Http协议:超文本传输协议,在客户端client和服务端server中交互

​ Http1.0:client和server属于短暂连接,获取资源后就断开

​ Http1.1:client、server保持连接,并且可以获得多个web资源

2.Servlet第二篇(request,response)

1.request
#request参数介绍
request.getRequestURL(): 浏览器发出请求时的完整URL,包括协议 主机名 端口(如果有)"
request.getRequestURI(): 浏览器发出请求的资源名部分,去掉了协议和主机名"
request.getQueryString(): 请求行中的参数部分,只能显示以get方式发出的参数,post方式的看不到
request.getRemoteAddr(): 浏览器所处于的客户机的IP地址
request.getRemoteHost(): 浏览器所处于的客户机的主机名
request.getRemotePort(): 浏览器所处于的客户机使用的网络端口
request.getLocalAddr(): 服务器的IP地址
request.getLocalName(): 服务器的主机名
request.getMethod(): 得到客户机请求方式一般是GET或者POST #浏览器中header信息
host: 主机地址
user-agent: 浏览器基本资料
accept: 表示浏览器接受的数据类型
accept-language: 表示浏览器接受的语言
accept-encoding: 表示浏览器接受的压缩方式,是压缩方式,并非编码
connection: 是否保持连接
cache-control: 缓存时限
2.response

防盗链:某个珍贵资源B,需要通过链接A进来才能访问,所以对请求B的接口中需要加入防盗链的功能

        //防盗链
String referer = request.getHeader("Referer");
if (referer == null || !referer.contains("localhost:9090/huyuqiao")){
response.sendRedirect("huyuqiao");
return "盗取链接";
}
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("正版链接");

3.Servlet第三篇(cookie,session)*

1.Cookie

​ Cookie:在浏览器用以保存用户身份/浏览记录。结合其他技术(session,token,sso等)用以实现用户登录身份验证功能。

        //组装Cookie
response.setContentType("text/html;charset=UTF-8");
PrintWriter printWriter = response.getWriter();
String name = "胡宇乔";
Cookie cookie = new Cookie("country", URLEncoder.encode(name, "UTF-8"));
cookie.setMaxAge(2000); response.addCookie(cookie);
printWriter.write("服务器颁布的cookie,保存了中文数据"); //解码cookie
Cookie[] cookies = request.getCookies();
Arrays.stream(cookies).forEach(c ->{
String cookieName = c.getName();
try {
String value = URLDecoder.decode(c.getValue(), "UTF-8");
printWriter.write(name + "-----" + value);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} });
2.Session

​ Session:保存在浏览器(默认30分钟,关闭浏览器即消失),在登录注册中保存用户信息,然后前端可以通过el表达式提取出用户信息。

#session获取、得到、设置、销毁
HttpSession session = request.getSession
httpSession.getAttribute("name")
httpSession.setAttribute("name", "huyuqiao")
session.removeAttribute("name")

Servlet--核心内容汇总的更多相关文章

  1. Servlet核心内容

    Servlet重要的四个生命周期方法 构造方法: 创建servlet对象的时候调用.默认情况下,第一次访问servlet的时候创建servlet对象只调用1次.证明servlet对象在tomcat是单 ...

  2. struts2框架的核心内容

     Struts1和Struts2的区别和对比: Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口,而struts2的Ac ...

  3. JavaEE Servlet 核心方法及生命周期

    做JavaWeb开发,免不了要和Servlet打交道.Servlet是Sun(Oracle)官方定义的一个Web开发规范,所有Servlet开发都必须遵守.自己以前也没有从头做过Web开发,所以这方面 ...

  4. Java Web 学习与总结(二)Servlet核心接口+Servlet3.0配置

    Servlet3.0版本对Servlet配置进行了重大变革,Servlet类不需要再麻烦的去编辑web.xml文件了,只需要在类上面进行注释就可以了,获得了 Java 社区的一片赞誉之声,以下是新增的 ...

  5. web手工项目04-测试报告的核心内容-HTTP请求和响应-fiddler工具进行抓包

    回顾 登录功能测试(需求分析(输入分析,处理分析,输出分析),数据构造,编写用例) 测试点设计思路--扩展(相关业务,特殊角度-分支,异常,逆向) 流程图元素与画法(开始/结束,路径,数据,判定,步骤 ...

  6. ES6/ES2015核心内容

    ECMAScript定义了: JS语言语法 – 语法解析规则.关键字.语句.声明.运算符等. 类型 – 布尔型.数字.字符串.对象等. 原型和继承 内建对象和函数的标准库 – JSON.Math.数组 ...

  7. 30分钟掌握ES6/ES2015核心内容

    30分钟掌握ES6/ES2015核心内容   ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript ...

  8. 30分钟掌握ES6/ES2015核心内容(下)

    在 30分钟掌握ES6/ES2015核心内容(上)我们讲解了es6最常用的一些语法:let, const, class, extends, super, arrow functions, templa ...

  9. Python编程核心内容之一——Function(函数)

    Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ 截至上篇随笔<Python数据结构之四--set(集合)>,Python基础知识也介绍好了.接下来准备干 ...

  10. Android开发环境内容汇总

     Android开发环境将分为SDK相关内容.Eclipse ADT相关内容.模拟器AVD相关内容.调试器DDMS相关内容.日志LogCat相关内容.连接驱动ADB相关内容.内存泄露检测工具MAT相关 ...

随机推荐

  1. 将项目连接到远程仓库git

    方式一: git clone "git中的项目地址",此时会生成一个新的项目2.该步骤用于生成一个本地仓库 将需要提交的所有文件除了node_module.git以及输出文件dis ...

  2. C# 泛型Generic

    泛型(Generic),是将不确定的类型预先定义下来的一种C#高级语法,我们在使用一个类,接口或者方法前,不知道用户将来传什么类型,或者我们写的类,接口或方法相同的代码可以服务不同的类型,就可以定义为 ...

  3. Asp.NetCore Web开发之创建项目

    ​这一节,开始讲一下如何创建一个Asp.netCore Web项目,有两种常用的方式,一种是通过.NetCore SDK使用命令创建,另一种如果你使用的VisualStudio,可以直接根据引导创建. ...

  4. net5学习笔记---依赖注入

    小王的故事 小王去上班 ​ 小王是个程序员,每个工作日他都要去上班,诸多交通工具他最喜欢的交通工具是骑电车.在骑行的过程中放空自己使他很快. ​ 突然有一天天气预报说近期有很大的雨,小王再想骑电车去上 ...

  5. (转)如何优雅的使用rabbit mq

    RabbitMQ无疑是目前最流行的消息队列之一,对各种语言环境的支持也很丰富,作为一个.NET developer有必要学习和了解这一工具.消息队列的使用场景大概有3种: 1.系统集成,分布式系统的设 ...

  6. C++知识概要

    static的用法和作用 在全局变量前加上关键字 static,全局变量就定义成一个全局静态变量.存储在静态存储区,在整个程序运行期间一直存在.同时全局静态变量在声明他的文件之外是不可见的 在局部变量 ...

  7. [并发编程 - 多线程:信号量、死锁与递归锁、时间Event、定时器Timer、线程队列、GIL锁]

    [并发编程 - 多线程:信号量.死锁与递归锁.时间Event.定时器Timer.线程队列.GIL锁] 信号量 信号量Semaphore:管理一个内置的计数器 每当调用acquire()时内置计数器-1 ...

  8. java集合-哈希表HashTable

    一.简介 HashTable也是一种key-value结构,key-value不允许null,并且这个类的几乎全部的方法都加上了synchronized锁,来保证并发安全,由于加了锁所以性能方面会比较 ...

  9. centOS 7 安装 CUPS 打印服务器,安装映美 FP-730K打印机共享

    centOS 7 安装 CUPS 打印服务器,安装映美 FP-730K打印机共享 2017-09-13 16:27:02 mostone 阅读数 3698   版权声明:本文为博主原创文章,遵循CC ...

  10. JDK版本升级

    背景:本来安装了一个1.6版本的JDK,因为版本过低需要升级成1.8 安装过程很简单一路next,主要是遇到几个问题需要备注一下解决方法. Error opening registry key'sof ...