JavaWeb学习总结-05 Servlet 学习和使用

一 Servlet的原理

1 Servlet 的创建

  当Servlet容器启动web应用时,需要立即加载Servlet时:

  Servlet容器启动web应用时,将按照指定的顺序初始化Servlet,需要设置<Servlet>元素的<load-on-startup>子元素。<load-on-startup>设置的值为数字,当值为0或者大于0时,表示容器在应用启动时就顺序加载并初始化这个servlet。

  当Servlet容器启动时会启动所有的web应用。

2 ServletContex与web应用的关系。

  当Servlet容器启动Web应用时,并为每个Web应用创建唯一的ServletCOntext对象。可以把ServletContext看成是一个Web应用的服务器端组件的共享内存。在ServletContext中可以存放共享数据,它提供了读取或设置共享数据的方法。

  ServletContext中可以存放共享数据,它提供了读取或设置共享数据的方法:

  • setAttribute(String name, Object object)把一个对象和一个属性名绑定,将这个对象存储在ServletContext中。
  • getAttribute(String name)根据给定的属性名返回所绑定的对象。

二 例子

1 Servlet容器启动web应用时,将按照指定的顺序初始化Servlet

LoadInitServlet.java

package com.test;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

public class LoadInitServlet extends HttpServlet {

    public void init() throws ServletException {
        super.init();
    }
}

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">
    <display-name>javaWeb1</display-name>

    <servlet>
        <servlet-name>LoadInitServlet</servlet-name>
        <servlet-class>com.test.LoadInitServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

</web-app>

2 ServletContex的计时器例子

CounterServlet.java

package com.test;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CounterServlet extends HttpServlet {

    private static final String CONTENT_TYPE = "text/html;charset=utf-8";

    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        System.out.println("init invoked");
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 获得ServletContext的引用
        ServletContext context = getServletContext();
        // 从ServletContext读取count属性
        Integer count = (Integer) context.getAttribute("count");

        // 如果count属性还没有设置, 那么创建count属性,初始值为0
        // one and add it to the ServletContext
        if (count == null) {
            count = new Integer(0);
            context.setAttribute("count", new Integer(0));
        }

        response.setContentType(CONTENT_TYPE);
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head><title>WebCounter</title></head>");
        out.println("<body>");
        // 输出当前的count属性值
        out.println("<p><h1>The current COUNT is : " + count + ".</h1></p>");
        out.println("</body></html>");
        // 创建新的count对象,其值增1
        count = new Integer(count.intValue() + 1);
        // 将新的count属性存储到ServletContext中
        context.setAttribute("count", count);
    }

    public void destroy() {
    }
}

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">
    <display-name>javaWeb1</display-name>

    <servlet>
        <servlet-name>CounterServlet</servlet-name>
        <servlet-class>com.test.CounterServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>CounterServlet</servlet-name>
        <url-pattern>/CounterServlet</url-pattern>
    </servlet-mapping>
</web-app>
时间: 2024-10-29 10:46:44

JavaWeb学习总结-05 Servlet 学习和使用的相关文章

JavaWeb 后端 &lt;二&gt; 之 Servlet 学习笔记

JavaWeb 后端 <二> 之 Servlet 学习笔记 一.Servlet概述 1.什么是Servlet Servlet是一个运行在服务器端的Java小程序,通过HTTP协议用于接收来自客户端请求,并发出响应. 2.Servlet中的方法 public void service(ServletRequest req,ServletResponse res) throws ServletException,java.io.IOException ServletRequest req:代表着请

JavaWeb学习总结-03 Servlet 学习和使用

一 Servlet 1 JSP与Servlet的生成方式 Servlet首先被编译成class文件,然后被服务器调用 JSP首先被转换为Servlet(java文件),然后在被编译为class文件,最后由服务器调用. 查看%/tomcat8\work\Catalina\localhost下项目中的jsp对应的Servlet的 java,class文件. 二 例子 1 第一个Servlet 新建java web项目 javaWeb1. Servlet1.java package com.test;

Java Web学习(29): Servlet学习(二)

Servlet生命周期 先来看看一个Servlet执行的流程图: 再来看看我们所说的HttpServlet的上下文: 一个Servlet的执行过程: Servlet的生命周期 Servlet生命周期可被定义为从创建直到销毁的整个过程.servlet生命周期阶段包括初始化.加载.实例化.服务 和销毁. 以下是Servlet遵循的过程: 1)初始化阶段:Servlet通过调用init()方法进行初始化. 2)响应客户端请求阶段:Servlet调用service()方法来处理客户端的请求:由servi

Java Web学习(30): Servlet学习(三)

Servlet获取JSP九大内置对象 Servlet与JSP九大内置对象对应关系: Servlet与表单 Servlet如何获取表单数据呢? 我们就不再一一讲解,具体的可以参考:http://www.runoob.com/servlet/servlet-form-data.html 实例:获取表单数据 实体类Users代码: package com.entity; import java.util.Date; /**  * 用户实体类  * @author Administrator  * @d

Java Web学习(31): Servlet学习(四)

Servlet路径 绝对路径:一个资源的完整路径: 相对路径:相对于当前资源的路径: 在进行路径说明的时候首先声明一点,如果新建的项目工程中带有WebRoot目录,那么js.css.img都应该放 到WebRoot目录下,否则访问会有问题.千万不要放在WEB-INF下,因为WEB-INF下的内容只有服务器转发可以访 问到,处于安全考虑:如果新建的项目工程中不带有WebRoot目录,那么可以放在WEB-INF外面建立的文件夹中. 那么使用Eclipse创建的Web工程项目是下面的目录结构: JSP

Java Web学习(32): Servlet学习(五)

获取初始化参数 在web.xml中配置Servlet时或者在注解中配置Servlet时,可以配置一些初始化参数,而在Servlet中可以通过 ServletConfig接口提供的方法来取得这些参数. 例子: ServletDemo: package com.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletConfig; import javax.servlet

Java Web学习(28): Servlet学习(一)

一Servlet概述 (1)什么是Servlet 先有JSP还是先有Servlet呢?对于这个问题,我们只需要知道JSP的前身就是Servlet.因此我们乐意清楚的知道 Servlet是JSP的基础. Servlet是在服务器上运行的小程序.一个Servlet就是一个Java类,并且可以通过"请求-响应"编程模型来访问的 这个驻留在服务器内存里的Servlet程序. Servlet为创建基于Web的应用程序提供了基于组件.独立于平台的方法,可以不受CGI程序的性能限制.Servlet

javaweb学习总结(六)——Servlet开发(二)

转载:http://www.cnblogs.com/xdp-gacl/p/3763559.html 只为成功找方法,不为失败找借口! javaweb学习总结(六)——Servlet开发(二) 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数. 例如: 1 <servlet> 2 <servlet-name>ServletC

JavaWeb学习篇之----Servlet过滤器Filter和监听器

JavaWeb学习篇之----Servlet过滤器Filter和监听器 首先来看一下Servlet的过滤器内容: 一.Servlet过滤器的概念: *************************************************************************************** Servlet过滤器是在Java Servlet规范2.3中定义的,它能够对Servlet容器的请求和响应对象进行检查和修改. Servlet过滤器本身并不产生请求和响应对象,