servlet学习

一.cs架构和bs架构

二.服务器 

bs架构中 broser浏览器不需要我们做,我们需要做的就是服务器server 

首先,什么是web?

称为万维网 ,就是网站。供外界访问的资源分为两种:静态资源(html css) 动态资源(jsp servlet) 

在java中,动态web资源开发技术统称为java web。

web服务器时什么?

就是放web项目的容器。

常见的服务器有什么?

开源:tomcat jetty resin 

收费:web ogic等

tomcat使用

目录介绍 在webapps中部署web项目,work目录下是运行web项目产生的java和class文件。

创建项目:

  • WEB-INF中放项目的核心内容。这个目录下,classes放.class文件,lib放jar文件,web.xml配置文件。
  • 放静态资源。

访问方式url:项目名/静态资源名称 

三.servlet

1.编写servlet

1.在tomcat中部署servlet,

创建项目:WEB-INF->在 classes中放编译后的class文件;在web.xml中配置这个servlet的路径映射。在lib中放servlet的jar包。

2.在idea中集成使用tomcat。现在设置中集成我们的tomcat,然后再这个项目中添加tomcat。

打包方式后面是exploded就是热部署,不是直接放在了webapps,而是在out目录下,是开发版项目。

在项目完成后,可以打包成war包,手动放在webapps下,是发布版,在运行tomcat时,tomcat会自动将其解压运行。

(在idea中或者服务器下运行java程序,不用自己系统下的classpath路径,已经有了默认的classpath路径

idea java classpath路径的位置

  1. target->classes即为classpath,任何我们需要在classpath前缀中获取的资源都必须在target->classes文件夹中找到。但是在idea项目中只有被标记为Resource Folders的文件夹下的文件才会被添加至target->classes。
    其实就是项目依赖。add as library 这个东西

  2. Tomcat下的Web应用有两个预置的classpath :

    1. WEB-INF/classes
    2. WEB-INF/lib

2.访问servlet (在服务器处理环节)

资源访问流程:(网站请求流程)

  1. 用户输入网址:用户在浏览器中输入网址。
  2. DNS解析:将网址转换为IP地址。
  3. 建立连接:与目标服务器建立TCP连接。
  4. 发送请求:浏览器发送HTTP请求到服务器。发送请求行头体。来请求对应服务器的端口号服务。
  5. 服务器处理:服务器处理请求并生成响应。去对应的端口服务下找资源。从web容器找到相应servlet,如果是jsp,Thy...等java模版引擎会解析为servlet,将报文相关内容交给servlet来处理,将响应数据通过占位符渲染到静态页面html上。
  6. 发送响应:服务器将响应数据发送回浏览器。也就是html。
  7. 浏览器渲染:浏览器解析和渲染页面。
  8. 加载资源:浏览器请求和加载其他资源(如图片、CSS、JavaScript)。
  • 服务器也会有存session.也就是web容器中有servlet和seesion,在servlet处理中,会涉及到session的内容。

DNS是什么?

域名也就是输入的网址www.baidu.com,对应一个ip,可以查找到对应的服务器。

但是客户端将所有域名和对应ip都记下来不现实,所以采用DNS服务器来实现。
其就是存放所有域名和ip的服务器。

3. http协议

查看方式:打开检查->输入url回车->在网络中看到路径名点击就可以了

请求报文:

  • 请求行(url 请求方式 http版本号)
  • 请求头(浏览器可以接收的语言等,主机号等)
  • 请求体(发送过去的数据)

这里涉及到前端Html表单发送请求,相关内容在平板笔记上,(待整理)

响应表文:

  • 状态行 (http版本,状态码)
  • 响应头 (响应时间,响应内容编码,长度等)
  • 响应正文 (响应页面就是html标签)

4.servlet核心接口和类

servlet实现:

1.实现servlet接口 需要重写五个方法

2.继承HttpServlet类

这个类已经把上述的五种方法都重写了,其中与业务逻辑处理有关的方法就是service,这个类重写的方式就是判断请求方式是http get, http post, http delete...从而调用不同的doGet,doPost...方法。

所以通过继承这个类实现servlet只需要重写doGet,doPost...就可以了。 

5.servlet应用-req resq

  • get请求:在url中传输数据 (浏览器默认)
  • post请求:在请求体中传输数据

出现乱码:

【出现乱码就是因为客户端和服务端的编码方式不同,统一后就不会出现乱码了。】

  • 客户端发送数据 request 指定接收数据的编码格式req.setCharacterEncoding
  • 服务器接收数据 response 指定服务器发送数据的编码格式resp.setCharacterEncoding
  • 客户端接收数据 指定接收数据的编码格式resp.setHeader

【注意】要在获得resp.getWriter前设置好resp,要不获得的还是老的编码格式。
               现在的servlet版本,doGet不设置默认编码就是统一的,不会乱码。但doPost没修改,还会乱码。

req:

  • 就是客户端请求,接收客户端的数据,获取数据时是按照默认编码来解读的,可以在获取前设置编码方式。
  • 一次请求可以多次转发,url不变,我们也可以自己添加请求内容。
  • 生命周期:一次请求

 resp:

  • 就是响应结果,将结果给客户端
  • 响应结果可以让请求去再次请求其他url,即重定向。
  • 没有生命周期,重定向的话两个req不同(一次请求一个req)

6.servlet生命周期

 创建 -> 初始化 -> 执行service方法 -> 销毁

创建和初始化只会执行一次,service方法会执行多次,当服务器重启或停止时会销毁。

也就是,我们在第一次请求servlet时会调用构造方法和init方法,然后执行service方法。
不是第一次,就直接执行service方法。

四.状态管理

 状态就是数据,每次发送新请求,不知道与上次请求有联系,要把这些数据存放起来。

(1) 存在客户端 cookie

1.发送请求,服务器端创建一个cookie,响应给客户端。客户端下次访问,携带cookie。
cookie 由key和value组成。

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie cookie = new Cookie("name", "puppy");
        resp.addCookie(cookie);
    }

2.可以在浏览器上查看cookie 

默认cookie的生命周期就是浏览器会话结束

那浏览器会话结束是指什么呢?

是指打开的那个浏览器a页面不关闭,再开新的浏览器页面b,cookie还是在的。

当把所有浏览器页面关闭,cookie才死。也就是只把a页面关闭,cookie还是在的。

3.我们可以对cookie进行操作

  • 可以设置path,上面图片的路径,指的就是在这个路径及以下的servlet可以共享这个cookie。
    也就是这个path下的素有请求req都会带着这个cookie请求
  • 设置生命周期
  • 修改cookie 当名字key和路径一致时,会自动覆盖老cookie,也就是修改了 。注意:值必须与老的不同,一样的话就不会覆盖啦。

(2) 存在服务器端 session

1.session由服务器端自动创建,存放在服务器端。

2.在请求中获取,首次接收请求自动创建session放在req中,以cookie的方式将sessionId传给客户端,下次请求自动拿上这个cookie,访问同一个session。

3.生命周期:session的存活时间由服务器端决定,如tomcat服务器为20min内无使用自动失效。

浏览器保持登录状态和过段时间让你重新登录原因:

web中保持登录状态的两种技术:

  1. 服务端存储的session + cookie的方案
  2. 客户端存储的jwt token的方案

对于方案一来说,

关闭会话,session不会立即死,到时间才死,但是这个cookie会死,所以打开浏览器仍要重新认证。
若把cookie持久化(如网站上记住我),那关闭浏览器后,session某段时间不死,下次登录就是登录状态,过段时间死了,会让你重新登录。


但是打开网站的cookie,发现没有,大对数采用后者来实现。

总结

cookie的容量小,容易篡改,适合存放非隐私内容。
session的容量大,较安全,适合存放隐私内容。

五.ServletContext 

对应tomcat中的web应用,在服务器启动时,会给每个web应用分配ServletContext
服务器不关闭不卸载,这个上下文一直存在
适合应用在计算多少人访问网站

六.过滤器Filter

1.过滤器执行流程

自己实现:

 2.过滤器拦截到谁,怎么配置

3.过滤器有多个,先执行谁,优先级

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值