Java面试知识点解析-01 —— Web篇(J2EE 相关知识点)
借参加过的多场Java开发面试,应聘岗位均为Java开发方向,在不断的面试中,又仔细对Java知识点进行复习和总结,也算是重新学习一下Java吧。
推荐收藏链接:Java 面试知识点解析
不涉及任何框架,对 J2EE 相关知识点的解析
1)Servlet 的生命周期?
在 Web 容器中,Servlet 主要经历 4 个阶段,如下图:
1. 加载 Servlet: 当 Tomcat 第一次访问 Servlet 的时候,Tomcat 会负责创建 Servlet 的实例。
2. 初始化 Servlet: 当 Servlet 被实例化之后,Tomcat 会调用 init() 方法来初始化这个对象。
3. 处理服务: 当浏览器访问 Servlet 的时候,Servlet 会调用 service() 方法处理请求。
4. 销毁: 当 Tomcat 关闭或者检测到 Servlet 要从 Tomcat 删除的时候,会自动调用 destroy() 方法,让该实例所占用的资源释放掉。一个 Servlet 如果长时间不被使用的话,也会被 Tomcat 自动销毁。
简单总结:只要访问 Servlet ,就会调用其对应的 service() 方法,init() 方法只会在第一次访问 Serlvet 的时候才会被调用。
2)Servlet 的请求流程?
-
浏览器发出请求:
http://localhost:80/xxx1/xxx2
(80端口可以默认不写,因为这是http协议默认的端口,平时我们访问https://www.baidu.com/
时其实访问的是https://www.baidu.com:80/
) -
服务器解析请求信息:
http: 协议名称 - localhost: 访问的是互联网中的哪一台计算机
- 80: 从主机当中找到对应 80 端口的程序 (这里即为 Tomcat 服务器)
- /xxx1: 当前项目的上下文路径 (即在 server.xml 中配置主机时配置的 path属性)
- /xxx2: 当前请求的资源名
解析 Tomcat 服务器根目录下的 /config/server.xml 文件:
< Context docBase=“D:\javaPros\test\webapp” path=“xxx1” />
判断哪一个
< Context />元素的 path属性 属性为 xxx1
-
若找不到,则返回 404错误
<Context />元素,得到
docBase属性,获取当前访问 Web 项目的跟的绝对路径:
D:\javaPros\test\webapp
从
D:\javaPros\test\webapp下的
WEB-INF下找到
web.xml文件
判断
web.xml文件中是否有
<url-pattern>的文本内容为
/xxx2
-
若找不到,则返回 404错误
判断 Servlet 实例缓存池 中是否有
xxx.xxx的对象
Map<String,Servlet> cache = ......(Tomcat提供的); key: 存Servlet类的全限定名称 value: 该Servlet类的对象. Servlet obj = cache.get("xxx.xxx"); if(obj==null){ //Servlet实例缓存中没有该类的对象,第一次. GOTO 6: }else{ //有对象,非第一次. GOTO 8: }
使用反射调用构造器,创建对应的对象
obj = Class.forName("xxx.xxx").newInstance();
把当前创建的
Servlet对象,存放在缓存之中,
供给下一次的使用.
cache.put("xxx.xxx",obj);
创建
ServletConfig对象,并调用
init()方法.
obj.init(config);
创建
ServletRequest 对象和
ServletResponse 对象,并调用
service()方法.
obj.service(req,resp);
在
service()方法中对浏览器作出响应操作。
3)Servlet 是单例的吗?为什么?
Servlet是单例的,浏览器多次对
Servlet的请求,一般情况下,服务器只创建一个
Servlet对象,也就是说,
Servlet对象一旦创建了,就会驻留在内存中,为后续的请求做服务,直到服务器关闭。
4)GET 和 POST 的区别
要知道,GET 和 POST 都是请求方式
1. GET:
浏览器器地址栏:
http://localhost/test.html?name=wmyskxz&sex=male
这里提交了两个参数,一个是
name属性值为
wmyskxz,另一个是
sex属性值为
male,这是一种直接的请求方式,在请求资源后面跟上
?符号与参数连接,其他的参数使用
&符号连接。
- 缺点:
1.暴露请求信息,不安全
2.请求信息不能超过1kb,可传输的信息有限,不能上传图片
2. POST:
浏览器地址栏:
http://localhost/test.html#
- 优点:
1.隐藏了请求信息,较安全(但仍可以通过相关工具访问到数据)
2.POST 方式没有限制请求的数据大小,可以做图片的上传
5)Tomcat 中如何解决中文乱码问题?
在 Tomcat 服务器中,接受请求的时候,默认的编码方式为 ISO-8859-1,而该编码方式只占一个字节,不支持中文(两个字节),所以当我们做请求的时候,会出现乱码的问题
解决方案:
1.对乱码使用 ISO-8859-1 解码,转换成byte数组,恢复为二进制
byte[] data = name.getBytes("ISO-8859-1");
2.对byte数组重新进行 UTF-8 编码:
name = new String(data,"UTF-8");
但是这样会出现一个问题,那就是当表单数据太多的时候,这样反复解码-编码,会很繁琐。
终极解决方案:
1.对于 POST 请求:
设置请求的编码方式:
request.setCharacterEncoding("UTF-8");
注意:必须在获取第一个参数之前设置,并且该方式只对 POST 方式有效。
2.对于 GET 请求:
重新设置 Tomcat 的编码方式,修改 Tomcat 的配置文件:
Tomcat根目录/conf/serve 3ff7 r.xml(修改端口的那一行)
我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家。扫描二维码加VX好友,拉你进【程序员面试学习交流群】免费领取。也欢迎各位一起在群里探讨技术。
- Java面试知识点解析-02 —— Web篇(J2EE 相关知识点)
- Java面试知识点解析-04 —— Web篇(SpringMVC)
- 2、MyEclipse和Eclipse调优,MyEclipse配置(tomcat和jdk的内存设置),jar引入相关知识点,将Java项目编程web项目的办法
- 给Java菜鸟的一些建议_关于Java知识点归纳(J2EE and Web 部分)
- Java Web知识点整理:第二章:Jquery学习、xml学习、XML的解析、Servlet学习
- 知名互联网公司 Java 开发岗面试知识点解析
- 给Java新手的一些建议——Java知识点归纳(J2EE and Web 部分)
- 知名互联网公司校招 Java 开发岗面试知识点解析
- java基础74 XML解析中的SAX解析相关知识点(网页知识)
- java面试知识点整理之web系列
- 知名互联网公司校招 Java 开发岗面试知识点解析
- 知名互联网公司校招 Java 开发岗面试知识点解析
- 知名互联网公司校招 Java 开发岗面试知识点解析
- Java语言相关知识点,面试中鲜有人能说明白的问题
- Java面试01-Jvm相关
- Java笔试面试(Web相关1)
- 知名互联网公司校招 Java 开发岗面试知识点解析
- 知名互联网公司校招 Java 开发岗面试知识点解析
- 知名互联网公司校招 Java 开发岗面试知识点解析
- 知名互联网公司校招 Java 开发岗面试知识点解析