servlet什么时候创建
默认情况第一次访问创建,可以通过配置load-on-startup的值,让servlet的随着tomcat启动而创建,该值只要大于等于0即可。该值越小优先级越高
servlet生命周期的三个方法是什么
如何解决请求和响应乱码
解决POST乱码,并不能处理get请求乱码,TOMCAT8,自动处理了GET乱码
request.setCharacterEncoding(“utf-8”)
response.setContentType(“text/html;charset=utf-8”)
Session和cookie有什么区别?
- Cookie是会话技术,将用户的信息保存到浏览器的对象. Session也是会话技术,将Session的信息保存到服务器的对象
- cookie存在浏览器,session存在服务器
- cookie不安全,session安全 相对而已session某种程度上也不安全
- cookie有大小数量限制,session没有。(数量和大小不同浏览器不一样)
- session基于cookie
- 若考虑减轻服务器负担,应使用Cookie
session和cookie的原理
浏览器第一次访问服务器,服务器创建Session对象,同时生成一个Session id,并将ID的值通过JSESSIONID存储浏览器cookie中。之后每次将cookie中的JSESSIONID(我们可以看成用户的唯一标识)传给服务器,然后去服务器的内存中去找对应的seession数据,从而保证数据在多次请求中有效
Jsp有哪些内置对象?作用分别是什么?
JSP 4个作用域:pageContext,request,session,application 域对象用于存储数据
Page,pageContext,request,response,session,application,out,config,exception
Page 表示当前JSP页面
pageContext对象可以用来获得其他8个内置对象,还可以作为JSP的域范围对象使用.pageContext中存的值是当前的页面的作用范围
request代表的是请求对象,可以用于获得客户机的信息,也可以作为域对象来使用,使用request保存的数据在一次请求范围内有效。
session代表的是一次会话,可以用于保存用户的私有的信息,也可以作为域对象使用,使用session保存的数据在一次会话范围有效
application:代表整个应用范围,使用这个对象保存的数据在整个web应用中都有效。
response是响应对象,代表的是从服务器向浏览器响应数据.
out:JSPWriter是用于向页面输出内容的对象,先将数据保存到服务器的缓存中,最后再一次性将数据写给浏览器
config:指的是ServletConfig用于JSP翻译成Servlet后 获得Servlet的配置的对象.
exception:在页面中设置isErrorPage=”true”,即可使用,是Throwable的引用.用来获得页面的错误信息
EL表达式中的4个作用域和EL中的有什么区别?
pageScope,requestScope,sessionScope,applicationScope
JSP中的四个作用域对象可以对域中的数据添加,获取,删除。而EL中的只能获取域对象中的数据
如何使用EL表达式获取虚拟路径
${pageContext.request.contextPath}
http 常见的状态码有哪些
200 服务器正常相应数据
302 重定向
304 访问缓存
403 服务器拒绝访问
404 服务器找不到请求的资源
405 服务器内部缺少doGet或者doPost方法
500 (服务器内部错误) 服务器遇到错误,无法完成请求。
503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
http请求方式有几种?
请求方式 | 使用场景 |
GET | 从服务器向客户端发送命名资源 |
PUT | 将来自客户端的数据存储到一个命名的服务器资源中去 |
DELETE | 从服务器中删除命名资源 |
POST | 将客户端数据发送到一个服务器网关应用程 |
GET和POST区别
1、get重点在从服务器上获取资源,post重点在向服务器发送数据;
2、get传参通过URL,拼接方式?参数名=值&参数名=值
3、Get传输的数据量小,因为受URL长度限制,但效率较高;Post可以传输大量数据,所以上传文件时只能用Post方式
4、get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等;post较get安全性较高
5、get方式只能支持ASCII字符,向服务器传的中文字符可能会乱码;post支持标准字符集,可以正确传递中文字符。
实在记不住,一句话,post相对于get更加安全,并且没有大小限制。
HTTP请求报文与响应报文格式
请求报文包含三部分
a、请求行:包含请求方法、URI、HTTP版本信息
b、请求头
c、请求内容实体
响应报文包含三部分:
a、状态行:包含HTTP版本、状态码、状态码的原因短语
b、响应头
c、响应内容实体
Servlet是线程安全的吗
不安全,所以不建议在servlet中定义成员变量
每次访问同一个JSP页面都会重新编译成Servlet吗
只有第一次或者JSP发生变化才会重新编译
jsp中有哪些脚本作用是什么
脚本的作用嵌套JAVA代码
<% 任意java代码%>
<%=表达式%> 在页面输出数据
<%!定义成员变量,不推荐,因为SERVLET是线程不安全的,不建议使用成员变量%>
ServletContext有几个功能
获取MIME类型
作为域对象存储数据
获取web目录下的资源
获取web.xml中的配置信息
cookie的数量限制
不同浏览器cookie的数量限制不同
Microsoft指出InternetExplorer8增加cookie限制为每个域名50个,但IE7似乎也允许每个域名50个cookie。
Firefox每个域名cookie限制为50个。
Opera每个域名cookie限制为30个。
Safari/WebKit貌似没有cookie限制。但是如果cookie很多,则会使header大小超过服务器的处理的限制,会导致错误发生。
注:“每个域名cookie限制为20个”将不再正确!
cookie的大小限制
不同浏览器间cookie总大小也不同:
Firefox和Safari允许cookie多达4097个字节,包括名(name)、值(value)和等号。
Opera允许cookie多达4096个字节,包括:名(name)、值(value)和等号。
InternetExplorer允许cookie多达4095个字节,包括:名(name)、值(value)和等号。
注:多字节字符计算为两个字节。在所有浏览器中,任何cookie大小超过限制都被忽略,且永远不会被设置。
浏览器关闭session就销毁了,这句话对吗
不对,浏览器关闭,session不会立刻销毁,默认30分钟以后销毁。可以通过修改tomcat中web.xml配置,修改默认存活时间
浏览器关闭了,重新打开,还是之前的session吗
默认情况不是,JSESSIONID存在cookie中,默认浏览器关闭就消失,所以下次打开浏览器会重新生成一个JSESSIONID,使用的session也肯定不是同一个了
可以通过修改JSESSIONID的存活时间,也就是延长cookie的生命周期为正数,这样重新打开浏览器,访问的还是之前的session
服务器重启后原来的sesssion还在吗?
存在,服务器正常关闭会将SESSION 序列化(钝化,写入)到硬盘,下次启动会将数据读取(活化、反序列化)到内存
如何销毁session
默认情况30分钟浏览器和服务器没有交互自动销毁,可以修改默认配置apache-tomcat-8.5.31\conf\web.xml 。改名默认存活时间,或者手动调用session对象的invalidate()方法销毁session
说说session的应用场景
验证码、购物车、用户登录信息
重定向和转发的区别
- 发送了几次请求(转发一次,重定向2次)
- 浏览器地址栏有没有发生变化(转发不变,重定向变)
- 能不能使用request作用域(转发可以,重定向不可以)所有的跳转都用/开头,如果是转发不加虚拟路径,剩下的都加
1 错误
解决
2 静态资源不需要重启可以进行刷新
配置