Servlet的基础掌握
一、基本讲解
定义: Servlet是Java Servlet的简称,称为小服务程序或服务连接器,
用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态
Web内容。
1> 狭义的Servlet是指Java语言实现的一个接口;
2> 广义的Servlet是指任何实现了这个Servlet接口的类;
3> 一般情况下,人们将Servlet理解为广义。
4> Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可
以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP
协议的Web服务器。
5> 最早支持Servlet标准的是JavaSoft的Java Web Server,此后,
一些其它的基于Java的Web服务器开始支持标准的Servlet
ps:简而言之Servlet就是一种“请求--响应”的技术
二、生命周期
1) 定义: 所谓的生命周期是指一个东西的起效的整个过程。servlet的生命
周期即阐述Servlet从产生到毁灭的整个过程
2) 在Servlet产生到消亡的过程中,有三个生命周期函数:
2.1> init() : 初始化方法
在一个Servlet的生命周期中,init方法只会被执行一次,
之后无论用户执行多少次请求,都不会在调用该方法。
关于init方法的执行时机,有两种方式可选:
1>>一般的是在服务器启动后第一个用户请求该Servlet时调用
2>>也可以设置该Servlet在服务器启动后自动执行
使用场景: init()负责预加载一些数据,这些数据将用于该
Servlet的整个生命周期中
2.2> service() : 处理客户请求的方法
service方法
当一个客户请求该Servlet时,实际的处理工作全部由service方法
来完成,service方法用来处理客户端的请求,并生成格式化数据返回给客
户端
3.2> destroy() : 终止方法
该方法在整个生命周期中,也是只会被调用一次,在Servlet对象被
销毁时调用,在servlet中我们可以做一些资源的释放等操作,执行destory
方法之后的servlet对象,会等待jvm虚拟机的垃圾回收机制择时回收
使用场景:destory( )方法负责将一些需要释放的资源写在里面
ps: 当修改servlet中的内容的时候,就会触发destory()方法
三、Servlet与JSP的区别和关系
1) JSP执行之后的本质就是一个servlet
2) 因为使用场景不同,JSP更多偏重于页面展示,Servlet更多偏重于后台的
处理程序
3) JSP的执行效率/速度比Servlet慢
四、传参与转向
1) 传参方式 :
1> URL:
例: <a href="url">URL 传参</a>, js......,但是如果本次传递的
参数中有中文不建议使用
2> 通过form表单传参: 可以传递中文,也可以传递其他的
例: 英文字符串,日期
2) 转向:
request.getRequestDispatcher("/jsps/student/list_student.jsp")
.forward(request, response);
五、JSP页面获取路径的3种方式
1) <%=request.getContextPath();%>
2) 公共页面
1> 创建一个/jsps/commons/commons.jsp,且里面的内容为
<%
String path = request.getContextPath();
%>
2> 在需要用到的页面(login.jsp)引入这个公共页面:
<%@ include file="/jsps/commons/commons.jsp"%>
3> 将原理的方法1那种写法修改为:<%=path%>
3) 公共页面+<base>
1>将common.jsp中的内容修改为:
<%
String path = request.getContextPath();
String basePath =request.getScheme()+"://"+
request.getServerName()+":"+
request.getServerPort()+path+"/";
%>
2> 在需要用到的页面例如index.jsp中使用:
<base href="<%=basePath%>"> 且是写在<head>标签中的
3> 将原来写的<%=request.getContextPath();%>或者<%=path%>
删掉,然后调用即可如下所示
<a href="hello.do">查询</a>
PS:
第三种方法看似是最人性化的,但是IE浏览器对<base>标签支持的不是很
友好,故此在开发商业的项目的时候谨慎使用
第一种方法看似是最笨的,但是往往是最有效的,且用的也比较多
第二中方法可以看出在编写大型的项目时候才使用的