JavaWeb部分基础学习
任务: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请求和响应了
请求,响应:通过给的链接应该可以知道这两个具体的内容
Tomcat 是Web应用服务器,是一个Servlet/JSP容器. Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户.而Servlet是一种运行在支持Java语言的服务器上的组件. Servlet最常见的用途是扩展Java Web服务器功能,提供非常安全的,可移植的,易于使用的CGI替代品。从http协议中的请求和响应可以得知,浏览器发出的请求是一个请求文本,而浏览器接收到的也应该是一个响应文本。
Filter:过滤器
概念:对目标资源的请求和响应进行过滤截取。在请求到达servlet之前,进行逻辑判断,判断是否放行到servlet;也可以在一个响应response到达客户端之前进行过滤,判断是否允许返回客户端。
场景:
(用户授权的过滤器:判断用户是否有权限请求界面)
(日志信息的过滤器:过滤用户在网站的所有请求,记录轨迹 )
(负责解码的过滤器:规定请求的解码方式)
这里在后端接受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对象的创建和销毁?
<!--========BY 星 IN IntelliJ IDEA 功能是: 注册对ServletContext对象创建和销毁的监听器==========-->
<listener>
<listener-class>java.listener.MyServletContextListener</listener-class>
</listener>
HttpSession对象的创建和销毁的监听:
具体代码:实现HttpSessionListener ,重写对应方法
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对象的创建和销毁监听:
web.xml配置:
<listener>
<listener-class>java.listener.MyServletRequestListener</listener-class>
</listener>
参考文档:https://blog.csdn.net/u013806366/article/details/84993212
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登录,冒用了别人的名义发帖子,完全没有问题。
这里是若依系统在登录时,根据网站cookie的信息记录自动填写账号和密码,如果没有就清空输入
前端token秘钥的选择,是否选择向后端发送token秘钥验证
对应后端的token验证:
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对象没有对存储的数据量的限制,其中可以保存更为复杂的数据类型)
参考博客:https://www.cnblogs.com/zilixiang/p/8426167.html
3,学会request和response的使用
request对象是服务器对浏览器请求的封装,而response是服务器对服务器响应的封装。
使用response对象设置http响应协议中的信息
用来生成Http响应信息,发送给用户。
响应首行
HTTP/1.1 200 OK
setStatus(int sc)
:设置正常的响应状态码 status codesetStatus(int sc, String sm)
:设置正常的响应状态码,状态码描述 status message,过时,因为正常状态下,状态码信息不会显示给用户,所以没有必要设置sendError(int sc)
:设置错误的状态码sendError(int sc, String sm)
:设置错误的状态码,包含错误信息
响应头
key:value
setHeader(String name, String value)
:设置一个键值对,值为stringsetDateHeader(String name, long date)
:设置一个键值对,值为long,long常用于毫秒的表示setIntHeader(String name, int value)
:设置一个键值对,值为int类型setHeader(String name, String value)
:添加一个键值对,值为stringsetDateHeader(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()
:获取输出字节流
这是一个图书管理后端的一个接口,用来接受前端的请求和回应请求
4,明白ajax的原理和使用wade框架完成一个ajax的实例
AJAX = 异步 JavaScript 和 XML。
AJAX 是一种用于创建快速动态网页的技术。
通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。
每当有字符输入文本框时,此函数就会执行。
假如文本域中存在某些输入,函数就会执行:
- 定义回传数据的服务器的 url(文件名)
- 使用文本框的内容向 url 添加参数(q)
- 添加一个随机的数字,以防止服务器使用某个已缓存的文件
- 创建一个 XMLHTTP 对象,并告知此对象当某个改变被触发时执行名为 stateChanged 的函数
- 向服务器发送一个 HTTP 请求
如果输入域为空,此函数仅仅会清空 txtHint 占位符的内容
使用wade框架:
5,完成javascript编程的学习
JavaScript 简称JS
,是一种脚本编程语言,它灵活轻巧,兼顾函数式编程和面向对象编程,是 Web 前端开发的唯一选择。JavaScript 还有很多框架,比如 jQuery、AngularJS、React 等,它们这是学习 JavaScript 的重要内容。
JavaScript 最初只能运行于浏览器环境,用于 Web 前端开发,后来有“好事”的程序员将 JavaScript 从浏览器中分离出来,搞了一套独立的运行环境,所以现在的 JavaScript 也能用于网站后台开发了。
JavaScript 赋予了静态HTML灵魂,实现从静态到动态的转变,JavaScript 里面有这个网页实现动态的操作语句。