Java面试合集(Web篇)
1.讲一下http get和post请求的区别?
- 共同点:都是http请求,用来操作url的
get和post都是http的请求方式,用户可以通过不同的http请求方式来完成对资源(url)的操作,get,post,put,delete就对应着对这个资源的查,改,增,删 4个操作。具体点来讲get一般用于获取/查询资源信息,而post一般用于更新资源信息 - 不同点:
- 1)Get请求提交的数据会在地址栏显示出来,而post请求不会在地址栏显示出来
get请求的数据会附在url之后(就是把数据放置在HTTP协议头中),以?分割url和传输数据,多个参数用&链接
post请求是把数据放置在Http包的包体中 - 2)传输数据的大小
由于浏览器对地址栏长度的限制而导致get请求传输属于有限,而post不会因为地址长度限制而导致传输数据限制。 - 3)安全性:post比get安全
由于get请求会在地址栏展示传输的信息,所以会不安全
2.说一下你对Servlet的理解?或者Servlet是什么?
Servlet(Server Applet),全程Java Servlet,是用Java编写的服务器端程序,而这些Servlet都要实现Servlet这个接口,其主要的功能就是用于交互式的浏览和修改数据,生成动态Web内容, Servlet运行于支持Java的应用服务器中。
实现HttpServlet接口并重写doGet和doPost方法或者你也可以重写service方法完成对get和post请求的响应
3.Servlet的生命周期
Servlet有良好的生存期的定义,包括:加载、实例化、初始化、处理请求以及服务结束。
它的生命周期是由java.servlet.Servlet接口的init,service和destory方法表达。
Servlet启动时,开始记载servlet生命周期开始,Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,服务器关闭时销毁,调用destory方法。
加载Servlet的class—>实例化Servlet—>调用Servlet的init完成初始化—>响应请求(Serlet的service方法)—>Servlet容器关闭时销毁(Servlet的destory方法)
4.Servlet API中forward()与redirect()的区别?
- 1)forward是服务器端的转向,而redirect是客户端的跳转
- 2)使用forward浏览器地址栏不会变,而redirect会变
- 3)forward是一次请求中完成,而redirect是重新发起请求
- 4)forward实在服务器中完成,而不用客户端重新发起请求,效率比较高
5.JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
- JSP和Servlet的联系:
JSP是Servlet的一种扩展,所有的JSP继承HttpJspBase(Tomcat自己实现的),而HttpJspBase又继承了HttpServlet,所有的JSP文件都会被翻译为一个继承HttpServlet的类,那么说明JSP本质上就是一个特殊的Servlet - Servlet和JSP的不同点:
Servlet的应用逻辑都在Java类中,并完全从表示层中的HTML里分离来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件 。JSP侧重于视图,Servlet主要控制逻辑。
Servlet要是实现Html的标签,必须要使用Writer输出对应的Html,而JSP要想加入Java代码直接使用<% %>
就可以了
6.JSP的内置对象?作用分别是什么?
9大内置对象:
- out对象:用于向客户端、浏览器输出数据。
- request对象:封装了来自客户端、浏览器的各种信息。
- response对象:封装了服务器的响应信息。
- exception对象:封装了jsp程序执行过程中发生的异常和错误信息。
- config对象:封装了应用程序的配置信息。
- page对象:指向了当前jsp程序本身。
- session对象:用来保存会话信息。也就是说,可以实现在同一用户的不同请求之间共享数
- application对象:代表了当前应用程序的上下文。可以在不同的用户之间共享信息。
- pageContext对象:提供了对jsp页面所有对象以及命名空间的访问。
四大作用域:
- page(pageContext):只在一个页面中保存属性。 跳转之后无效。
- request:只在一次请求中有效,服务器跳转之后有效。 客户端跳无效
- session:再一次会话中有效。服务器跳转、客户端跳转都有效。 网页关闭重新打开无效
- application:在整个服务器上保存,所有用户都可使用。 重启服务器后无效
JSP传值:
request,session,application,cookie
6.Session和Cookie的区别,你在项目中都有哪些地方使用了?
联系/相同点:
- Session和Cookie都是会话跟踪技术。
- Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
- 但是Session的实现依赖于Cookie,sessionId(session的唯一标识需要存放在客户端)
Session和Cookie的区别:
- 1)Cookie数存放在客户端,Session数据存放在服务端
- 2)Cookie不是很安全,别人可以分析存放在本地的Cookie并进行Cookie欺骗,考虑到安全应当使用Session
- 3)Session会在一定时间内保存在服务器上,当访问量增多,会占用服务器的性能,考虑到服务器性能,应当使用Cookie
- 4)单个Cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个Cookie
总结:
将登陆信息等重要的信息放在Session中,其他的信息可以放在Cookie中
(比如购物车的实现最好使用Cookie,但是Cookie是可以在客户端禁用的,这时候我们可以使用Cookie+数据库的方式实现,当从Cookie中不能取出数据时,就从数据库中获取)
7.MVC的各个部分都有哪些技术来实现
Model 模型:JavaBean
View 视图:html,jsp,freemaker
Controller 控制器:servlet
- model1: jsp+service+dao
优点:架构简单,比较适合小型项目的开发
缺点:JSP指责不单一,不利于维护 - model2: jsp+servlet+service+dao,最经典的mvc模式,就是把视图和逻辑分来
1.用户发送请求
2.Serlet接受请求数据,并调用对应的业务逻辑方法
3.业务处理完毕,返回更新后的数据给Servlet
4.Serblet转向JSP,由JSP来渲染页面
5.JSP响应给前端更新后的页面
- 职责分析:
- Controller:控制器
1.取得表单数据
2.调用业务逻辑
3.转向指定的页面 - Model:模型
1.业务逻辑
2.保存数据的状态 - View:视图
1.显示页面
- springmvc: jsp+核心控制器+action+javabean