1.在浏览器中地址栏中输入地址,浏览器先去查找hosts文件,将主机名翻译成ip地址,如果找不到则去dns服务器将主机名翻译成ip地址
2浏览器根据请求的ip地址和端口号,找到访问的服务器,组织http请求发送给服务器
3.服务器接收到信息后,先根据host请求头判断访问的是哪台虚拟机
4.服务器根据http请求头的url判断要访问的web应用和资源
5服务器根据web应用的web.xml配置,找到对应的servlet处理信息
1 servlet在第一次被访问时创建对象,对象创建后会立即执行init方法进行初始化,
2 servlet对象创建后会一直存在,为后面对这个servlet的调用提共服务
3 servlet在服务器关闭或者web应用从容器中移除时,随着web应用的销毁,servlet的对象销毁,在销毁时执行destroy方法
http协议就是一个基于tcp/ip的一种应用层协议。通俗来讲就是一个基于应用层的通信规范,两个应用层要进行通信,那么他们之间就要遵循一个规范,而这个规范就是http协议。它规定了客户端与服务器之间的通信方式
一次请求,一次响应
客户端发送一个请求给服务器,服务器在接受到请求后,会生成一个响应返回给客户端
1 http协议是一种无状态协议,服务器端在处理完客户端的请求后,不会保存任何客户端的任何信息
2.客户端与服务端之间的一次交互,都要经过一次请求和响应
3服务器端无法识别发出客户端请求的方法
4 http请求分为一个请求行,若干请求头,一个空行,实体内容
浏览器用什么码表来打开表单页面,就用什么编码来发送数据,而tomcat服务器默认是使用iso8859-1来接码的,iso8859码表没有中文
所以我们看到的都是??
解决方法:虽然字符乱码,但是它底层的字节是对的,我们获取乱码字符的字节信息,然后指定utf-8来编码,就可以得到正确的字符
Request生命周期是针对一个客户端的一次请求,当请求结束后,request对象也被释放,一次请求开始创建,请求结束后销毁
1通过response.setheader方法设置服务器发送数据时的码表,通过response.setCharacterEnCoding方法设置浏览器解析数据时的码表。
两个码表相同就不会产生乱码
2通过setContentType方法可以同时做上面的两件事情
1.当程序调用resquest.getSession方法,session对象创建
2.当session在超过web.xml中的超时时间没有被使用,session自动销毁
3当session执行invalidate方法时,session立即销毁
4当程序异常关闭或web应用从容器中移除时,session销毁,当正常关闭时,session钝化,当下次启动时,没有超时的session重新活化
当服务器第一次调用resquest.getSession时,创建session对象,此对象拥有着一个独一无二的id值,这个id值以cookie的形式发送给浏览器,浏览器再下次访问时会携带着这个cookie,服务器根据浏览器携带的cookie找到对应的session空间
cookie保存浏览器,session保存在服务器中
cookie不是很安全,别人可以分析本地的cookie进行cookie欺骗,从安全性看,使用session
session会在服务器中保存一段时间,当访问增多时,会占用服务器的性能,从性能看,用cookie
SQL注入攻击指执行的sql语句是拼接的,当用户提交的参数中有特殊的sql符号或者sql关键字,就可能会执行不正确的操作
防止sql注入的方法:1在用户输入参数后进行校验,可以使用正则表达式
2.在编译时,用preparedstatement对象替代statement对象,因为preparestatement对象在编译时先将sql语句的骨架发
送给服务器,之后sql语句的骨架不会改变
Filter是服务器中的过滤器
1.Filter对象被创建时,servlet调用init方法对Filter对象进行初始化
2.destroy为销毁方法,在Filter对象被销毁之前,可以通过该方法手动销毁
3 doFilter为过滤器中的核心过滤方法,当浏览器访问服务器时,过滤器对响应和请求进行拦截,当拦截到资源时,就调用该方法进行过滤处理,所以我们只要在这个方法中编写过滤的逻辑代码就行
1当服务器启动时,web应用加载时,会创建所有的过滤器对象,并调用init方法进行初始化
2Filter对象创建后会一直存在于内存中,为后面的过滤提供服务。当拦截到资源时,就调用dofilter方法进行过滤处理
3当服务器关闭或者web应用从容器中移除时,随着web应用的销毁,Filter对象也销毁,也可以通过手动的调用destroy方法进行销毁
数据库连接池就是为数据库的连接建立一个缓冲池,
工作原理:预先在连接池中存放一定数量的连接,当需要建立数据库的连接时,直接从缓冲池中获取,使用完再放回到缓冲池中。
作用:1缓冲池可以有效地防止系统与数据库建立无尽的连接,
2可以通过对数据库连接池中的监控,能有效的掌握数据库的连接数量,使用情况,为系统的开发,测试,性能调整提供依据。
通常情况下servlet只会创建一个实例对象,对象一直存在于内存中,为后续的请求提供服务,因为servlet是单例的,所以在多次请求时会出现线程安全问题
如果说str=null,则字符串对象str根本没有创建。无法引用object方法,
str="" str的字符串对象已经创建,只不过他的长度为0,
Servlet的多线程同步问题就是指servlet是单例的,当多个用户同时访问一个servlet时,会访问servlet中的成员变量,若对成员变量进行写入操作,则会造成数据不一致。
解决方法:1将要进行写入的变量定义成局部变量,不同线程的局部变量都有自己的实例
2使用同步代码块
1 getParameter()获取的是String,getAttribute()获取的是Object
2 getParameter()获取的是请求中的参数,url中的参数,getAttribute()获取的是容器中的值或对象
3 setAttribute,getAttribute()方法可以发送和获取对象,而getParameter只能获取,没有setParameter方法
setAttribute是将对象存储在页面所对应得一块内存中,当把页面重定向到另一个页面时,也将对象发送到另一个页面对应得内存中,所以可以通过getAttribute方法获取
静态include语法:<%@include file=“文件名”%>,在编译时将对应的文件包含进来,当文件内容变化时,不会再一次进行编译,不宜与维护
动态include语法:
现在java的web系统都是采用MVC的设计模型,即Model(业务逻辑处理层),View(视图解析),Controller(控制)分离设计
Model:处理业务逻辑
View:负责页面的显示,将Model处理的结果返回给客户,即完成数据和页面的转换
Controller:负责请求的分发,将form提交的数据发送给Model进行处理,将处理过后的结果发送给View进行视图解析,返回给客户
功能:1 取出四个作用域中的数据显示
2取出请i求中的参数显示
原因:在页面中使用jsp脚本或者jsp表达式来获取数据显示比较麻烦
1 需要进行判断
2 需要进行强转
3书写频繁,可阅读性差
通过session防止表单提交
在页面中随机生成一个标识符,将其保存在session中,同时也保存在页面的隐藏域中。当页面提交时会把这个标识符一起提交
若session中的标识符的值和页面提交的标识符的值相同时,则允许提交,同时删除session中的标识符,若提交的不一致,则
说明是重复提交,不允许提交
web容器为处于其中的应用(jsp,servlet)提供了一个环境,使jsp,servlet和容器中的变量交互时,不需要关注系统的问题
主要有web服务器来完成如:tomcat,sphell等,web容器提供的接口严格地遵循J2EE规范中的web.application标准
把所有这些符合标准的web服务器成为web容器
属于部署描述符,在整个JAVA中只要是容器,则就存在部署描述符,部署描述符可以控制JaVa中各个组件的运行状态,也可以配置整个窗口的状态
HTML是超文本标记语言,XML是可扩展标记语言
不同点:1语法不同,XML语法严谨,HTML语法松散。
2用途不同:XML用于数据的格式化存储,而HTML用于页面的编辑
在JS中=的比较比较严格
当用进行比较时,首先判断数据的类型是否相同,如果相同则用=进行比较,如果不同还可以为你进行一次类型的转换
但是使用=时,如果数据的类型不同,则直接返回false
1内存配置:tomcat依赖于JVM。可以配置JVM的内存配置
2配置最大连接数
可以通过nginx提升tomcat的并发性能
html是文本标记语言,他是静态页面,可以直接访问,不需要编译,只要有html标记就行
jsp是动态的java服务端页面,他需要先转译成servlet文件,在编译成class文件执行
区别:1html是静态页面,可以直接打开。而jsp需要发送到服务器中才能打开
2html可以直接运行,而jsp需要先转换成servlet,然后才能执行
3表头不一样,jsp表头中包含了编码格式和jar包
4 jsp中可以用<%%>添加java代码,html中没有
1 html是静态的,servlet是动态的
2 html是由服务器直接返回,servlet是处理客户请求,返回一个html页面
3 servlet需要调用servlet方法生成动态的html页面,需要在web.xml中配置url
request:客户端向服务端发送请求
response:服务端对客户端请求做出响应
session:session不能直接使用,需要通过调用getsession方法创建,如果没有设定他的生命周期或者调用invildate方法进行销毁,当服务器关闭时,session销毁
application:不能直接创建,存储在服务器内存中,由服务器创建和销毁
1 request是针对一次请求,session是针对整个会话
2 request可以直接调用,session必须先通过调用getSession方法创建对象