java面试题之javaweb篇1
1、说一说Servlet的生命周期?
首先执行init方法:
初次在tomcat服务器访问该servlet的时候会创建实例,并且一个servlet只会实例化一次,故init方法也只执行一次
再执行service方法:
客户端每发出一次请求就会执行一次,没有次数上限
最后执行destroy方法
当将项目从tomcat中移除时,或正常关闭tomcat服务器(即执行shutdown.bat)时会执行
2、Servlet API中forward()与redirect()的区别?
请求转发(forword):
地址栏上显示的是请求servlet的地址
请求次数只有一次,服务器内部帮助客户端执行了后续工作;也正是因为只请求了一次,效率更高,并且request对象没有改变,还可以使用上一次request对象中的数据
只能跳转到当前项目下的资源路径
重定向(redirect):
地址栏上显示的是目标文件的路径地址
请求次数至少两次,客户端在发起一次请求后,服务器会返回文件的地址信息;再由客户端发出请求,根据服务器给的地址执行下一次访问;由于发出不止一次的请求,效率更低,request对象也发生了改变,不能使用上一次request对象中保存的数据
可以跳转到任意路径
3、request.getAttribute()和 request.getParameter()有何区别?
getAttribute表示从request范围取得设置的属性,必须要先setAttribute设置属性,才能通过getAttribute来取得,设置与取得的为Object对象类型
getParameter表示接收参数,参数为页面提交的参数,包括:表单提交的参数、URL重写(就是xxx?id=1中的id)传的参数等,因此这个并没有设置参数的方法(没有setParameter),而且接收参数返回的不是Object,而是String类型
4,jsp静态包含和动态包含的区别
声明格式不同:
静态包含:<%@ include file="文件" %>,而动态包含:<jsp : include page = "文件" />。
编译成java文件的数量不同:
静态包含会做一个整体编译,最终只有一个java文件
动态包含是各个jsp文件分别转换,分别编译。最终编程成多个java文件
执行时间不同
静态包含发生在:JSP---->java文件阶段。
动态包含发生在:执行class文件阶段。动态加入。
5,MVC的各个部分都有那些技术来实现?如何实现?
Model(模型层):主要实现对数据的封装和处理,并完成业务逻辑;JavaBean、mybatis,hibernate来实现
View(视图层):是与人进行交互的页面;JSP、SpringMVC页面实现
Controller(控制层):接受请求,调用Model层处理数据,反馈给View层;Servlet实现
6,jsp有哪些内置对象?作用分别是什么?
HttpServletRequet类的Request对象:代表请求对象,主要用于接受客户端通过HTTP协议连接传输服务器端的数据。
HttpSevletResponse类的Response对象:代表响应对象,主要用于向客户端发送数据。
JspWriter类的out对象:主要用于向客户端输出数据,out的基类是jspWriter
HttpSession类的session对象:主要用来分别保存每个月的信息与请求关联的会话;会话状态的维持是web应用开发者必须面对的问题。
ServletContext类的application对象:主要用于保存用户信息,代码片段的运行环境;它是一个共享的内置对象,即一个容器中的多个用户共享一个application,故其保存的信息被所有用户所共享。
PageContext类的PageContext对象:管理网页属性,为jsp页面包装页面的上下文,管理对属于jsp的特殊可见部分中已经命名对象的访问,它的创建和初始化都是由容器来完成的。
ServletConfig类的Config对象:代码片段配置对象,标识Servlet的配置。
Object类的Page对象,处理jsp页面,是object类的一个实例,指的是jsp实现类的实例
Exception对象:处理jsp文件执行时发生的错误和异常,只有在错误页面里才使用,前提是在页面指令里要有isErrorPage=true。
7,Http中,get和post方法的区别
请求路径不同:
post请求在url后面不跟任何数据;get请求在地址后面跟上数据
带上的数据不同:
post请求会使用流的方式写数据,所以数据没有大小限制;get是在地址上跟数据,数据最大只能1kb
post一定需要一个Content-Length的头来说明数据的长度有多少
8,什么是cookie?Session和cookie有什么区别?
Cookie就是一份小数据,是服务器给客户端的,并且储存在客户端上的数据
session和cookie的区别:
首先,session是基于cookie的一种会话机制
session将数据存放在服务器端,更安全;cookie将数据存放在客户端,有安全隐患。
cookie的大小和数量是有限制的,而session没有
session 能够存储任意的 java 对象,cookie 只能存储 String 类型的对象
9,jsp和servlet的区别、共同点、各自应用的范围?
jsp文件的本质就是servlet,它最终会被web服务器转换为servlet并加载运行;而servlet实际上就是一个java类。
二者的区别在于:jsp侧重于视图,而servlet侧重于控制逻辑
10,tomcat容器是如何创建servlet类实例?用到了什么原理?
当容器启动时,会读取在 webapps 目录下所有的 web 应用中的 web.xml 文 件,然后对 xml 文件进行解析,并读取 servlet 注册信息。然后,将每个应用中注册的 servlet 类都进行加载, 并通过反射的方式实例化。(有时候也是在第一次请求时实例化)在 servlet 注册时加上如果为正数,则在 一开始就实例化,如果不写或为负数,则第一次请求实例化。