JavaWeb常见面试

版权声明:转载标明来源! https://blog.csdn.net/qq_39213969/article/details/89040537

六、Java Web

1.jsp 和 servlet 有什么区别?

jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)
jsp更擅长表现于页面显示,servlet更擅长于逻辑控制。
Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到。
Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。

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

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

.说一下 jsp 的 4 种作用域?

JSP中的四种作用域包括page、request、session和application

4.session 和 cookie 有什么区别?

Cookie:主要用在保存客户端,其值在客户端与服务端之间传送,不安全,存储的数据量有限。Session:保存在服务端,每一个session在服务端有一个sessionID作一个标识。存储的数据量大,安全性高。占用服务端的内存资源。

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

其实session是一个存在服务器上的类似于一个散列表格的文件。里面存有我们需要的信息,在我们需要用的时候可以从里面取出来。类似于一个大号的map吧,里面的键存储的是用户的sessionid,用户向服务器发送请求的时候会带上这个sessionid。这时就可以从中取出对应的值了。

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

Cookie与 Session,一般认为是两个独立的东西,Session采用的是在服务器端保持状态的方案,而Cookie采用的是在客户端保持状态的方案。但为什么禁用Cookie就不能得到Session呢?因为Session是用Session ID来确定当前对话所对应的服务器Session,而Session ID是通过Cookie来传递的,禁用Cookie相当于失去了Session ID,也就得不到Session了。假定用户关闭Cookie的情况下使用Session,其实现途径有以下几种:1.手动通过URL传值、隐藏表单传递Session ID。2.用文件、数据库等形式保存Session ID,在跨页过程中手动调用。

7.spring mvc 和 struts 的区别是什么?

拦截机制的不同Struts2是类级别的拦截,,SpringMVC是方法级别的拦截,一个方法对应一个Request上下文,所以方法直接基本上是独立的,独享request,response数据。Struts2有自己的拦截Interceptor机制,SpringMVC这是用的是独立的Aop方式,这样导致Struts2的配置文件量还是比SpringMVC大。底层框架的不同:Struts2采用Filter(StrutsPrepareAndExecuteFilter)实现,SpringMVC(DispatcherServlet)则采用Servlet实现。Filter在容器启动之后即初始化;服务停止以后坠毁,晚于Servlet。Servlet在是在调用时初始化,先于Filter调用,服务停止后销毁。性能方面:Struts2是类级别的拦截,每次请求对应实例一个新的Action,需要加载所有的属性值注入,SpringMVC实现了零配置,由于SpringMVC基于方法的拦截,有加载一次单例模式bean注入。所以,SpringMVC开发效率和性能高于Struts2。配置方面: spring MVC和Spring是无缝的。从这个项目的管理和安全上也比Struts2高。

8.如何避免 sql 注入?

PreparedStatement(简单又有效的方法)、使用正则表达式过滤传入的参数、字符串过滤、检查是否包函非法字符、页面判断代码。
设计模式(1)说一下你熟悉的设计模式?
(1)简单工厂和抽象工厂有什么区别?区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

猜你喜欢

转载自blog.csdn.net/qq_39213969/article/details/89040537