Java Web学习碎碎念
没有排版也没有图片,只是记录下学习Java Web之后的一些想法!javaweb可能是java开发需要学习的最基本和最简单的内容了
1、从容器开始
我们先抛开各种协议和约定,来讲讲web的本质;
我们都知道web开发是基于网络协议的,所谓的网络协议,不管是tcp、udp还是http,也不管这些协议是哪一层的,具体内容和实现;我们知道这一套协议可以直接拿来用,可以实现计算机之间通过网卡和路由器交换数据。
同时这些协议只依靠网卡和路由,并不依赖于所谓的web容器,java或者php语言;换句话说web开发跟语言没什么实际上的关系;只要我们能够实现一组遵守数据传输协议的代码,并且有自己想要传输的数据,就实现了web程序。
开发语言不是必须的,但是总会有一些语言更适合,有更多的库可以直接使用,更多好用的语法实现;
容器也不是必须的,我们可以通过网络编程提供的一些接口和方法使我们的程序具有接受请求的能力,比如我们可以在java中使用socket来监听一个网卡端口,如果有请求就进行一些操作。我们需要容器的主要原因跟需要开发语言是一样的-方便!!!使用web容器,我们不需要去考虑并发、端口这些“琐事”,直接交给容器程序就可以了,但同事就需要我们去遵循容器自己定义的一套编程体系,比如Servlet,filter,listener等这些个概念。
容器是什么?
假设我们实现了一组代码,这组代码可以会监听网口的8989端口所有的请求并进行处理和返回,我们可以称这组代码是一个容器;
从上面看容器的描述内容跟“容器”两个字不沾边,为啥还叫容器呢?其实我们可以从另外一个角度看;
加入我的这组代码运行在A电脑上,我现在使用B电脑,对于B电脑来说,有一个程序要使用显示一张图片,这张图片不在本地,而是通过一组参数传递到A的8989端口,然后接受返回的内容(即图片)显示,那么就相当于B伸手向A的8989端口中的一个黑盒子里拿了张图片,这样A的8989端口就像一个盒子,你要的东西我可以给你;
以浏览器为例,我们使用的过程肯定是输入一个网址,然后才能显示网址所对应的网页,这个网址就是参数,返回的网页就黑子里的内容;
tomcat是一个服务器,与容器的区别在于我可以使用tomcat监听多个端口,实现多个容器;
动态网页:
通过容器的概念我们很容易理解静态网页,就是直接返回一个内容而已,动态网页是不是也是这个原理?答案自然是肯定的!
动态网页不是指有动态的动画,而是指相同一个网址,携带的参数不同返回的网页不同!
比如一个列表,我们可以通过不同的过滤条件查看不同的列表和内容;
动态网页的实现可以是多种方式:
1)根据请求参数返回一个生成的静态的页面,看起来是动态的;
2)将所有数据返回,使用javascript实现过滤和显示;
一般我们所说的动态网页是第二种!!!
2、HTML和jsp
在这里HTML可以认为是html,javascript,css甚至可以包含xml的统称,我们用大写与单纯的html进行区分;
jsp单指jsp;
HTML是一组协议,这组协议是浏览器支持的,跟服务器无关!
jsp是java web的一个开发组件,是tomcat等服务器支持的,跟浏览器无关!
一般情况下学习的时候回将这些内容搞混,当成一体的!以tomcat为例:
我们可以认为HTML是tomcat处理的目标,服务器将程序猿写的,并且编译好的,符合tomcat一套流程的web应用发布到tomcat服务器之后,tomcat根据不同的请求,返回给对应HTML内容;
而jsp则是写给tomcat和编译器看的,是tomcat指定的一套标准“程序眼按照这个标准给我(tomcat)一些代码,我就可以将这些代码转换一下生成对应的HTML给浏览器啦”。产生的根本原因还是—方便!学习一套jsp协议的成本要比使用HTML编写指定内容的成本小的多!!!
3、cookie,session及数据传输
网页是动态的,免不了需要记录一下用户的信息,比如说登录,终不能没做一个操作换个页面就让用户去登录一次吧,需要记录下一些必要的信息,浏览器支持这个功能就是cookie,网页在展示过程中可以执行一些代码,对符合某一条件的页面请求中都加入一个键值对形式的值;
例如,我可以写个页面,请求该页面之后放入一个键值对(k,v),对应的请求路径是baidu.com,这样浏览器去访问baidu.com时会将这个键值对带过去(请求其他网页不会带过去),虽然baidu.com的容器并不关心你是否有这个cookie;
对于服务器来说,有时候也需要保存一次请求过程中的信息,还比如登录,我可以把账号密码存入浏览器端的cookie,这样可以实现自动登录,但是cookie毕竟是本地不安全的,这样存入账号和密码需要时刻去验证其真伪,总不能进入首页验证一次,进入个人中心验证一次,进入某个详情页在验证一次;如果这样的登录状态在服务端保留一份,每次请求之后查看服务端的状态记录里有没有登录过得信息就可以了,不需要再去登录验证了,这个在服务端存储的该访问内有效的存储方式叫session。
cookie是依赖浏览器端存储的;session是服务端存储的,session的实现依赖于cookie(由于需要在请求过程中确认该请求属于哪个session,在浏览器端生成一个值来表示session的id);
cookie和session本质上两种存储和交互数据的方案,数据经过服务器的硬盘->服务器内存->服务器端口->路由->本地端口->本地内存->本地硬盘,其中有些步骤是不存在的,有些是循环进行的,总体来说就是在如上区域传输;
传输的内容可以使int,long基本数据类型,也可以是String,Map,List这样的引用类型,又或者是自定义的MyData类型(也许需要用到bean);我们都可以通过session和cookie提供的键值对形式进行传输;因为他们本质上都是二进制的数据,可以在服务端表示就可以在客户端表示。
4、java web服务器,数据库
web应用就是一组可以接受一个端口上请求并返回数据的程序,我们可以使用自己擅长的语言去开发这么一个容器,也可以使用比较简单的方案--学习web开发;
java web开发是诸多web开发的一个,其中包含重要的组件有Servlet,Filter和Listener,jdk可以编译出这样的一个应用,能够支持这个应用运行的应用就是java web服务器,java web服务器不止一种,包括tomcat,glass fish,jboss,resin, websphere, weblogic等web服务器都支持java web。
数据库
容器的本质是用来处理数据,我们可以自己实现数据的存储和读取,但是使用数据库是一个不错的选择;
数据库也不是专门服务于java web的,java,c,c++等都支持操作数据库;
5、知识点:
1)web.xml的配置
2)servlet,filter和listener
3)jsp的相关语法、标签库
4)数据库的连接
5)编码问题 Java Web是指用Java来开发Web?
一直搞不明白,最近很火的docker是什么鬼~
页:
[1]