目录
❄️JSP 和 Servlet 有什么区别?
第一种回答:
- jsp经编译后就变成了servlet。(jsp的本质就是servlet,JVM只能识别java的类,不能识别jsp的代码,Web容器将jsp的代码编译成JVM能够识别的java类)
- jsp更擅长表现于页面显示,servlet更擅长于逻辑控制。
- servlet没有内置对象,通过HttpServletRequest、HttpServletResponse以及HttpServlet得到。
- jsp是servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,jsp中的Java脚本如何镶嵌到一个类中,由jsp容器完成。
- servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。
第二种回答:
JSP 是 servlet 技术的扩展,本质上就是 servlet 的简易方式。servlet 和 JSP 最主要的不同点在于,servlet 的应用逻辑是在 Java 文件中,并且完全从表示层中的 html 里分离开来,而 JSP 的情况是 Java 和 html 可以组合成一个扩展名为 JSP 的文件。JSP 侧重于视图,servlet 主要用于控制逻辑。
❄️JSP内置对象
- request:封装客户端的请求,其中包含来自GET或POST请求的参数;
- response:封装服务器对客户端的响应;
- pageContext:通过该对象可以获取其他对象;
- session:封装用户会话的对象;
- application:封装服务器运行环境的对象;
- out:输出服务器响应的输出流对象;
- config:Web应用的配置对象;
- page:JSP页面本身(相当于Java程序中的this);
- exception:封装页面抛出异常的对象。
❄️JSP四大作用域
- page代表与一个页面相关的对象和属性。
- request代表与Web客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个Web组件;需要在页面显示的临时数据可以置于此作用域。
- session代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的session中。
- application代表与整个Web应用程序相关的对象和属性,它实质上是跨越整个Web应用程序,包括多个页面、请求和会话的一个全局作用域。
❄️session 和 cookie 有什么区别?
- 存储位置不同:session 存储在服务器端;cookie 存储在浏览器端。
- 安全性不同:cookie 安全性一般,在浏览器存储,可以被伪造和修改。
- 容量和个数限制:cookie 有容量限制,每个站点下的 cookie 也有个数限制。
- 存储的多样性:session 可以存储在 Redis 中、数据库中、应用程序中;而 cookie 只能存储在浏览器中。
Cookie(会员卡)是web服务器发送给浏览器的一块信息,浏览器会在本地一个文件中给每个web服务器存储Cookie。以后浏览器再给特定的web服务器发送请求时,同时会发送所有为该服务器存储的Cookie。
Session(银行保险箱)是存储在web服务器端的一块信息。Session对象存储特定用户会话所需的属性及配置信息。当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
❄️session 和 cookie 的不同点?
无论客户端做怎样的设置,Session都能够正常工作。当客户端禁用Cookie时将无法使用Cookie。
在存储的数据量方面:Session能够存储任意的java对象,Cookie只能存储String类型的对象。
❄️说一下 session 的工作原理?
第一种回答:
session是一个存在服务器上的类似于一个散列表格的文件。里面存有我们需要的信息,在我们需要用的时候可以从里面取出来。类似于一个大号的map吧,里面的键存储的是用户的sessionid,用户向服务器发送请求的时候会带上这个sessionid。这时就可以从中取出对应的值了。
第二种回答:
session 的工作原理是客户端登录完成之后,服务器会创建对应的 session,session 创建完之后,会把 session 的 id 发送给客户端,客户端再存储到浏览器中。这样客户端每次访问服务器时,都会带着 sessionid,服务器拿到 sessionid 之后,在内存找到与之对应的 session 这样就可以正常工作了。
❄️在单点登录中,如果cookie被禁用了怎么办?
单点登录的原理是后端生成一个sessionID,然后设置到cookie,后面的所有请求浏览器都会带上cookie,然后服务端从cookie里获取sessionID,再查询到用户信息。所以,保持登录的关键不是cookie,而是通过cookie保存和传输的sessionID,其本质是能获取用户信息的数据。除了cookie,还通常使用HTTP请求头来传输。但是这个请求头浏览器不会像cookie一样自动携带,需要手工处理。
- 设置php.ini配置文件中的“session.use_trans_sid = 1”,或者编译时打开打开了“–enable-trans-sid”选项,让PHP自动跨页传递Session ID。
- 手动通过URL传值、隐藏表单传递Session ID。
- 用文件、数据库等形式保存Session ID,在跨页过程中手动调用。
❄️说下原生JDBC操作数据库流程?
- 第一步:Class.forName()加载数据库连接驱动;
- 第二步:DriverManager.getConnection()获取数据连接对象;
- 第三步:根据SQL获取sql会话对象,有2种方式 Statement、PreparedStatement ;
- 第四步:执行SQL,执行SQL前如果有参数值就设置参数值setXXX();
- 第五步:处理结果集;
- 第六步:关闭结果集、关闭会话、关闭连接。
❄️为什么要使用PreparedStatement?
PreparedStatement接口继承Statement,PreparedStatement实例包含已编译的SQL语句,所以其执行速度要快于Statement对象。
作为Statement的子类, PreparedStatement 继承了Statement的所有功能。三种方法execute、 executeQuery和executeUpdate已被更改以使之不再需要参数。
在 JDBC 应用中,多数情况下使用PreparedStatement,原因如下:
- 代码的可读性和可维护性。Statement需要不断地拼接,而PreparedStatement不会。
- PreparedStatement尽最大可能提高性能。DB有缓存机制,相同的预编译语句再次被调用不会再次需要编译。
- 最重要的一点是极大地提高了安全性。Statement容易被SQL注入,而PreparedStatement传入的内容不会和sql 语句发生任何匹配关系。
❄️http的长连接和短连接区别?
HTTP协议有HTTP/1.0版本和HTTP/1.1版本
- HTTP1.1默认保持长连接(HTTP persistent connection,也翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包、不四次握手),等待在同域名下继续用这个通道传输数据;相反的就是短连接。
- 在 HTTP/1.0 中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。从HTTP/1.1起,默认使用的是长连接,用以保持连接特性。
❄️http常见的状态码有哪些?
- 200 OK 客户端请求成功
- 301 Moved Permanently 请求的URL已移走。Response中应该包含一个 Location URL,说明资源现在所处的位置
- 302 found 重定向
- 400 Bad Request 客户端请求有语法错误,不能被服务器所理解
- 401 Unauthorized 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
- 403 Forbidden 服务器收到请求,但是拒绝提供服务
- 404 Not Found 请求资源不存在,eg:输入了错误的URL
- 500 Internal Server Error 服务器发生不可预期的错误
- 503 Server Unavailable 服务器当前不能处理客户端的请求,一段时间后可能恢复正常
❄️http中重定向和请求转发的区别?
本质区别:转发是服务器行为,重定向是客户端行为。
重定向特点:两次请求,浏览器地址发生变化,可以访问自己web之外的资源,传输的数据会丢失。
请求转发特点:一次强求,浏览器地址不变,访问的是自己本身的web资源,传输的数据不会丢失。
❄️GET和POST的区别?
1、数据传输
- GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,如:login.action?name=laptoy&password=123456
- POST 把提交的数据则放置在是HTTP包的包体中。
2、数据限制
- GET方式提交的数据最多只能是1024字节,理论上POST没有限制,可传较大量的数据。其实这样说是错误的,不准确的:“GET方式提交的数据最多只能是1024字节",因为 GET 是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了。而实际上,URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。
3、安全性
-
POST的安全性要比GET的安全性高。注意:这里所说的安全性和上面 GET 提到的“安全”不是同个概念。上面“安全”的含义仅仅是不作数据修改,而这里安全的含义是真正的 Security的含义,比如:通过GET 提交数据,用户名和密码将明文出现在URL上,因为登录页面有可能被浏览器缓存,其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用 GET 提交数据还可能会造成Cross-site request forgery攻击。
-
Get 是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求,在FORM(表单)中,Method默认为"GET",实质上GET和POST只是发送机制不同,并不是一个取一个发。