广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java经典面试题汇总:Java Web
  • 115
分享到

Java经典面试题汇总:Java Web

2024-04-02 19:04:59 115人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录1. jsP 和 servlet 有什么区别?2. 什么是Tomcat?3. Tomcat容器是如何创建Servlet类实例?用到了什么原理?4. 拦截器和过滤器的区别?

1. JSP 和 servlet 有什么区别?

JSP 是 servlet 技术的扩展,本质上就是 servlet 的简易方式。servlet 和 JSP 最主要的不同点在于, servlet 的应用逻辑是在 Java 文件中,并且完全从表示层中的 html 里分离开来,而 JSP 的情况是 Java 和 html 可以组合成一个扩展名为 JSP 的文件。JSP 侧重于视图,servlet 主要用于控制逻辑。

2. 什么是Tomcat?

Tomcat是一个免费的WEB应用服务器,Java编写的Web项目可以部署在上面,用户在客户端请求时,都是将请求发到Tomcat上,Tomcat在将请求发到对应的项目上。

3. Tomcat容器是如何创建Servlet类实例?用到了什么原理?

当容器启动时,会读取在webapps目录下所有的web应用中的web.xml文件,然后对xml文件进行解析,并读取servlet注册信息。然后,将每个应用中注册的servlet类都进行加载,并通过反射的方式实例化。(有时候也是在第一次请求时实例化)在servlet注册时加上1如果为正数,则在一开始就实例化,如果不写或为负数,则第一次请求实例化。

4. 拦截器和过滤器的区别?

  • 拦截器是基于java的反射机制的,而过滤器是基于函数回调。
  • 拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
  • 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
  • 拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
  • 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。

5.说一下 JSP 的 4 种作用域?

  • page:代表与一个页面相关的对象和属性。
  • request:代表与客户端发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件;需要在页面显示的临时数据可以置于此作用域。
  • session:代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的 session 中。
  • application:代表与整个 Web 应用程序相关的对象和属性,它实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域。

6. JSP 有哪些内置对象?作用分别是什么?

JSP 有 9 大内置对象:

  • request:封装客户端的请求,其中包含来自 get 或 post 请求的参数;
  • response:封装服务器对客户端的响应;
  • pageContext:通过该对象可以获取其他对象;
  • session:封装用户会话的对象;
  • application:封装服务器运行环境的对象;
  • out:输出服务器响应的输出流对象;
  • config:Web 应用的配置对象;
  • page:JSP 页面本身(相当于 Java 程序中的 this);
  • exception:封装页面抛出异常的对象。

7. Servlet的生命周期

servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.servlet接口中的init、service、destroy方法表达。

(1)加载和实例化

当Servlet容器启动或客户端发送一个请求时,Servlet容器会查找内存中是否存在该Servlet实例,若存在,则直接读取该实例响应请求;如果不存在,就创建一个Servlet实例。

(2) 初始化

实例化后,Servlet容器将调用Servlet的init()方法进行初始化(一些准备工作或资源预加载工作)。

(3)服务

初始化后,Servlet处于能响应请求的就绪状态。当接收到客户端请求时,调用service()的方法处理客户端请求,httpservlet的service()方法会根据不同的请求 转调不同的doXxx()方法。

(4)销毁

当Servlet容器关闭时,Servlet实例也随时销毁。其间,Servlet容器会调用Servlet 的destroy()方法去判断该Servlet是否应当被释放(或回收资源)。

8. session 和 cookie 有什么区别?

  • 存储位置不同:session 存储在服务器端;cookie 存储在浏览器端。
  • 安全性不同:cookie 安全性一般,在浏览器存储,可以被伪造和修改。
  • 容量和个数限制:cookie 有容量限制,每个站点下的 cookie 也有个数限制。
  • 存储的多样性:session 可以存储在 Redis 中、数据库中、应用程序中;而 cookie 只能存储在浏览器中。

9. 说一下 session 的工作原理?

session 的工作原理是客户端登录完成之后,服务器会创建对应的 session,session 创建完之后, 会把 session 的 id 发送给客户端,客户端再存储到浏览器中。这样客户端每次访问服务器时,都会带着 sessionid, 服务器拿到 sessionid 之后,在内存找到与之对应的 session 这样就可以正常工作了。

10. 如果客户端禁止 cookie 能实现 session 还能用吗?

可以用,session 只是依赖 cookie 存储 sessionid,如果 cookie 被禁用了, 可以使用 url 中添加 sessionid 的方式保证 session 能正常使用。

11. JSP工作原理?

(1)当用户访问一个JSP页面时,会向一个Servlet容器(Tomcat)发出请求;

(2)如果是第一次请求页面,或页面有所改动,则servlet容器首先要把JSP页面(假设为test.jsp)转化为Servlet代码(test.java),再将其转化为(test.class文件);因为这个过程(编译)会耗费一定时间,所以第一次访问或jsp文件有改动时,访问时间有些长;

(3)JSP容器负责调用从JSP转换来的servlet,这些servlet负责提供服务相应用户请求(比如客户端发送表单,要求servlet:fORMprocessor.java来处理,则容器会建立一个线程,调用formprocessor.java来处理该请求);如果用户有多个请求,则容器会建立多个线程处理多个请求;

(4)容器执行字节码文件(包括调用的servlet:formprocessor.java字节吗),并将其结果返回到客户端;(返回的最终方式是由servlet输出html格式的文件流)

12. JSP中动态include和静态include的区别?

  • 静态include:语法:<%@ include file="文件名" %>,相当于复制,编辑时将对应的文件包含进来,当内容变化时,不会再一次对其编译,不易维护。
  • 动态include:语法:<jsp:include page="文件名">,能够自动检查被包含文件,当客户端对JSP文件进行请求时,会重新将对应的文件包含进来,进行实时的更新。

13、JSTL是什么?优点有哪些?

答:JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,由四个定制标记库(core、format、xml、sql)和一对通用标记库验证器(ScriptFreeTLV和PermittedTaglibsTLV)组成。

优点有:

  • 在应用程序服务器之间提供了一致的接口,最大程度的提高了web应用在各应用服务器之间的移植。
  • 简化了JSP和web应用程序的开发
  • 以一种统一的方式减少了JSP中scriptlet代码数据,可以达到没有任何scriptlet代码的代码。在我们公司的项目中是不允许任何scriptlet出现在JSP中。
  • 允许JSP设计工具与web应用程序开发的进一步集成。相信不久就会有支持JSTL的IDE开发工具出现。

14. GET和POST的区别?

POST和GET都是向服务器提交数据,并且都会从服务器获取数据。

1、传送方式:get通过地址栏传输,post通过报文传输。

2、传送长度:get参数有长度限制(受限于url长度),而post无限制

3、GET和POST还有一个重大区别,简单的说:

GET产生一个tcp数据包;POST产生两个TCP数据包

长的说:

对于GET方式的请求,浏览器会把Http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

建议:

1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;

2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;

15. 什么是 XSS 攻击,如何避免?

XSS 攻击:即跨站脚本攻击,它是 Web 程序中常见的漏洞。原理是攻击者往 Web 页面里插入恶意的脚本代码(CSS 代码、javascript 代码等),当用户浏览该页面时,嵌入其中的脚本代码会被执行,从而达到恶意攻击用户的目的,如盗取用户 cookie、破坏页面结构、重定向到其他网站等。 预防 XSS 的核心是必须对输入的数据做过滤处理。

16. 什么是 CSRF 攻击,如何避免?

CSRF:Cross-Site Request Forgery(中文:跨站请求伪造),可以理解为攻击者盗用了你的身份,以你的名义发送恶意请求,比如:以你名义发送邮件、发消息、购买商品,虚拟货币转账等。 防御手段: 验证请求来源地址; 关键操作添加验证码; 在请求地址添加 token 并验证。

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: Java经典面试题汇总:Java Web

本文链接: https://www.lsjlt.com/news/130815.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java经典面试题汇总:Java Web
    目录1. JSP 和 servlet 有什么区别?2. 什么是Tomcat?3. Tomcat容器是如何创建Servlet类实例?用到了什么原理?4. 拦截器和过滤器的区别?...
    99+
    2022-11-12
  • Java经典面试题汇总:JVM
    目录1. 说一下 JVM 的主要组成部分?及其作用?2. 说一下 JVM 运行时数据区?3. 说一下堆栈的区别?4. 解释内存中的栈(stack)、堆(heap)和静态区(stati...
    99+
    2022-11-12
  • Java经典面试题汇总:Spring
    目录1. 什么是Spring? 有哪些优点?2. 什么是 AOP?3. 什么是 IOC?4. 什么是 DI?5. Spring 有哪些核心模块?6. Spring 常...
    99+
    2022-11-12
  • Java经典面试题汇总:Mybatis
    目录1. MyBatis 中 #{}和 ${}的区别是什么?2. MyBatis 有几种分页方式?3. MyBatis 逻辑分页和物理分页的区别是什么?4. MyBatis 是否支持...
    99+
    2022-11-12
  • Java经典面试题汇总:异常
    目录1. Java的异常机制2. Java如何自定义异常?3. throw 和 throws 的区别?4. Java 中被检查的异常和不受检查的异常有什么区别?5. final、fi...
    99+
    2022-11-12
  • Java经典面试题汇总:Spring MVC
    目录1. 什么是Spring MVC ?2. Spring MVC 有哪些组件?3. 说一下 Spring MVC 运行流程?4. Spring MVC的优点:5. @Request...
    99+
    2022-11-12
  • Java经典面试题汇总:Spring Boot
    目录1. 什么是 Spring Boot?2. 为什么要用 Spring Boot? 3. Spring Boot 核心配置文件是什么?4. Spring Boot 提供了...
    99+
    2022-11-12
  • Java经典面试题汇总--多线程
    目录1.并行和并发有什么区别?2.线程和进程的区别?3.守护线程是什么?4.实现多线程的方式有哪些?5.说一下runnable和callable有什么区别?6.sleep()和wai...
    99+
    2022-11-12
  • Java经典面试题汇总:多线程
    目录1. 并行和并发有什么区别?2.线程和进程的区别?3.守护线程是什么?4.实现多线程的方式有哪些?5.说一下runnable和callable有什么区别?6.sleep...
    99+
    2022-11-12
  • Java经典面试题汇总:网络编程
    目录1. HTTP 响应码 301 和 302 代表的是什么?有什么区别?2. 简单说一下http协议?3. HTTP与HTTPS的区别?4. HTTP协议下客户端请求报文是什么?5...
    99+
    2022-11-12
  • Java经典面试题最全汇总208道(六)
    目录前言 181、什么是类加载器,类加载器有哪些?182、说一下类加载的执行过程?183、JVM的类加载机制是什么?184、什么是双亲委派模型?185、怎么判断对象是否可以...
    99+
    2023-01-17
    Java面试题 Java经典面试题
  • Java经典面试题最全汇总208道(二)
    目录前言 53、concurrentHashMap和HashTable有什么区别54、HasmMap和HashSet的区别55、请谈谈 ReadWriteLock 和 St...
    99+
    2023-01-17
    Java面试题 Java经典面试题
  • Java经典面试题总结(一)
    Java经典面试题总结(一) 题一:Java编译运行原理题二:JDK,JVM,JRE三者之间的关系题三:谈一下对冯诺依曼体系的了解题四:重载与重写的区别题五:拆箱装箱是指什么? 题一:Java编译运行原理 Java源代码通过...
    99+
    2023-08-30
    java 开发语言
  • java哈希算法HashMap经典面试题目汇总解析
    目录1、HashMap 的数据结构?2、HashMap 的工作原理?3、当两个对象的 hashCode 相同会发生什么?4、你知道 hash 的实现吗?为什么要这样实现?5、为什么要...
    99+
    2022-11-13
  • Java面试题经典面试题220道(附答案)
    Java基础: JDK 和 JRE 有什么区别? == 和 equals 的区别是什么?== 解读 两个对象的 hashCode() 相同, 那么 equals() 也一定为 true吗? final 在 Java 中有什么作用? ...
    99+
    2023-09-06
    java 面试 jvm
  • Java八道经典面试题之链表题
    目录第一题 移除链表元素第二题 反转链表第三题 链表的中心结点第四题 倒数第k个结点第五题 合并两个有序链表第六题 链表分割第七题 判断是否回文第八题 相交链表第一题 移除链表元素 ...
    99+
    2022-11-12
  • 经典java面试题_实习生必问!
    经典java面试题_实习生必问!第一,谈谈final, finally, finalize的区别。final修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstr...
    99+
    2020-03-21
    java面试题 java
  • web前端的经典面试题有哪些
    这篇文章主要讲解了“web前端的经典面试题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“web前端的经典面试题有哪些”吧!  1、如何利用Webpack把代码上传服务器以及转码测试  ...
    99+
    2023-06-03
  • 2019年JAVA最常见面试题汇总(收藏)
    java基础以及多个“比较”1.Collections.sort排序内部原理在Java 6中Arrays.sort()和Collections.sort()使用的是MergeSort,而在Java 7中,内部实现换成了TimSort,其对对...
    99+
    2020-11-20
    java面试题 java面试题
  • Java 详细分析四个经典链表面试题
    前言: 上一章更到了链表,虽然知道了什么是链表,链表的结构是怎么样的,但这是远远不够的,我们只清楚了点皮毛,如果让你做题你还是会无从下手,所以我们必须多做题,在做题的过程中慢慢的我们...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作