Servlet(一)
来源:互联网 发布:淘宝的支付方式有哪些 编辑:程序博客网 时间:2024/05/21 10:03
一、Servlet是什么
Servlet是服务端的applet,服务端的应用,servlet是由Web服务器加载和执行的,servlet从客户端(通过Web服务器)接收请求,执行某种作业,然后返回结果。
Servlet 架构
·Web服务器接收该请求并将其发给servlet。如果这个servlet尚未被加载,Web服务器将把它加载到Java虚拟机并且执行它。
·servlet将接收该HTTP请求并执行某种处理。
·servlet将向Web服务器返回应答。
·Web服务器将从servlet收到的应答发送给客户端。
由于servlet是在服务器上执行,通常与applet相关的安全性的问题并不需实现。要注意的是Web浏览器并不直接和Servlet通信,Servlet是由Web服务器加载和执行的。
二、Servlet的特点:
跨平台,java语言
可扩展,java语言
持久,只需Web服务器加载一次,而且可以在不同请求之间保持服务(例如一次数据库连接),
安全,从外界调用一个Servlet的唯一方法就是通过Web服务器
三、Servlet生命周期
Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:
Servlet 通过调用 init () 方法进行初始化。
Servlet 调用 service() 方法来处理客户端的请求。
Servlet 通过调用 destroy() 方法终止(结束)。
最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
服务器收到请求后检查是否加载创建Servlet对象,没有的话,加载创建,调用init()初始化,调用service() 处理客户端请求,在服务器停止和重启之前调用destory()。
Servlet没有main函数,由Servlet引擎来控制和调度,init只会被调用一次,并保存在内存中,每次有请求时创建一个线程,单一线程都会调用service方法,然后在根据情况调用doGet和doPost。destory方法执行一次,用来关闭 Servlet 数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。
四、通过实例来介绍一下Servlet工作原理
首先要配置开发环境 JDK+Eclipse+Tomcat http://www.runoob.com/jsp/eclipse-jsp.
首先新建一个项目Dynamic web project
项目目录结构
deployment descriptor:部署的描述。
src:java代码
build:放入编译之后的文件。WebContent:放进写入的页面。
WebContent:存放web.xml,也可以是jsp文件
新建Servlet继承HttpServlet,重写doGet和doPost
//@WebServlet("/MServlet")public class MServlet extends HttpServlet {private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public MServlet() { super(); // TODO Auto-generated constructor stub }/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubresponse.getWriter().write("ssssssss");}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}
在web.xml中配置
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <servlet> <servlet-name>test</servlet-name> <!-- 自定义name --> <servlet-class>com.demo.MServlet</servlet-class> <!--完整包名+类名--> </servlet> <servlet-mapping> <servlet-name>test</servlet-name> <!-- 同上 --> <url-pattern>/MServlet</url-pattern> <!--访问的url,去掉了上下文环境 --> </servlet-mapping></web-app>
在tomcat服务器中跑起来运行,Run As Server
还有一种方式设置访问的url
在java代码中设置,通过@WebServlet("/MServlet")
@WebServlet("/MServlet")public class MServlet extends HttpServlet{}
这样一个小demo就跑起来了
demo中servlet工作原理
一个http请求的过程
首先根据web.xml文件中的<url-pattern>找到对应的<servlet-mapping>
确定<servlet-mapping>中的<servlet-name>,根据<servlet-name>找到<servlet-class>,然后加载执行该class
Servlet可以被映射到多个url上
<servlet-mapping> <servlet-name>test</servlet-name> <!-- 同上 --> <url-pattern>/MServlet</url-pattern> <!-- 访问的url,去掉了上下文环境 --> </servlet-mapping> <servlet-mapping> <servlet-name>test</servlet-name> <!-- 同上 --> <url-pattern>/other/MServlet</url-pattern> <!-- 访问的url,去掉了上下文环境 --> </servlet-mapping>
url可以使用通配符,*.后缀 和 /开头/*结尾 ,如果url中只有一个/,那么这个url对应的Servlet为缺省的Servlet,当找不到匹配的url时,就会跳转到缺省Servlet
还可以设置<load-on-startup>来让web应用启动时就装载Servlet实例对象,并调用init方法
一篇不错的文章
http://www.cnblogs.com/rocomp/p/4808924.html
- servlet笔记(一)
- Servlet学习心得(一)
- servlet(一)
- Servlet程序设计(一)
- Servlet总结(一)
- servlet 笔记(一)
- 初识Servlet(一)
- Servlet简介(一)
- Servlet学习(一)
- Servlet介绍(一)
- Servlet学习(一)
- Servlet 初步(一)
- Servlet学习(一)
- servlet 学习(一)
- Servlet入门(一)
- servlet学习(一)
- ---Servlet(一)简介
- 深入servlet(一)
- laravel 路由失败
- 快速搭建wordpress和phpAdmin
- c++ 数据结构实训 希尔排序
- vmware + ubuntu + docker+ tensorflow
- TCP/IP详解学习笔记(13)-TCP坚持定时器,TCP保活定时器
- Servlet(一)
- 关于getGenericSuperclass方法和getActualTypeArguments()[0]方法的使用
- Navicat连接oracle数据库报错:ORA-12737 Instant Client Light:unsupported server character set ZHS16GBK
- 剑指offer——第一次只出现一次的字符
- redis 安装
- Linux给新建用户ssh权限问题
- 解决linux下WaitForMultipleObjects的一种方法
- LintCode-[容易] 539. 移动零
- ImageLoader