- 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方法用于生成对客户端的响应。 - JSP 有哪些内置对象?作用分别是什么?
request:封装客户端的请求,其中包含来自GET或POST请求的参数;
response:封装服务器对客户端的响应;
pageContext:通过该对象可以获取其他对象;
session:封装用户会话的对象;
application:封装服务器运行环境的对象;
out:输出服务器响应的输出流对象;
config:Web应用的配置对象;
page:JSP页面本身(相当于Java程序中的this);
exception:封装页面抛出异常的对象。 - 说一下 JSP 的 4 种作用域?
page代表与一个页面相关的对象和属性。
request代表与Web客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个Web组件;需要在页面显示的临时数据可以置于此作用域。
session代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的session中。
application代表与整个Web应用程序相关的对象和属性,它实质上是跨越整个Web应用程序,包括多个页面、请求和会话的一个全局作用域。 - Session 和 Cookie 有什么区别?
1.存储数据方面:session能够存储任意的java对象,cookie只能存储String类型的文本
2.一个在客户端一个在服务端。因为cookie在客户端所以可以编辑伪造,不是十分安全
3.session过多时会消耗服务器资源,大型网站会有专门session服务器,cookie存在客户端没问题
4.域的范围不一样,要想使用可以通过jsonp或者跨域资源共享 - 说一下 Session 的工作原理?
其实session是一个存在服务器上的类似于一个散列表格的文件。里面存有我们需要的信息,在我们需要用的时候可以从里面取出来。类似于一个大号的map吧,里面的键存储的是用户的sessionid,用户向服务器发送请求的时候会带上这个sessionid。这时就可以从中取出对应的值了。 - 如果客户端禁止 Cookie 能实现 Session 还能用吗?
Cookie与 Session,一般认为是两个独立的东西,Session采用的是在服务器端保持状态的方案,而Cookie采用的是在客户端保持状态的方案。但为什么禁用Cookie就不能得到Session呢?因为Session是用Session ID来确定当前对话所对应的服务器Session,而Session ID是通过Cookie来传递的,禁用Cookie相当于失去了Session ID,也就得不到Session了。
假定用户关闭Cookie的情况下使用Session,其实现途径有以下几种:
设置php.ini配置文件中的“session.use_trans_sid = 1”,或者编译时打开打开了“–enable-trans-sid”选项,让PHP自动跨页传递Session ID。
手动通过URL传值、隐藏表单传递Session ID。
用文件、数据库等形式保存Session ID,在跨页过程中手动调用。 - Spring MVC 和 Struts 的区别是什么?
一。框架机制
1.struts2采用filter实现,sprintmvc采用servlet实现
2.filter在容器启动之后即初始化,服务停止后销毁,晚于servlet;servlet是在调用时初始化,先于filter调用,服务停止后销毁
二。拦截机制
a1struts2框架是类级别拦截,每次请求会创建一个action,和spring整合时struts2的actionBean注入作用域是原型模式prototype,然后通过setter,getter把request数据注入到属性
b1struts2中一个action对应一个request,response上下文,在接收参数时,可以通过属性接受,属性参数是让多个方法共享的
c1struts2中的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了
a2 、 SpringMVC 是方法级别的拦截,一个方法对应一个 Request 上下文,所以方法直接基本上是独立的,独享 request , response 数据。而每个方法同时又和一个 url 对应,参数的传递是直接注入到方法中的,是方法所独有的。处理结果通过 ModeMap 返回给框架。
b2 、在 Spring 整合时, SpringMVC 的 Controller Bean 默认单例模式 Singleton ,所以默认对所有的请求,只会创建一个 Controller ,有应为没有共享的属性,所以是线程安全的,如果要改变默认的作用域,需要添加@Scope 注解修改。
三、性能方面
SpringMVC 实现了零配置,由于 SpringMVC 基于方法的拦截,有加载一次单例模式 bean 注入。而 Struts2 是类级别的拦截,每次请求对应实例一个新的 Action ,需要加载所有的属性值注入,所以, SpringMVC 开发效率和性能高于 Struts2 。
四、拦截机制
Struts2 有自己的拦截 Interceptor 机制, SpringMVC 用的是独立的 Aop 方式,这样导致 Struts2 的配置文件量还是比 SpringMVC 大。
五、配置方面
spring MVC 和 Spring 是无缝的。从这个项目的管理和安全上也比 Struts2 高,SpringMVC 可以认为已经 100% 零配置。
六、设计思想
Struts2 更加符合 OOP 的编程思想, SpringMVC 就比较谨慎,在 servlet 上扩展。
七、集成方面
SpringMVC 集成了 Ajax ,使用非常方便,只需一个注解 @ResponseBody 就可以实现,然后直接返回响应文本即可,而 Struts2 拦截器集成了 Ajax ,在 Action 中处理时一般必须安装插件或者自己写代码集成进去,使用起来也相对不方便。 - 如何避免 SQL 注入?
PreparedStatement(简单又有效的方法)
使用正则表达式过滤传入的参数
字符串过滤
JSP中调用该函数检查是否包函非法字符
JSP页面判断代码 - 什么是 XSS 攻击,如何避免?
XSS攻击又称CSS,全称Cross Site Script (跨站脚本攻击),其原理是攻击者向有XSS漏洞的网站中输入恶意的 HTML 代码,当用户浏览该网站时,这段 HTML 代码会自动执行,从而达到攻击的目的。XSS 攻击类似于 SQL 注入攻击,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意脚本,实现对用户游览器的控制,获取用户的一些信息。 XSS是 Web 程序中常见的漏洞,XSS 属于被动式且用于客户端的攻击方式。
XSS防范的总体思路是:对输入(和URL参数)进行过滤,对输出进行编码。 - 什么是 CSRF 攻击,如何避免?
CSRF(Cross-site request forgery)也被称为 one-click attack或者 session riding,中文全称是叫跨站请求伪造。一般来说,攻击者通过伪造用户的浏览器的请求,向访问一个用户自己曾经认证访问过的网站发送出去,使目标网站接收并误以为是用户的真实操作而去执行命令。常用于盗取账号、转账、发送虚假消息等。攻击者利用网站对请求的验证漏洞而实现这样的攻击行为,网站能够确认请求来源于用户的浏览器,却不能验证请求是否源于用户的真实意愿下的操作行为
关于Java208面试题答案Java Web
猜你喜欢
转载自blog.csdn.net/weixin_44100313/article/details/89848723
今日推荐
周排行