JSP相当于在HTML页面中加上Java代码,一般在<body>标签中放入主要代码。 在JSP里用<%...%>把Java代码包含起来的。
Servlet的生命周期:
①被服务器实例化后,容器运行init方法。
②当请求(Request)到达时,运行service方法,service方法会运行与请求对应的doXXX方法(doGet,doPost)等。
③当服务器决定将实例销毁时,调用destroy方法。
问:当多个请求同时到达时,会启动一个还是多个Servlet来接收请求?
Servlet是“单实例多线程”。
①可以有多个Servlet来处理一个业务请求。
②对于同一业务请求只有一个实例,加载时会调用各自的init方法。
③同一个Servlet可以同时处理多个客户端的请求。
问:Servlet是线程安全的吗?如何保证线程安全?
(1)在Servlet里负责保存上下文的ServletContext和负责处理Session对象的HttpSession是线程不安全的。处理请求的ServletRequest是线程安全的。
(2)保证线程安全的做法:①SingleThreadModel接口(已弃用)②在Servlet中使用局部变量,保证有单属于本Servlet的对象。③加锁,形成互斥访问。(很少用到)④用synchronized加以保护,但要尽量缩小保护的范围。
JavaBean的特征:
(1)JavaBean类必须具备一个没有参数的构造函数。
(2)JavaBean内的属性都应定义为私有的,这些属性通过get和set方法被外部调用。
MVC架构的工作流程:
View发起请求,请求被Controller转发给合适的处理程序,Model接收请求后,调用DAO层,得到结果返回给View。
问:Java Servlet中forward和redirect有何区别?
在设计Web应用时,需要把一个系统进行结构化设计,即按照模块化进行划分,让不同的Servlet实现不同的功能。
例如让其中一个Servlet负责接收用户的请求,另一个Servlet负责处理用户的请求。
为了实现这种程序的模块化,就需要保证在不同的Servlet之间可以相互跳转,而Servlet中主要有两种跳转的方式:forward方式和redirect方式。forward:服务器内部的重定向,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,而客户端并不知道,因此在客户端的地址栏中不会显示转向后的地址,还是原来的地址。redirect:客户端的重定向,是完全的跳转,即客户端浏览器会获取到跳转后的地址,然后重新发送请求,因此浏览器中显示跳转后的地址。
同时,这种方式比forward方式多了一次网络请求,因此效率要低于forward方式。
问:Servlet有哪些方法可以实现页面的跳转?
在web应用服务中,经常会面对不同SERVLET之间的跳转,目前我们可以通过以下两种方式实现:
1.RequestDispatcher.forward()
2.ServletResponse.sendRedirect()
问:GET和POST的区别
GET产生一个TCP数据包,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
POST产生两个TCP数据包,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。GET在浏览器回退时是无害的,POST会再次提交请求。GET请求会被浏览器主动cache,而POST不会,除非手动设置。GET请求只能进行url编码,而POST支持多种编码方式。GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。GET只接受ASCII字符的参数的数据类型,而POST没有限制
Servlet生命周期:
①首先加载servlet的class,实例化servlet。
②然后初始化servlet调用init()的方法,接着调用服务的service的方法处理doGet和doPost方法。
③最后是我的还有容器关闭时候调用destroy 销毁方法。