JavaWeb学习笔记:Servlet
2015-07-26 14:32
519 查看
Servlet
JavaWeb
概念
Java Web应用由一组Servlet、HTML页面、类、以及其它可以被绑定的资源构成。他可以在各种供应商提供的实现Servlet规范的Servlet容器中运行。包含内容
ServletJSP
实用类
静态文档如HTML、图片等
描述Web应用的信息(web.xml)
Servlet与Servlet容器
Servlet
简介
Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中。Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet和客户的通信采用“请求/响应”的模式。
功能
创建并返回基于客户请求的动态HTML页面。创建可嵌入到现有HTML页面中的部分HTML页面(HTML片段)。
与其它服务器资源进行通信。
生命周期相关的方法
以下方法都是由 Serlvet 容器负责调用:构造器:只被调用一次. 只有第一次请求 Servlet 时, 创建 Servlet 的实例. 调用构造器。 这说明 Serlvet 的单实例的!
init 方法:只被调用一次。 在创建好实例后立即被调用. 用于初始化当前 Servlet。
service:被多次调用。 每次请求都会调用 service 方法. 实际用于响应请求的。
destroy:只被调用一次。 在当前 Servlet 所在的 WEB 应用被卸载前调用. 用于释放当前 Servlet 所占用的资源。
Servlet容器
概念
Servlet容器也称为JavaWeb应用容器,或者Servlet/JSP容器,比如Tomcat。感性认识:运行 Servlet、JSP、Filter 等的软件环境。
Servlet容器为JavaWeb应用提供运行时环境,它负责创建 Servlet、管理Servlet和JSP的生命周期,以及管理它们的共享数据。
访问流程
第一种是访问静态页面,第二种情况是访问动态页面,其实也就是通过Servlet来和后台数据库进行交互。Web浏览器–>Web服务器–>静态页面
Web浏览器–>Web服务器–>Servlet容器(JSP、Servlet)<–>数据库
Servlet容器响应客户请求的过程
客户<-->Servlet容器<-->Servlet
Servlet配置参数
load-on-startup
配置
<servlet> <!-- Servlet 注册的名字 --> <servlet-name>secondServlet</servlet-name> <!-- Servlet 的全类名 --> <servlet-class>com.buaa.zhao.SecondServlet</servlet-class> <!-- 可以指定 Servlet 被创建的时机 --> <load-on-startup>2</load-on-startup> </servlet>
说明
load-on-startup可以指定 Serlvet 被创建的时机。若为负数, 则在第一次请求时被创建(也就是说不请求访问它,不会被创建)。若为 0 或正数, 则在当前 WEB 应用被Serlvet 容器加载时创建实例, 且数组越小越早被创建。serlvet-mapping
说明
同一个Servlet可以被映射到多个URL上,即多个<servlet-mapping>元素的
<servlet-name>子元素的设置值可以是同一个Servlet的注册名。
配置
在Servlet映射到的URL中也可以使用 * 通配符,但是只能有两种固定的格式:一种格式是“.扩展名”,另一种格式是以正斜杠(/)开头并以“/”结尾。两种方式只能选其一,也就是说带/的不能带扩展名
<servlet-mapping> <servlet-name>secondServlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>
OR
<servlet-mapping> <servlet-name>secondServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
Servlet测试程序
通过一个程序,观测Servlet的方法功能。创建一个 Servlet 接口的实现类
package com.buaa.zhao; import java.io.IOException; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class HelloServlet implements Servlet{ @Override public void destroy() { System.out.println("destory....."); } @Override public ServletConfig getServletConfig() { System.out.println("getServletConfig...."); return null; } @Override public String getServletInfo() { System.out.println("getServletInfo...."); return null; } @Override public void init(ServletConfig arg0) throws ServletException { System.out.println("init...."); } @Override public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { System.out.println("service...."); } public HelloServlet() { System.out.println("HelloServlet's constructor"); } }
配置web.xml文件
在文件中添加如下内容:<!-- 配置和映射Servlet --> <servlet> <!-- Servlet 注册的名字 --> <servlet-name>helloServlet</servlet-name> <!-- Servlet 的全类名 --> <servlet-class>com.buaa.zhao.HelloServlet</servlet-class> </servlet> <servlet-mapping> <!-- 需要和某一个 servlet 节点的 serlvet-name 子节点的文本节点一致 --> <servlet-name>helloServlet</servlet-name> <!-- 映射具体的访问路径: / 代表当前 WEB 应用的根目录. --> <url-pattern>/hello</url-pattern> </servlet-mapping>
运行测试
启动Tomcat服务器,打开http://localhost:8989/JavaWebTest/hello。
控制端部分输出信息:
信息: Server startup in 375 ms HelloServlet's constructor init.... service.... service.... service.... service.... service.... service.... service.... service.... 七月 26, 2015 11:46:49 上午 org.apache.catalina.core.StandardServer await 信息: A valid shutdown command was received via the shutdown port. Stopping the Server instance. 七月 26, 2015 11:46:49 上午 org.apache.coyote.AbstractProtocol pause 信息: Pausing ProtocolHandler ["http-apr-8989"] 七月 26, 2015 11:46:49 上午 org.apache.coyote.AbstractProtocol pause 信息: Pausing ProtocolHandler ["ajp-apr-8009"] 七月 26, 2015 11:46:50 上午 org.apache.catalina.core.StandardService stopInternal 信息: Stopping service Catalina destory..... 七月 26, 2015 11:46:50 上午 org.apache.coyote.AbstractProtocol stop 信息: Stopping ProtocolHandler ["http-apr-8989"]
通过输出信息可以观测到:
当访问http://localhost:8989/JavaWebTest/hello时,执行顺序是HelloServlet()–>init()–>service()
每次刷新页面,会只调用service(),也就是只输出“service….”
关闭服务器的时候会输出“destory…..”,即调用了destory()
相关文章推荐
- java Ip地址的获取 简单代码
- 冒泡,简单选择,直接插入排序比较(Java版)
- springmvc的restful服务理解
- 常见排序算法(java实现)
- JAVA集中中 List Set Map 区别和关系
- eclipse编辑器下显示文件路径
- 开源 自由 java CMS - FreeCMS1.8 网上申报
- Java Base64、AES、SHA1、MD5加密算法
- JAVA注解
- [转]STRUTS2中的OGNL
- [LeetCOde][Java] Best Time to Buy and Sell Stock III
- [LeetCode][Java] Best Time to Buy and Sell Stock IV
- Struts2-02
- java:用UDP协议,开发一个聊天工具代码
- springmvc+mybatis+mysql整合实战
- eclipse修改java代码后报错: java.lang.OutOfMemoryError: PermGen space
- 学习java编程能往哪些方向发展
- Java关键字this、super使用总结
- jdk 安装
- 为什么要重写hashcode() 方法