Java经典面试题汇总:Java Web

目录
  • 1. JSP 和 servlet 有什么区别?
  • 2. 什么是Tomcat?
  • 3. Tomcat容器是如何创建Servlet类实例?用到了什么原理?
  • 4. 拦截器和过滤器的区别?
  • 5.说一下 JSP 的 4 种作用域?
  • 6. JSP 有哪些内置对象?作用分别是什么?
  • 7. Servlet的生命周期
  • 8. session 和 cookie 有什么区别?
  • 9. 说一下 session 的工作原理?
  • 10. 如果客户端禁止 cookie 能实现 session 还能用吗?
  • 11. JSP工作原理?
  • 12. JSP中动态include和静态include的区别?
  • 13、JSTL是什么?优点有哪些?
  • 14. GET和POST的区别?
  • 15. 什么是 XSS 攻击,如何避免?
  • 16. 什么是 CSRF 攻击,如何避免?
  • 总结

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 并验证。

总结

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

(0)

相关推荐

  • Java Web开发项目中中文乱码解决方法汇总

    Java Web项目中,解决中文乱码方法总结如下 第一种情况:调用jsp页面中文显示乱码 问题描述:通过浏览器调用jsp页面,在浏览器中显示的中文内容出现乱码. 解决方法:首先确认本jsp在编辑器中保存文件内容时,使用的是utf-8的编码格式,然后在jsp页面的开始处添加<%@ pageEncoding="utf-8"%>就可以解决这种中文乱码问题 第二种情况:调用servlet页面显示乱码 问题描述:通过浏览器调用servlet,servlet在浏览器中显示的内容出现乱码

  • javaweb如何使用华为云短信通知公共类调用

    javaweb华为云短信通知公共类调用 情景:公司业务需求,短信从阿里云切换到华为云,参照华为云短信调用的相关文档遇到不少坑,在此记录一下. 开发环境:JDK1.8 系统环境:SpringBoot 1.华为云短信配置信息在application.yml中配置 sms: huawei: url: https://rtcsms.cn-north-1.myhuaweicloud.com:10743/sms/batchSendSms/v1 appKey: ****** appSecret: ******

  • javaweb中静态文件的常用处理方法汇总

    本文实例汇总了javaweb中静态文件的常用处理方法,在Javaweb程序开发中很有实用价值,具体方法汇总如下: 方法一:激活Tomcat的defaultServlet来处理静态文件 在web.xml中添加: <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <ser

  • C# 调用 JavaWebservice服务遇到的问题汇总

    1. A SOAP 1.2 message is not valid when sent to a SOAP 1.1 only endpoint. 问题原因: 客户端和服务端的SOAP协议版本不一致. 解决方法: ①修改客户端SOAP协议版本和服务端一致 ②修改服务端SOAP协议版本和客户端一致 附Java服务端修改服务暴露SOAP版本方法: 在接口的实现类上面添加注解 //import javax.xml.ws.BindingType; //import javax.xml.ws.soap.S

  • Java Web最近面试题汇总

    jsp 和 servlet 有什么区别? jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类) jsp更擅长表现于页面显示,servlet更擅长于逻辑控制. Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到. Jsp是Servlet的一种简化

  • Java经典面试题汇总:Java Web

    目录 1. JSP 和 servlet 有什么区别? 2. 什么是Tomcat? 3. Tomcat容器是如何创建Servlet类实例?用到了什么原理? 4. 拦截器和过滤器的区别? 5.说一下 JSP 的 4 种作用域? 6. JSP 有哪些内置对象?作用分别是什么? 7. Servlet的生命周期 8. session 和 cookie 有什么区别? 9. 说一下 session 的工作原理? 10. 如果客户端禁止 cookie 能实现 session 还能用吗? 11. JSP工作原理?

  • Java经典面试题汇总:异常

    目录 1. Java的异常机制 2. Java如何自定义异常? 3. throw 和 throws 的区别? 4. Java 中被检查的异常和不受检查的异常有什么区别? 5. final.finally.finalize 有什么区别? 6. try-catch-finally 中哪个部分可以省略? 7. try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗? 8. Java 中什么时候使用断言? 9. 运行时异常与一般异常有何异同? 10.

  • Java经典面试题汇总--多线程

    目录 1. 并行和并发有什么区别? 2. 线程和进程的区别? 3. 守护线程是什么? 4. 实现多线程的方式有哪些? 5. 说一下 runnable 和 callable 有什么区别? 6. sleep() 和 wait() 有什么区别? 7. 线程有哪些状态? 8. notify()和 notifyAll()有什么区别? 9. 线程的 run() 和 start() 有什么区别? 10. 创建线程池有哪几种方式? 11. 线程池中 submit() 和 execute() 方法有什么区别? 1

  • Java经典面试题汇总:Spring Boot

    目录 1. 什么是 Spring Boot? 2. 为什么要用 Spring Boot? 3. Spring Boot 核心配置文件是什么? 4. Spring Boot 提供了哪些常用的 Starter Project Options? 5. 如何快速构建一个Spring Boot项目? 6. Spring Boot默认的内置Web服务器是什么? 7. Spring Boot常用注解及其作用? 8. 如何使用配置文件通过 Spring Boot 配置特定环境的配置? 总结 1. 什么是 Spr

  • Java经典面试题汇总:Spring MVC

    目录 1. 什么是Spring MVC ? 2. Spring MVC 有哪些组件? 3. 说一下 Spring MVC 运行流程? 4. Spring MVC的优点: 5. @RequestMapping 的作用是什么? 6. 如果在拦截请求中,我想拦截get方式提交的方法,怎么配置? 7. SpringMVC常用的注解有哪些? 8. SpingMvc中的控制器的注解一般用那个,有没有别的注解可以替代? 9. Spring MVC和Struts2的区别有哪些? 10. 怎么样在方法里面得到Re

  • Java经典面试题汇总:Spring

    目录 1. 什么是Spring? 有哪些优点? 2. 什么是 AOP? 3. 什么是 IOC? 4. 什么是 DI? 5. Spring 有哪些核心模块? 6. Spring 常用的注入方式有哪些? 7. Spring 中的 Bean 是线程安全的吗? 8. Spring中Bean的作用域有哪些? 9. @Qualifier 注解 10. @Resource与@Autowired注解的区别? 11. Spring底层两种动态代理实现原理及区别? 12. Spring 事务实现方式有哪些? 13.

  • Java经典面试题汇总:JVM

    目录 1. 说一下 JVM 的主要组成部分?及其作用? 2. 说一下 JVM 运行时数据区? 3. 说一下堆栈的区别? 4. 解释内存中的栈(stack).堆(heap)和静态区(static area)的用法 5. 类的生命周期 6. Java对象创建过程 7. 怎么判断对象是否可以被回收? 8. 什么是类加载器? 9. 什么是双亲委派模型? 10. 说一下类装载的执行过程? 11. Java 中都有哪些引用类型? 12. JVM 有哪些垃圾回收算法? 13. JVM 有哪些垃圾回收器? 14

  • Java经典面试题汇总:网络编程

    目录 1. HTTP 响应码 301 和 302 代表的是什么?有什么区别? 2. 简单说一下http协议? 3. HTTP与HTTPS的区别? 4. HTTP协议下客户端请求报文是什么? 5. HTTP协议服务器响应报文有哪些? 6. HTTP协议中的请求方法有哪些? 7. 常见的HTTP状态码有哪些? 8. forward 和 redirect 的区别? 9. 简述 tcp 和 udp的区别? 10. TCP 为什么要三次握手,两次不行吗?为什么? 11. 说一下 TCP 粘包是怎么产生的?

  • Java经典面试题汇总:Mybatis

    目录 1. MyBatis 中 #{}和 ${}的区别是什么? 2. MyBatis 有几种分页方式? 3. MyBatis 逻辑分页和物理分页的区别是什么? 4. MyBatis 是否支持延迟加载?延迟加载的原理是什么? 5. 说一下 MyBatis 的一级缓存和二级缓存? 6. MyBatis 有哪些执行器(Executor)? 7. MyBatis 分页插件的实现原理是什么? 8. MyBatis如何返回主键? 9. Xml映射文件中,除了常见的select|insert|update|d

  • Java经典面试题最全汇总208道(五)

    目录 前言 152.什么是 YAML? 153.如何使用 Spring Boot 实现分页和排序? 154.如何使用 Spring Boot 实现异常处理? 155.单点登录 156.Spring Boot比Spring多哪些注解 157.打包和部署 158.Spring Boot如何访问不同的数据库 159.查询网站在线人数 160.easyExcel如何实现 161.什么是 Swagger?你用 Spring Boot 实现了它吗? 162.数据库的三范式是什么? 163.一张自增表里面总共

随机推荐