蓝旭工作室第四周课程预习

Servlet

什么是Servlet

        Servlet是用Java编写的服务器端程序(即在Web服务器上或应用服务器上)。它是Web浏览器或者其他的HTTP客户端请求和HTTP服务器上的数据库或应用程序的中间层。

简单来说,网页发送网络请求到Servlet服务器,服务器处理请求,并经过后端操作后将数据返回前端网页。

什么是Tomcat

Tomcat是集成了Servlet和Http服务的一套框架。使用Tomcat,工程师可以快速开发一个服务器程序用于前后端通信。

Tomcat的部署

  1. 下载Tomcat:Apache Tomcat® - Welcome!
  2. 安装并创建环境变量:
    1. 新建CATALINA_HOME变量

      • 打开“系统属性”(可通过右键点击“计算机”或“此电脑”,然后选择“属性”进入)。
      • 点击“高级系统设置”。
      • 在“系统属性”窗口中点击“环境变量”按钮。
      • 在“系统变量”区域,点击“新建”按钮。
      • 变量名:CATALINA_HOME
      • 变量值:填入Tomcat的实际安装路径
    2. 更新PATH变量

      • 在“系统变量”区域找到名为Path的变量,选中后点击“编辑”按钮。
      • 在“编辑环境变量”窗口中点击“新建”按钮,然后添加 %CATALINA_HOME%\bin 到路径列表中。
  3. 配置端口

    如果需要更改默认的HTTP端口(8080)或其他端口,可以在 %CATALINA_HOME%\conf\server.xml 文件中修改 <Connector> 标签内的 port 属性值。
  4. 建立项目并引入Tomcat:详见:IDEA创建Tomcat项目
  5. 开始愉快编程。

Tomcat的使用

        编写web.xml配置文件,放置在Web应用程序的WEB-INF目录下,将Servlet映射到一个URL上:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>HelloWorldServlet</servlet-name>
        <servlet-class>com.example.HelloWorldServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloWorldServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

</web-app>
  1. 在上面的XML配置中,com.example.HelloWorldServlet 是Servlet类的全限定名,/hello 是URL映射路径。这意味着当用户访问 http://yourserver:port/yourapp/hello 时,将由HelloWorldServlet类来处理请求。
  2. 将编译好的Servlet类及其依赖(如果有的话)打包成WAR文件,部署到Tomcat的webapps目录下。

  3. 启动Tomcat服务器后,访问 http://yourserver:port/yourapp/hello,即可看到Servlet生成的响应内容。

Servlet的生命周期

Servlet与其它有生命的东西一样,都有从创建到销毁的过程,不过专业地讲,就是初始化阶段,运行时阶段和销毁阶段.

初始化阶段

一般而言,是Web容器第一次请求到这个Servlet(而不是Tomcat服务器启动)的时候这个对应的Servlet类将会被实例化并调用方法init().

注意:

  1. 由于这个Servlet类的实例化是经由Java反射调用其无参构造方法形成的,因此一定要确保这个Servlet类有一个无参的构造方法.
  2. 一个Servlet的init()在其生命周期内有且有就只会被调用一次.
运行时阶段

当处于运行时阶段,只要Servlet容器收到了客户端请求,就如上文所说,会创建ServletRequest 对象和 ServletResponse 对象并把它们作为参数传入 service() 方法中.

请求处理完毕后,就会用这个ServletResponse来响应用户.当响应信息被传回客户端后,这两个对象会被销毁掉.

销毁阶段

当Servlet容器被关闭或者这个实例被销毁的时候,容器就会调用destroy()方法,可以重写这个方法比如在里面关闭IO流,关闭数据库连接之类的以释放资源.

作者:XSteve_Paul
链接:https://juejin.cn/post/7221865079169368101

Cookie详解

Cookie是存储在客户端上的一小段数据,浏览器(即客户端)通过HTTP协议和服务器端进行Cookie交互。

Cookie通常用来存储一些不是很敏感的信息,或者进行登录控制,也可用来记住用户名、记住免密码登录、防止刷票等。每个域名下允许的Cookie是有限制的。Cookie不是越多越好,它会增加宽带,增加流量消耗,所以不要滥用Cookie;不要把Cookie当作客户端的存储器来用。一个域名的每个Cookie限制以4KB键值对的形式存储。

Cookie格式

Cookie中保存的信息都是文本信息,在客户端和服务器端交互过程中,cookie信息被附加在HTTP消息头中传递,cookie的信息由键/值对组成。下面是一个HTTP头中cookie的例子:

Set-Cookie: key = value; Path=/

Cookie中存放的信息包含cookie本身属性和用户自定义属性,一个cookie只能包含一个自定义键/值对。Cookie本身属性有”Comment” 、”Domain”、”Max-Age”、”Path”、”Secure”、”Version”。

Comment 属性是cookie的产生着对该cookie的描述;

Domain 属性定义可访问该cookie的域名,对一些大的网站,如果希望cookie可以在子网站中共享,可以使用该属性。例如设置Domain为 .bigsite.com ,则sub1.bigsite.com和sub2.bigsite.com都可以访问已保存在客户端的cookie,这时还需要将Path设置为/。

Max-Age 属性定义cookie的有效时间,用秒计数,当超过有效期后,cookie的信息不会从客户端附加在HTTP消息头中发送到服务端。

Path 属性定义网站上可以访问cookie的页面的路径,缺省状态下Path为产生cookie时的路径,此时cookie可以被该路径以及其子路径下的页面访问;可以将Path设置为/,使cookie可以被网站下所有页面访问。

Secure 属性值定义cookie的安全性,当该值为true时必须是HTTPS状态下cookie才从客户端附加在HTTP消息中发送到服务端,在HTTP时cookie是不发送的;Secure为false时则可在HTTP状态下传递cookie,Secure缺省为false。

Version 属性定义cookie的版本,由cookie的创建者定义。

Cookie的创建

Cookie可以在服务器端创建,然后cookie信息附加在HTTP消息头中传到客户端。

创建cookie时如果不指定生存有效时间,则cookie只在浏览器关闭前有效,cookie会在服务器端和客户端传输,但是不会保存在客户机的磁盘上,打开新的浏览器将不能获得原先创建的cookie信息。

Cookie信息保存在本地时会保存到当前登录用户专门目录下,保存的cookie文件名中会包含创建cookie所在页面网站的域名,当浏览器再次连接该网站时,会从本机cookie存放目录下选出该网站的有效cookie,将保存在其中的信息附加在HTTP消息头中发送到服务器端,服务器端程序就可根据上次保存在cookie的信息为访问客户提供“记忆”或个性化服务。

Cookie除了可以在服务器端创建外,也可以在客户端的浏览器中用客户端脚本(如javascript)创建。客户端创建的cookie的性质和服务器端创建的cookie一样,可以保存在本地,也可以被传送到服务器端被服务器程序读取。

Cookie 基础知识

  1. cookie 是有大小限制的,大多数浏览器支持最大为 4096 字节的 Cookie(具体会有所差异,可以使用这个好用的工具:http://browsercookielimits.squawky.net/ 进行测试);如果 cookie 字符串的长度超过最大限制,则该属性将返回空字符串。

  2. 由于 cookie 最终都是以文件形式存放在客户端计算机中,所以查看和修改 cookie 都是很方便的,这就是为什么常说 cookie 不能存放重要信息的原因。

  3. 每个 cookie 的格式都是这样的:cookieName = Vaue;名称和值都必须是合法的标示符。

  4. cookie 是存在 有效期的。在默认情况下,一个 cookie 的生命周期就是在浏览器关闭的时候结束。如果想要 cookie 能在浏览器关掉之后还可以使用,就必须要为该 cookie 设置有效期,也就是 cookie 的失效日期。

  5. alert(typeof document.cookie)结果是 string.

  6. cookie 有域和路径这个概念。域就是domain的概念,因为浏览器是个注意安全的环境,所以不同的域之间是不能互相访问 cookie 的(当然可以通过特殊设置的达到 cookie 跨域访问)。路径就是routing的概念,一个网页所创建的 cookie 只能被与这个网页在同一目录或子目录下得所有网页访问,而不能被其他目录下得网页访问(这句话有点绕,一会看个例子就好理解了)。

  7. 其实创建cookie的方式和定义变量的方式有些相似,都需要使用 cookie 名称和 cookie 值。同个网站可以创建多个 cookie ,而多个 cookie 可以存放在同一个cookie 文件中。

  8. cookie 存在两种类型:①:你浏览的当前网站本身设置的 cookie ②来自在网页上嵌入广告或图片等其他域来源的 第三方 cookie (网站可通过使用这些 cookie 跟踪你的使用信息)

  9. cookie 有两种清除方式:①:通过浏览器工具清除 cookie (有第三方的工具,浏览器自身也有这种功能) ②通过设置 cookie 的有效期来清除 cookie.注:删除 cookie 有时可能导致某些网页无法正常运行。

  10. 浏览器可以通过设置来接受和拒绝访问 cookie。出于功能和性能的原因考虑,建议尽量降低 cookie 的使用数量,并且要尽量使用小 cookie。

与cookie类似的另一个概念是会话(Session),会话一般是记录客户端和服务器端从客户端浏览器连接上服务器端到关闭浏览器期间的持久信息。会话一般保存在内存中,不保存到磁盘上。

cookie 域概念

document.cookie = “name=value;path=path;domain=domain“

domain就是设置的 cookie 域的值。例如 “www.qq.com” 与 “sports.qq.com” 公用一个关联的域名”qq.com”,我们如果想让”sports.qq.com” 下的cookie被 “www.qq.com” 访问,我们就需要用到cookie 的domain属性,并且需要把path属性设置为 “/“。例:

document.cookie = “username=Darren;path=/;domain=qq.com“

注:一定的是同域之间的访问,不能把domain的值设置成非主域的域名。

cookie 安全性

通常 cookie 信息都是使用HTTP连接传递数据,这种传递方式很容易被查看,在控制台下运行document.cookie,一目了然;所以 cookie 存储的信息容易被窃取。假如 cookie 中所传递的内容比较重要,那么就要求使用加密的数据传输。所以 cookie 的这个属性的名称是“secure”,默认的值为空。如果一个 cookie 的属性为secure,那么它与服务器之间就通过HTTPS或者其它安全协议传递数据。语法如下:

document.cookie = “username=Darren;secure”

把cookie设置为secure,只保证 cookie 与服务器之间的数据传输过程加密,而保存在本地的 cookie文件并不加密。如果想让本地cookie也加密,得自己加密数据。

注: 就算设置了secure 属性也并不代表他人不能看到你机器本地保存的 cookie 信息,所以说到底,别把重要信息放cookie就对了。

Session详解

Session即回话,指一种持续性的、双向的连接。Session与Cookie在本质上没有区别,都是针对HTTP协议的局限性而提出的一种保持客户端和服务器间保持会话连接状态的机制。Session也是一个通用的标准,但在不同的语言中实现有所不同。针对Web网站来说,Session指用户在浏览某个网站时,从进入网站到浏览器关闭这段时间内的会话。由此可知,Session实际上是一个特定的时间概念。

使用Session可以在网站的上下文不同页面间传递变量、用户身份认证、程序状态记录等。常见的形式就是配合Cookie使用,实现保存用户登录状态功能。和Cookie一样,session_start() 必须在程序最开始执行,前面不能有任何输出内容,否则会出现警告。

Session通过一个称为PHPSESSID的Cookie和服务器联系。Session是通过sessionID判断客户端用户的,即Session文件的文件名。sessionID实际上是在客户端和服务端之间通过HTTP Request 和 HTTP Response传来传去。sessionID按照一定的算法生成,必须包含在 HTTP Request 里面,保证唯一性和随机性,以确保Session的安全。如果没有设置 Session 的生成周期, sessionID存储在内存中,关闭浏览器后该ID自动注销;重新请求该页面,会重新注册一个sessionID。如果客户端没有禁用Cookie,Cookie在启动Session回话的时候扮演的是存储sessionID 和 Session 生存期的角色。Session过期后,PHP会对其进行回收。

假设客户端禁用Cookie,可以通过URL或者隐藏表单传递sessionID;

Session以文件的形式存放在本地硬盘的一个目录中,当比较多时,磁盘读取文件就会比较慢,因此把Session分目录存放。

session与cookie的区别:

1,session 在服务器端,cookie 在客户端(浏览器)

2,session 存在在服务器的一个文件里(默认),不是内存

3,session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果 浏览器禁用了 cookie ,同时 session 也会失效(当然也可以在 url 中传递)

4,session 可以放在 文件,数据库,或内存中都可以。

5,用户验证这种场合一般会用 session

维持一个会话的核心就是客户端的唯一标识,即 session id

MVC模式

  • Model (模型端)

Model封装的是数据源和所有基于对这些数据的操作。

  • View( 视图端 )

View封装的是对数据源Model的一种显示。一个模型可以由多个视图,并且可以在需要的时候动态地登记上所需的视图。而一个视图理论上也可以同不同的模型关联起来。
 

  • Controller( 控制器端 )

封装的是外界作用于模型的操作。通常,这些操作会转发到模型上,并调用模型中相应的一个或者多个方法(这个方法就是前面在介绍模型的时候说的改值方法)。一般Controller在Model和View之间起到了沟通的作用,处理用户在View上的输入,并转发给Model来更改其状态值。这样 Model和View两者之间可以做到松散耦合,甚至可以彼此不知道对方,而由Controller连接起这两个部分。

  • 44
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值