关于JavaWeb的笔试面试题(三)

本文深入探讨了JSP与Servlet的关系及其应用场景,讲解了MVC模式的实现方式,并对比了Cookie与Session的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.页面间对象传递的方法?

requestsessionapplicationcookie

2.JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?(重要)

1.jsp经编译后就变成了servlet(jsp本质就是servlet,jvm只能识别java的类,不能识别jsp代码,web容器将jsp的代码编译成jvm能够识别的java)

2.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制

3.setvlet中没有内置对象,jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象及HttpServlet对象得到

4.jspservlet的一种简化,使用jsp只需要完成程序员需用输出到客户端的内容,jsp中的java脚本如何镶嵌到一个类中,由jsp容器完成,而servlet则是个完整的java类,这个类的service方法用于生成对客户端的响应

Tomcat会把Jsp文件转为servlet文件再转化为.class文件

3.MVC各个部分都有哪些技术实现?如何实现?

MVC主要是为了解决应用程序用户界面的样式替换问题,把展示数据的 HTML 页面尽可能的和业务代码分离。MVC把纯净的界面展示逻辑(用户界面)独立到一些文件中(Views),把一些和用户交互的程序逻辑(Controller)单独放在一些文件中,在 Views Controller 中传递数据使用一些专门封装数据的实体对象,这些对象,统称为Models

MVC模式的目的就是实现Web系统的职能分工。
Model层实现系统中的业务逻辑,通常可以用JavaBeanEJB来实现。
View层用于与用户的交互,通常用JSP来实现。

Controller层是ModelView之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作

Mhibernatemybatisibatis
Cseverletstrutsspringaction
VjspFreeMarkertailstaglibELVelocity

4.JSP的四种范围?

application
全局作用范围,整个应用程序共享,就是在部署文件中的同一个webApp共享,生命周期为:应用程序启动到停止。

session
会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。生命周期:会话超时,或者服务器端强制使会话失效。

request

请求作用域,就是客户端的一次请求。

page:

一个JSP页面。

5.cookie和session的作用、区别(重要,文章写得很详细,但是回答的时候可以用自己的话进行简述)

Cookie详解:

1)简介

因为HTTP协议是无状态的,即服务器不知道用户上一次做了什么,这严重阻碍了交互式Web应用程序的实现。在典型的网上购物场景中,用户浏览了几个页面,买了一盒饼干和两饮料。最后结帐时,由于HTTP的无状态性,不通过额外的手段,服务器并不知道用户到底买了什么。为了做到这点,就需要使用到Cookie了。服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态。

Cookie(复数形态:Cookies),是指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。

Cookie是由服务端生成的,发送给客户端(通常是浏览器)的。Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie

内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。

硬盘Cookie保存在用户硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的。所以,按存在时间,可分为非持久Cookie和持久Cookie

2)工作原理

1、创建Cookie

当用户第一次浏览某个使用Cookie的网站时,该网站的服务器就进行如下工作:

①该用户生成一个唯一的识别码(Cookie id),创建一个Cookie对象;

②默认情况下它是一个会话级别的cookie,存储在浏览器的内存中,用户退出浏览器之后被删除。如果网站希望浏览器将该Cookie存储在磁盘上,则需要设置最大时效(maxAge),并给出一个以秒为单位的时间(将最大时效设为0则是命令浏览器删除该Cookie);

③将Cookie放入到HTTP响应报头,将Cookie插入到一个 Set-Cookie HTTP请求报头中。

④发送该HTTP响应报文。

2、设置存储Cookie

浏览器收到该响应报文之后,根据报文头里的Set-Cookied特殊的指示,生成相应的Cookie,保存在客户端。该Cookie里面记录着用户当前的信息。

3、发送Cookie

当用户再次访问该网站时,浏览器首先检查所有存储的Cookies,如果某个存在该网站的Cookie(即该Cookie所声明的作用范围大于等于将要请求的资源),则把该cookie附在请求资源的HTTP请求头上发送给服务器。

4、读取Cookie

 服务器接收到用户的HTTP请求报文之后,从报文头获取到该用户的Cookie,从里面找到所需要的东西。

3)作用

Cookie的根本作用就是在客户端存储用户访问网站的一些信息。典型的应用有:

1、记住密码,下次自动登录。

2、购物车功能。

3、记录用户浏览数据,进行商品(广告)推荐。

4)缺陷

Cookie会被附加在每个HTTP请求中,所以无形中增加了流量。

②由于在HTTP请求中的Cookie是明文传递的,所以安全性成问题。(除非用HTTPS

Cookie的大小限制在4KB左右。对于复杂的存储需求来说是不够用的。

Session详解:

1)简介

Session代表服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续的。Session是一种服务器端的机制,Session 对象用来存储特定用户会话所需的信息。

Session由服务端生成,保存在服务器的内存、缓存、硬盘或数据库中。

2)工作原理

1、创建Session

当用户访问到一个服务器,如果服务器启用Session,服务器就要为该用户创建一个SESSION,在创建这个SESSION的时候,服务器首先检查这个用户发来的请求里是否包含了一个SESSION ID,如果包含了一个SESSION ID则说明之前该用户已经登陆过并为此用户创建过SESSION,那服务器就按照这个SESSION ID把这个SESSION在服务器的内存中查找出来(如果查找不到,就有可能为他新创建一个),如果客户端请求里不包含有SESSION ID,则为该客户端创建一个SESSION并生成一个与此SESSION相关的SESSION ID。这个SESSION ID是唯一的、不重复的、不容易找到规律的字符串,这个SESSION ID将被在本次响应中返回到客户端保存,而保存这个SESSION ID的正是COOKIE,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。 

2、使用Session

我们知道在IE中,我们可以在工具的Internet选项中把Cookie禁止,那么会不会出现把客户端的Cookie禁止了,那么SESSIONID就无法再用了呢?找了一些资料说明,可以有其他机制在COOKIE被禁止时仍然能够把Session id传递回服务器。

经常被使用的一种技术叫做URL重写,就是把Session id直接附加在URL路径的后面一种是作为URL路径的附加信息,表现形式为: 

http://./xxx;jSession=ByOK3vjFD75aPnrF7C2ZcEbzWoWiBYEnLerjQ99zWpBng!-145788764 

另一种是作为查询字符串附加在URL后面,表现形式为: 

http://../xxx?jSession=ByOK3vjFD75aPnrF7C2ZcEbzWoWiBYEnLerjQ99zWpBng!-145788764; 

还有一种就是表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把Session id传递回服务器。

3)作用

Session的根本作用就是在服务端存储用户和服务器会话的一些信息。典型的应用有:

1、判断用户是否登录。

2、购物车功能。

区别:

1、存放位置不同

Cookie保存在客户端,Session保存在服务端。

2 、存取方式的不同

 Cookie中只能保管ASCII字符串,假如需求存取Unicode字符或者二进制数据,需求先进行编码。Cookie中也不能直接存取Java对象。若要存储略微复杂的信息,运用Cookie比较艰难的。 

Session中能够存取任何类型的数据,包括而不限于StringIntegerListMap等。Session中也能够直接保管Java Bean乃至任何Java类,对象等,运用起来十分便当。能够把Session看做是一个Java容器类。 

3、安全性(隐私策略)的不同 

Cookie存储在浏览器中,对客户端是可见的,客户端的一些程序可能会窥探、复制以至修正Cookie中的内容。而Session存储在服务器上,对客户端是透明的,不存在敏感信息泄露的风险。假如选用Cookie,比较好的方法是,敏感的信息如账号密码等尽量不要写到Cookie中。最好是像GoogleBaidu那样将Cookie信息加密,提交到服务器后再进行解密,保证Cookie中的信息只要本人能读得懂。而假如选择Session就省事多了,反正是放在服务器上,Session里任何隐私都能够有效的保护。 

4、有效期上的不同 

只需要设置Cookie的过期时间属性为一个很大很大的数字,Cookie就可以在浏览器保存很长时间。 由于Session依赖于名为JSESSIONIDCookie,而Cookie JSESSIONID的过期时间默许为–1,只需关闭了浏览器(一次会话结束),该Session就会失效。

5、对服务器造成的压力不同 

Session是保管在服务器端的,每个用户都会产生一个Session。假如并发访问的用户十分多,会产生十分多的Session,耗费大量的内存。而Cookie保管在客户端,不占用服务器资源。假如并发阅读的用户十分多,Cookie是很好的选择。

6 跨域支持上的不同 

Cookie支持跨域名访问,例如将domain属性设置为“.baidu.com”,则以“.baidu.com”为后缀的一切域名均能够访问该Cookie。跨域名Cookie如今被普遍用在网络中。而Session则不会支持跨域名访问。Session仅在他所在的域名内有效。

文章摘自:https://blog.youkuaiyun.com/guoweimelon/article/details/50886092

6.JSP页面是如何被执行的?JSP执行效率比Servlet低吗?面试题

当客户端向一个JSP页面发出请求时,Web 容器JSP转化成Servlet的源代码(只在第一次请求时),然后编译转化后的Servlet并加载到内存中执行,执行的结果Response到客户端。
JSP只在第一次执行的时候会转化为Servlet,以后每次执行Web容器都是直接执行编译后的Servlet,所以JSPServlet只是在第一次执行的时候不一样,JSP慢一点,以后的执行都是相同的。

7.EL表达式的功能,为什么要用EL表达式?

ELExpression Language) 是为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。----百度百科

为什么要用?(优点)

1.代码量小,并且不需要使用尖括号;

2.支持从pageContext,request,session,application中取值,它会自动检查四个作用域,不需要特别指定;

3.如果变量不存在,会输出空字符串"",而不是null,省去了手工判断的工作。

用法举例:

${sessionScope.user.sex}

所有EL都是以${为起始、以}为结尾的。上述EL范例的意思是:从Session的范围中,取得

用户的性别。假若依照之前JSP Scriptlet的写法如下:

User user =(User)session.getAttribute("user");

String sex =user.getSex( );

两者相比较之下,可以发现EL 的语法比传统JSP Scriptlet 更为方便、简洁。

EL表达式是配合JSTL使用的。需要引入JSTL标签库(<c:forEach items=""></c:forEach>,<c:if test=""></c:if>等属于jstl表达式)

<%@taglib uri=" jsp标签的命名空间 " prefix="c"%>

.[ ] 运算符

EL 提供 . [ ] 两种运算符来导航数据。下列两者所代表的意思是一样的:

${sessionScope.user.sex}等于${sessionScope.user["sex"]}

. [ ] 也可以同时混合使用,如下:

${sessionScope.shoppingCart[0].price}

回传结果为shoppingCart中第一项物品的价格。

8.什么是事务?重要

事务是逻辑上的一组操作,组成这组操作的各个单元要么全都成功,要么全都失败!

事物的四大特性:

原子性:不可分割。

一致性:事务执行前后,数据的完整性保持一致。

隔离性:一个事务执行的过程中不应该受到其他事务的干扰。

持久性:事务一旦结束,数据持久到数据库。

如果不考虑隔离性会引发:

脏读:一个事务读到另一个事务未提交的数据。

不可重复读:一个事务读到另一个事务已经提交的update数据,导致多次查询结果不一致。

虚读:一个事务读到另一个事务已经提交的insert数据,导致多次查询结果不一致。

 

javascript语言的特点:

一、简单性

JavaScript是一种基于Java基本语句和控制流之上的简单而紧凑的设计,从而对于学习Java是一种非常好的过渡。它的变量类型是采用弱类型,并未使用严格的数据类型。

二、动态性

JavaScript是动态的,它可以直接对用户或客户输入做出响应,无须经过Web服务程序。它对用户的反映响应,是采用以事件驱动的方式进行的。所谓事件驱动,就是指在主页(Home Page)中执行了某种操作所产生的动作,就称为“事件”(Event)。比如按下鼠标、移动窗口、选择菜单等都可以视为事件。当事件发生后,可能会引起相应的事件响应。

三、跨平台性

JavaScript是依赖于浏览器本身,与操作环境无关,只要能运行浏览器的计算机,并支持JavaScript的浏览器就可正确执行。从而实现了“编写一次,走遍天下”的梦想。

四、安全性

JavaScript是一种安全性语言,它不允许访问本地的硬盘,并不能将数据存入到服务器上,不允许对网络文档进行修改和删除,只能通过浏览器实现信息浏览或动态交互。从而有效地防止数据的丢失。

事务的实现方式:

实现方式共有两种:编码方式;声明式事务管理方式

基于AOP技术实现的声明式事务管理,实质就是:在方法执行前后进行拦截,然后再目标方法开始之前创建并加入事务,执行完目标方法后根据执行情况提交或回滚事务.

声明式事务管理又有两种实现方式:基于xml配置文件的方式;另一个实在业务方法上进行@Transaction注解,将事务规则应用到业务逻辑中

一种常见的事务管理配置:事务拦截器TransactionInterceptor和事务自动代理BeanNameAutoProxyCreator相结合的方式

SpringBean有两种基本行为

BeanSpring窗口的最基本单元

Bean有两种基本行为:Singleton单态;non-Singleton ProtoType原型

如果如non-Singleton行为时Spring只负责使用new关键字创建一个Bean实例,一旦创建后,容器不再负责Bean的实例状态和跟踪实例;

Web应用的控制器Bean配置成non-Singleton行为,因为每次HttpServletRequest请求都需要系统启动一个新的Action来处理用户请求;

如果Bean被设置成Singleton行为时,整个Spring容器里只有一个共享的实现存在,程序每次调用该ID时,容器都会返回该Bean的一个共享实例,该容器会负责跟踪Bean实例的状态和维护Bean实例的生命周期;

Bean的默认行为是Singleton

ajax工作原理:

    Ajax的工作原理相当于在用户和服务器之间加了—个中间层,使用户操作与服务器响应异步化。并不是所有的用户请求都提交给服务器,像—些数据验证和数据处理等都交给Ajax引擎自己来做, 只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求。

    Ajax其核心只有JavaScriptXMLHTTPRequestDOM,在旧的交互方式中,由用户触发一个HTTP请求到服务器,服务器对其进行处理后再返回一个新的HTHL页到客户端, 每当服务器处理客户端提交的请求时,客户都只能空闲等待,并且哪怕只是一次很小的交互、只需从服务器端得到很简单的一个数据,都要返回一个完整的HTML,而用户每次都要浪费时间和带宽去重新读取整个页面。而使用Ajax后用户从感觉上几乎所有的操作都会很快响应没有页面重载(白屏)的等待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值