-
http的长连接和短连接
HTTP协议有HTTP/1.0、HTTP/1.1版本
HTTP/1.1默认保存长连接;长连接的意思是说数据传输完成了之后保持TCP通信不断开,等待同域名下继续使用这个通道传输数据
HTTP/1.0默认使用短连接;短连接表示浏览器和服务器每进行一次HTTP操作,就建立一次连接,任务结束就断开连接 -
HTTP常见的状态码,以及解决办法
200–正常,请求成功、
301–请求的url被移除、
302–临时重定向;重定向新地址时,采用get方法、
400–客户端请求语法错误,服务器无法理解、
403–服务器收到请求,但拒绝提供服务、
404–请求资源不存在;检查访问路径、
500–代码错误;检查代码、
503–服务器当前不能处理客户端请求,一段时间后可能恢复正常
504–网关请求超时,检查网络 -
get和post的区别
3.1 HTTP协议层面:
get请求作为查询,是安全的幂等的
post请求可能修改服务器上的资源请求
3.2 根据存放的位置的不同
get请求数据放于url地址参数中,post请求数据放于请求体中
get请求书签可收藏;post不能
get能被缓存;post不能
get能保存在浏览器历史记录中;post不能
get请求的安全性低于post请求
get对数据的长度有限制;post没有
get请求只支持ascall;post没有限制包括二进制 -
请求转发和重定向的区别
描述:
1、请求转发客户端只进行一次请求,重定向客户端进行多次请求
2、请求转发返回的结果为所请求的资源响应的全部内容;重定向返回的结果为最后一次请求资源所响应的内容
3、请求转发可以转发信息;重定向不可以
4、请求转发中绝对路径中的“/”表示项目的跟路径,只能转发到当前项目的其他资源;重定向中表示服务器的根目录,可以重定向到任意互联网资源 -
简述servlet的结构体系
1、开发中我们从HttpServlet继承。
2、Servlet的组成部分:
Servlet的主体部分:(servlet接口–>GenericServlet–>HttpServlet–>OurServlet)
Servlet需要初始化:那么就需要有初始化参数。这时就有了一个配置对象: ServletConfig
Servlet要运行:需要一个运行的环境。这是就需要一个上下文对象: ServletContext
Servlet要获取客户端的请求:需要有一个请求对象: ServletRequest
Servlet需要向客户端响应消息:就需要有一个响应对象: ServletRespons -
cookie、session和application(servletContext)的区别
1、存放位置:客户端、服务器中(但会有一个session存放在客户端)、服务器
2、过期时间:根据设置(秒)、根据设置(默认过期时间为30分钟)–在servlet中设置session单位为秒、服务启动到关闭
3、存放数据类型:字符串、对象、对象
4、使用权限:用户私有、用户私有、项目公用 -
设置session的过期时间
1、在servlet中通过session.setMaxInactiveInterval–单位为秒
2、在项目的web.xml文件中设置–单位为分钟
3、在tomcat服务器中的web.xml文件中设置
如果不设置session的过期时间,默认为服务器中配置好的时间30分钟
设置时间的优先级1>2>3 -
单点登录时,客户端禁用cookie后怎么处理
单点登录实现的原理是在后端生成一个sessionid,将这个id保存到cookie中,后面所有的请求客户端都会自动携带cookie,然后服务器通过cookie中的sessionid查询用户信息,从而保持登录;
当客户端禁用cookie之后,可以采用HTTP请求头携带sessionid的方式,但这个请求头不会自动携带,需手动设置 -
什么是jsp?什么是servlet?jsp和servlet的区别
jsp:本质就是servlet,由sun公司推出的一种模板;其实每个jsp都是一个servlet实例
servlet:由Java提供用于开发web服务应用程序的一个组件,运行在服务端,由servlet容器管理,用来生成动态内容。一个servlet实例是实现了特殊接口Servlet的java类,所有自定义的servlet都要实现Servlet接口
区别:
1、jsp是html页面中内嵌Java代码,侧重页面显示;
2、servlet侧重逻辑控制;在mvc设计思想中,jsp为视图层,servlet为控制层
jsp的运行机制:由于JVM只能识别Java类,所以web容器收到jsp请求时---->将访问交给tomcat中的jsp引擎处理---->转换成一个servlet,编译成一个class文件---->再交给web容器中的servlet引擎去装载,从而实现页面交互
-
请描述jsp的9大内置对象,以及这些对象与servelt中各个对象之间的对应关系
request:用户端请求,此请求会包含来自GET/POST请求的参数
response:网页传回用户端的回应
pageContext:网页的属性是在这里管理
session:与请求有关的会话期
application:servlet 正在执行的内容
out:用来传送回应的输出
config:servlet的构架部件
page:JSP网页本身
exception:针对错误网页,未捕捉的例外
request:表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header,和session数据的有用的方法。
response:表示HttpServletResponse对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies,头信息等)
out:对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
pageContext:表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。
session:表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息
applicaton: 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息
config:表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。
page:表示从该页面产生的一个servlet实例
exception:对象的作用是显示异常信息
-
servlet的生命周期
初始化-----实例化-----服务------销毁
描述:客户端发送请求到tomcat服务器,tomcat服务器判断请求,若为servlet请求,那么直接到servlet容器中去找是否有所请求的servlet实例,若存在,则直接调用service()方法,若不存在则加载class,调用构造方法,在进行初始化,然后再调用service()方法;最后判断请求类型,作出相应;最终关闭(销毁) -
servlet特性?servlet线程安全吗?如何解决servlet中的线程不安全问题?
1、单例多线程
2、servlet对象并不是一个线程安全的对象;
servlet第一次调用的时候,先通过init()方法初始化servlet,然后再调用service()方法,在第二次请求时,会直接调用service()方法;因为servlet是单实例的,所以后面的请求同一个servlet时,不会创建新的实例,但是web容器会为每一个请求创建一个线程,这样会导致多个并发的请求访问同一个servlet,从而使线程不安全
3、(1)不要在servlet中使用成员变量
(2)添加Synchronize同步锁,但是数据并发访问会导致堵塞
(3)可以实现SingleThreadModel接口,这样可以避免在servlet中使用成员变量的问题,但同样会导致并发访问导致堵塞的问题 -
过滤器作用?拦截器作用?区别?
1、过滤器在进行javaweb请求和响应时,对一些信息进行过滤操作,或提前设置一些参数在进入servlet之前;例如:过滤掉部分url(没有登录的都过滤掉)、对字符进行统一设置等
2、拦截器是在面向切面编程中使用的,在进行servlet请求或者一个方法前后进行资源的拦截处理,例如:动态代理
区别:
(1)拦截器是基于java的反射机制的,而过滤器是基于函数回调。
(2)拦截器不依赖servlet容器,过滤器依赖与servlet容器。
(3)拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
(4)拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
(5)在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次 -
request.getAttribute()和 request.getParameter()有何区别?
1、getParameter()返回的数据类型都是String类型的;getAttribute()返回的数据数据类型可以是对象
2、getParameter()获取POST/GET传递的参数值;getAttribute()是获取对象容器中的数据值
3、getParameter()用于获取客户端提交的表单数据或url地址中的参数;getAttribute()只能收到程序用setAttribute()设置的值
4、getAttribute()可获取session的值 -
解决jsp乱码问题
1、查看jsp文件头是否设置了编码格式;
2、查看项目的编码格式:设置为UTF-8
3、提交的表单乱码等问题,需要在请求头响应头设置编码
4、设置tomcat服务器编码格式,默认情况下,tomcat使用的的编码方式:iso8859-1,打开setting.xml文件(在tomcat文件夹conf中)
总结:jsp页面头、项目编码格式、请求头响应头设置编码格式、tomcat服务器编码格式 -
TCP和UDP的区别
1、TCP基于连接,UDP基于无连接。
2、TCP对系统资源要求高,UDP少。
3、TCP是基于字节流的,UDP是数据报文模式。
4、TCP复杂,UDP简单。 -
TCP 为什么要三次握手
TCP通信只有经过三次握手才能确保双方都能接收到对方发送的数据 -
Http请求由哪三部分组成
请求行、请求头、请求体
http协议报文
1.请求报文(请求行/请求头/请求数据/空行)
请求行
求方法字段、URL字段和HTTP协议版本
例如:GET /index.html HTTP/1.1
get方法将数据拼接在url后面,传递参数受限
请求方法:
GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT
请求头(key value形式)
User-Agent:产生请求的浏览器类型。
Accept:客户端可识别的内容类型列表。
Host:主机地址
请求数据
post方法中,会把数据以key value形式发送请求
空行
发送回车符和换行符,通知服务器以下不再有请求头
2.响应报文(状态行、消息报头、响应正文)
状态行
消息报头
响应正文 -
详细描述MVC
基于java的web应用系统采用MVC设计模型,即用Model(模型)、View(视图)和Controller(控制)分离设计,这是目前web应用服务系统的主流设置方向。
Model:处理业务逻辑的模块。
View:负责页面显示,显示Model的处理结果给用户,主要实现数据到页面的转换过程。
Controller:负责每个请求的分发,把Form数据传递给Model进行处理,处理完成后,把处理结果返回给相应的View显示给用户。