任务:1,总结servlet、filter以及listener的实现原理,使用场景以及配置方法

   2,总结session和cooiker的原理和使用方式

   3,学会request和response的使用

   4,明白ajax的原理和使用wade框架完成一个ajax的实例

   5,完成javascript编程的学习

相关Demo和案例

  1,总结servlet、filter以及listener的实现原理,使用场景以及配置方法

    

    处理请求和发送响应的过程是由一种叫做Servlet的程序来完成的,并且Servlet是为了解决实现动态页面而衍生的东西。理解这个的前提是了解一些http协议的东西,并且知道B/S模式(浏览器/服务器)。

    B/S:浏览器/服务器。 浏览器通过网址来访问服务器,比如访问百度,在浏览器中输入www.baidu.com,这个时候浏览器就会显示百度的首页,那么这个具体的过程,步骤是怎样的呢?这个就了解一下http请求和响应了

    JavaWeb部分基础学习_脚本语言

请求,响应:通过给的链接应该可以知道这两个具体的内容

    Tomcat 是Web应用服务器,是一个Servlet/JSP容器. Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户.而Servlet是一种运行在支持Java语言的服务器上的组件. Servlet最常见的用途是扩展Java Web服务器功能,提供非常安全的,可移植的,易于使用的CGI替代品。从http协议中的请求和响应可以得知,浏览器发出的请求是一个请求文本,而浏览器接收到的也应该是一个响应文本。

Filter:过滤器  

概念:对目标资源的请求和响应进行过滤截取。在请求到达servlet之前,进行逻辑判断,判断是否放行到servlet;也可以在一个响应response到达客户端之前进行过滤,判断是否允许返回客户端。

场景:

(用户授权的过滤器:判断用户是否有权限请求界面)

(日志信息的过滤器:过滤用户在网站的所有请求,记录轨迹 )

(负责解码的过滤器:规定请求的解码方式)

JavaWeb部分基础学习_数据_02

 

 

 这里在后端接受Servlet的请求和响应的时候,Filter预处理请求,对XSS攻击进行拦截。

配置web.xml文件(配置文件中主要有两个点:1是定义你的filter,2是定义filter拦截的地址)

<filter>

  <filter-name>myFilter</filter-name>

  <filter-class>java.filter.MyFilter</filter-class>

</filter>

<filter-mapping>

  <filter-name>myFilter</filter-name>

  <url-pattern>/*</url-pattern>

</filter-mapping>

listener:监听器

概念:

  JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件。

监听ServletContext对象的创建和销毁?

JavaWeb部分基础学习_脚本语言_03

<!--========BY 星 IN IntelliJ IDEA 功能是: 注册对ServletContext对象创建和销毁的监听器==========-->

<listener>

  <listener-class>java.listener.MyServletContextListener</listener-class>

</listener>

 

 

 

 HttpSession对象的创建和销毁的监听:

具体代码:实现HttpSessionListener ,重写对应方法

JavaWeb部分基础学习_客户端_04

 

 

 web.xml中的配置:

  <!--========BY 星 IN IntelliJ IDEA 功能是:注册对HttpSession对象创建和销毁的监听器 ==========-->

    <listener>

      <listener-class>java.listener.MyHttpSessionListener</listener-class>

    </listener>

  <!--========BY 星 IN IntelliJ IDEA 功能是: 配置HttpSession对象的销毁时机==========-->

    <session-config>

      <session-timeout>1</session-timeout>

    </session-config>

ServletRequest对象的创建和销毁监听:

JavaWeb部分基础学习_javascript_05

 

 web.xml配置:

    <listener>

      <listener-class>java.listener.MyServletRequestListener</listener-class>

    </listener>

2,总结session和cooiker的原理和使用方式 

Cookie概念

      在浏览某些 网站时,这些网站会把一些数据存在客户端,用于使用网站等跟踪用户,实现用户自定义功能.

是否设置过期时间:

      如果不设置 过期时间,则表示这个 Cookie生命周期为 浏览器会话期间 , 只要关闭浏览器,cookie就消失了.

      这个生命期为浏览会话期的cookie,就是会话Cookie;

存储:   

      一般保存在内存,不在硬盘;

      如果设置了过期时间, 浏览器会把cookie保存在硬盘上,关闭再打开浏览器, 这些cookie依然有效直到超过的设置过期时间;

      存储在硬盘上的Cookie可以在不同的浏览器进程间共享,比如两个IE窗口。

      而对于保存 在内存的Cookie,不同的浏览器有不同的处理方式。

原理:

     如果浏览器使用的是 cookie,那么所有的数据都保存在浏览器端,

     比如你登录以后,服务器设置了 cookie用户名(username),那么,当你再次请求服务器的时候,浏览器会将username一块发送给服务器,这些变量有一定的特殊标记。

     服务器会解释为 cookie变量。

     所以只要不关闭浏览器,那么 cookie变量便一直是有效的,所以能够保证长时间不掉线。

     如果你能够截获某个用户的 cookie变量,然后伪造一个数据包发送过去,那么服务器还是认为你是合法的。所以使用 cookie被攻击的可能性比较大。

     如果设置了的有效时间,那么它会将 cookie保存在客户端的硬盘上,下次再访问该网站的时候,浏览器先检查有没有 cookie,如果有的话,就读取该 cookie,然后发送给服务器。

     如果你在机器上面保存了某个论坛 cookie,有效期是一年,如果有人入侵你的机器,将你的 cookie拷走,然后放在他的浏览器的目录下面,那么他登录该网站的时候就是用你的的身份登录的。

     所以 cookie是可以伪造的。

     当然,伪造的时候需要主意,直接copy cookie文件到 cookie目录,浏览器是不认的,

     他有一个index.dat文件,存储了 cookie文件的建立时间,以及是否有修改,所以你必须先要有该网站的 cookie文件,并且要从保证时间上骗过浏览器,

     曾经在学校的vbb论坛上面做过试验,copy别人的 cookie登录,冒用了别人的名义发帖子,完全没有问题。

JavaWeb部分基础学习_数据_06

 

 这里是若依系统在登录时,根据网站cookie的信息记录自动填写账号和密码,如果没有就清空输入

JavaWeb部分基础学习_客户端_07

 

 前端token秘钥的选择,是否选择向后端发送token秘钥验证

对应后端的token验证:

JavaWeb部分基础学习_服务器_08

cookie 和session 的区别:

       1、cookie数据存放在客户的浏览器上,session数据放在服务器上.

       简单的说,当你登录一个网站的时候,如果web服务器端使用的是session,那么所有的数据都保存在服务器上面,

       客户端每次请求服务器的时候会发送 当前会话的session_id,服务器根据当前session_id判断相应的用户数据标志,以确定用户是否登录,或具有某种权限。

       由于数据是存储在服务器 上面,所以你不能伪造,但是如果你能够获取某个登录用户的session_id,用特殊的浏览器伪造该用户的请求也是能够成功的。

       session_id是服务 器和客户端链接时候随机分配的,一般来说是不会有重复,但如果有大量的并发请求,也不是没有重复的可能性,我曾经就遇到过一次。

       登录某个网站,开始显示的 是自己的信息,等一段时间超时了,一刷新,居然显示了别人的信息。

       Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一 SessionID提交到服务器端,来存取Session数据。这一过程,是不用开发人员干预的。所以一旦客户端禁用Cookie,那么Session也会失效。

       2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。

       3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE。

       4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。(Session对象没有对存储的数据量的限制,其中可以保存更为复杂的数据类型)

3,学会request和response的使用

  request对象是服务器对浏览器请求的封装,而response是服务器对服务器响应的封装。 

  JavaWeb部分基础学习_脚本语言_09

 

使用response对象设置http响应协议中的信息

用来生成Http响应信息,发送给用户。

响应首行

HTTP/1.1 200 OK

  • ​setStatus(int sc)​​:设置正常的响应状态码 status code
  • ​setStatus(int sc, String sm)​​:设置正常的响应状态码,状态码描述 status message,过时,因为正常状态下,状态码信息不会显示给用户,所以没有必要设置
  • ​sendError(int sc)​​:设置错误的状态码
  • ​sendError(int sc, String sm)​​:设置错误的状态码,包含错误信息

响应头

key:value

  • ​setHeader(String name, String value)​​:设置一个键值对,值为string
  • ​setDateHeader(String name, long date)​​:设置一个键值对,值为long,long常用于毫秒的表示
  • ​setIntHeader(String name, int value)​​:设置一个键值对,值为int类型
  • ​setHeader(String name, String value)​​:添加一个键值对,值为string
  • ​setDateHeader(String name, long date)​​:添加一个键值对,值为long,long常用于毫秒的表示
  • ​setIntHeader(String name, int value)​​:添加一个键值对,值为int类型
  • add 和 set 区别在于,前置直接添加(key是可以重复的),后者会修改原来的,没有才会添加。

几个常见的响应头:

  • ContentType:text/html;charset=utf-8
  • Refresh:3;url=http://path 3秒后跳转网页

html中meta标签的作用就是用于向响应头中添加信息。

响应空行

一个分隔符

响应正文

需要发送的资源

  • ​response.getWriter()​​:获取字符流
  • 父类方法​​getOutputSteam()​​:获取输出字节流

 JavaWeb部分基础学习_javascript_10

 

 这是一个图书管理后端的一个接口,用来接受前端的请求和回应请求

4,明白ajax的原理和使用wade框架完成一个ajax的实例

  

AJAX = 异步 JavaScript 和 XML。

AJAX 是一种用于创建快速动态网页的技术。

通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。

JavaWeb部分基础学习_服务器_11

 

 

每当有字符输入文本框时,此函数就会执行。

假如文本域中存在某些输入,函数就会执行:

  • 定义回传数据的服务器的 url(文件名)
  • 使用文本框的内容向 url 添加参数(q)
  • 添加一个随机的数字,以防止服务器使用某个已缓存的文件
  • 创建一个 XMLHTTP 对象,并告知此对象当某个改变被触发时执行名为 stateChanged 的函数
  • 向服务器发送一个 HTTP 请求

如果输入域为空,此函数仅仅会清空 txtHint 占位符的内容

使用wade框架:

5,完成javascript编程的学习

JavaScript 简称​​JS​​,是一种脚本编程语言,它灵活轻巧,兼顾函数式编程和面向对象编程,是 Web 前端开发的唯一选择。JavaScript 还有很多框架,比如 jQuery、AngularJS、React 等,它们这是学习 JavaScript 的重要内容。

JavaScript 最初只能运行于浏览器环境,用于 Web 前端开发,后来有“好事”的程序员将 JavaScript 从浏览器中分离出来,搞了一套独立的运行环境,所以现在的 JavaScript 也能用于网站后台开发了。

JavaWeb部分基础学习_服务器_12

 

 JavaScript 赋予了静态HTML灵魂,实现从静态到动态的转变,JavaScript 里面有这个网页实现动态的操作语句。


JavaScript脚本语言具有以下特点:


(1)脚本语言。JavaScript是一种解释型的脚本语言,C、C++等语言先编译后执行,而JavaScript是在程序的运行过程中逐行进行解释。


(2)基于对象。JavaScript是一种基于对象的脚本语言,它不仅可以创建对象,也能使用现有的对象。


(3)简单。JavaScript语言中采用的是弱类型的变量类型,对使用的数据类型未做出严格的要求,是基于Java基本语句和控制的脚本语言,其设计简单紧凑。


(4)动态性。JavaScript是一种采用事件驱动的脚本语言,它不需要经过Web服务器就可以对用户的输入做出响应。在访问一个网页时,鼠标在网页中进行鼠标点击或上下移、窗口移动等操作JavaScript都可直接对这些事件给出相应的响应。


(5)跨平台性。JavaScript脚本语言不依赖于操作系统,仅需要浏览器的支持。因此一个JavaScript脚本在编写后可以带到任意机器上使用,前提是机器上的浏览器支 持JavaScript脚本语言,JavaScript已被大多数的浏览器所支持。 [6]  不同于服务器端脚本语言,例如​​PHP​​与​​ASP​​,JavaScript主要被作为客户端脚本语言在用户的浏览器上运行,不需要服务器的支持。所以在早期程序员比较青睐于JavaScript以减少对服务器的负担,而与此同时也带来另一个问题,安全性。


而随着服务器的强壮,虽然程序员更喜欢运行于服务端的脚本以保证安全,但JavaScript仍然以其跨平台、容易上手等优势大行其道。同时,有些特殊功能(如AJAX)必须依赖JavaScript在客户端进行支持。