Servlet、JSP和Tomcat

Servlet、JSP和Tomcat

Servlet(Server Applet)(控制层)

全称Java Servlet,未有中文译文。是用Java编写的服务器端程序
狭义地说是javax.servlet.GenericServlet接口
由于和HTTP协议在Web服务器中的统治地位,从接口的角度通常说的是javax.servlet.HTTPServlet接口
广义地说是实现了javax.servlet.HTTPServlet接口的实现类,这个定义就是常说的Servlet
Servlet的作用是响应HTTP请求,动态生成所需要的Web页面
可以说有了Servlet,就有了J2EE架构,有了各种开发框架,它是后面这些的模型和基础。

Tomcat

常用的Java应用服务器,含有Servlet容器

JSP(视图层)

Java服务器页面(JSP)是HttpServlet的扩展,含有HTML元素和少量的JAVA代码
JSP可以理解为生成动态Web页面的模板,通过固定的HTML元素和java程序控制生成需要的页面
JSP的目的是将前端页面生成逻辑和HTTP请求响应处理逻辑分开
和Velocity的vm模板处于同一位置
JSP是对Servlet的提炼,纯Servlet编写业务逻辑,在生成页面时会非常复杂,基本同于一个编译后的jsp类
Servlet、JSP和Tomcat

其HTTP请求响应控制和页面的生成逻辑是放在一起的,非常不便于开发维护
而通过jsp规范和jsp引擎(如Tomcat),开发人员可以只关注页面的布局和用java编写少量脚步
通过编写jsp页面、对于的Servlet处理HTTP请求以及在Web.xml进行绑定,就可以生成复杂的页面,
Servlet、JSP和Tomcat

jsp引擎、jsp容器、Servlet容器这里都指的是Tomcat,负责jsp和Servlet的生成、调用和销毁

Servlet生命周期

当用户对某个Servlet发起第一次访问时,Servlet容器会用inti()方法对Servlet进行实例和初始化
或者在Web.xml中配置了该Servlet在服务器启动时加载
然后这个Servlet就加载到容器中,之后Servlet调用将生成新线程,调用Service()方法
service方法作为一个入口方法,会在适当时候调用doGet和doPost方法做具体的操作
jvm垃圾回收时,调用destroy方法销毁实例

Servlet重要接口

参考 http://www.oschina.net/question/12_52027
Servlet的主要接口都从javax.servlet.HTTPServlet中来,最重要的包括:
HttpServlet
ServetConfig
ServletContext
Filter
FilterConfig
FilterChain
RequestDispatcher
HttpServletRequest
HttpServletResponse
HttpSession
一些 Listenser 类
HttpServletRequest和HttpServletResponse
封装了HTTP接口,用于获取HTTP请求和响应的所有信息
HttpSession
用于验证同一用户的多次HTTP访问
实现机制是Servlet容器生成一个Hash表,存放SessionId和对应用户
当用户第一次登录时,服务器生成一个jsessionid返回客户端,作为cookie值
Servlet、JSP和Tomcat

之后访问服务器都带上这个cookie值,就能让服务器知道是这个用户发起的请求而通过验证
当浏览器关闭后,这个session也就关闭,sessionid也被删除。
Filter
用于对特定的HTTP请求进行过滤处理,主要包含init/doFilter/destroy方法
需要编写Filter实现类,并在Web.xml中定义过滤器信息
在Servlet容器启动时加载,运行init方法进行初始化,doFilter完成过滤处理,destroy在容器关闭时执行

Servlet get和post

Servlet处理HTTP请求一般是get和post两种方式
get
默认方式,在url上通过?占位符接参数进行请求,如
http://localhost:8080/test1/loginServlet?username=123&password=1
这种方式对参数不加密,对?之后的请求字符串长度限制在1KB,适合获取资源,不适合登录鉴权
Servlet、JSP和Tomcat

Post
将请求字符串作为单独的消息传输到后台程序
Servlet、JSP和Tomcat

JSP生命周期

jsp编译、Servlet加载、servlet执行、servlet销毁,后三个步骤与Servlet生命周期是相同的
jsp编译
当浏览器请求JSP页面时,JSP引擎会进行Servlet编译检查
如果不存在对应Servlet类或存在的Servlet类的修改时间晚于jsp文件,则进行编译
编译的过程包括三个步骤:
解析JSP文件。
将JSP文件转为servlet.java
编译servlet为class文件

JSP语法

脚本:<% %>
声明:<%! %>
表达式:<%= %>(无分号)
注释:<%-- --%>
所有的HTML文本元素必须在jsp语句外