Servlet基础知识点练习、域对象ServletContext练习、

一、练习Servlet和配置文件web.xml

代码

package cn.itcast.servlet;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * 实现Servlet接口,重写5个方法
 * 在web.xml进行配置
 * @author Administrator
 *
 */
public class ServletDemo1 implements Servlet{
    
    public void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException {
        res.getWriter().write("hello demo1...");
    }
    
    
    public void init(ServletConfig config) throws ServletException {
        
    }

    public ServletConfig getServletConfig() {
        return null;
    }

    public String getServletInfo() {
        return null;
    }

    public void destroy() {
        
    }
    
}
package cn.itcast.servlet;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * 生命周期
 * @author Administrator
 *
 */
public class ServletDemo2 implements Servlet {
    
    /**
     * Servlet实例被创建后,调用init方法进行初始化
     *     Servlet什么时候被创建呢?
     *         * 不是服务器一启动时,实例被创建,第一次访问的时候,实例才被创建。
     *     init方法调用几次呢?
     *         * 只被调用一次。
     */
    public void init(ServletConfig config) throws ServletException {
        System.out.println("init...");
    }
    
    /**
     * service调用几次呢?
     *     * 有一次请求,调用一次service方法
     */
    public void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException {
        System.out.println("service...");
    }
    
    /**
     * Servlet实例什么时候被销毁呢?
     *     * 服务器关闭,手动移除。
     *     destroy调用几次呢?
     *     * 一次    
     */
    public void destroy() {
        System.out.println("destroy...");
    }
    
    
    
    
    public ServletConfig getServletConfig() {
        return null;
    }
    public String getServletInfo() {
        return null;
    }
}
package cn.itcast.servlet;

import java.io.IOException;

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

/**
 * 配置servlet启动时加载
 * @author Administrator
 *
 */
public class ServletDemo5 extends HttpServlet {
    
    /**
     * 默认的情况下第一次访问的时候init被调用。
     * 
     */
    public void init() throws ServletException {
        System.out.println("init...");
        // 初始化数据库的链接
        
    }
    
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 写的内容
        // 获取表单输入的内容
        // 自己逻辑,通过名称查询数据库,把张三的姓名查到了
        // 把张三返回浏览器,
        //向控制台输出结果
        System.out.println("doGet...");
        // 向页面输出内容
        response.getWriter().write("hello demo5...");
    }
    
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request,response);
    }
    
}
package cn.itcast.servlet;

import java.io.IOException;
import java.util.Enumeration;

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

/**
 * ServletConfig对象
 * @author Administrator
 *
 */
public class ServletDemo6 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 测试ServletConfig对象的api
        // 先获取ServletConfig对象
        ServletConfig config = getServletConfig();
        // 获取配置文件中serlvet的名称
        System.out.println("servlet的名称:"+config.getServletName());
        
        // 获取初始化的参数
        String username = config.getInitParameter("username");
        String password = config.getInitParameter("password");
        System.out.println(username+" : "+password);
        
        // 获取初始化参数的名称们
        Enumeration<String> e = config.getInitParameterNames();
    
        while(e.hasMoreElements()){
            String name = e.nextElement();
            String value = config.getInitParameter(name);
            System.out.println(name+" : "+value);
        }
        
    }

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

}

web.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    
    
    <!-- 配置全局初始化参数 -->
    <context-param>
        <param-name>encoding</param-name>
        <param-value>GBK</param-value>
    </context-param>
    
    
      <!-- 先配置Servlet信息 -->
      <servlet>
          <!-- 配置Servlet名称,名称必须唯一 -->
          <servlet-name>ServletDemo1</servlet-name>
          <!-- 配置Servlet的完全路径(包名+类名) -->
          <servlet-class>cn.itcast.servlet.ServletDemo1</servlet-class>
      </servlet>
      
      <!-- 配置Servlet映射(访问路径) -->
      <servlet-mapping>
          <!-- 配置Servlet名称,和上面的名称必须相同 -->
          <servlet-name>ServletDemo1</servlet-name>
          <!-- 配置虚拟路径(访问路径) -->
          <url-pattern>/demo1</url-pattern>
      </servlet-mapping>
      
      
      <servlet>
          <servlet-name>ServletDemo2</servlet-name>
          <servlet-class>cn.itcast.servlet.ServletDemo2</servlet-class>
      </servlet>
      <servlet-mapping>
          <servlet-name>ServletDemo2</servlet-name>
          <url-pattern>/demo2</url-pattern>
      </servlet-mapping>
      
      
  <!-- 使用模板生成的 -->
  <servlet>
    <servlet-name>ServletDemo5</servlet-name>
    <servlet-class>cn.itcast.servlet.ServletDemo5</servlet-class>
    <!-- 设置优先级 -->
    <load-on-startup>3</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>ServletDemo5</servlet-name>
    <url-pattern>/demo5</url-pattern>
  </servlet-mapping>
  
  
  <!-- 演示初始化参数 -->
  <servlet>
    <servlet-name>ServletDemo6</servlet-name>
    <servlet-class>cn.itcast.servlet.ServletDemo6</servlet-class>
    <!-- 配置初始化参数 -->
    <init-param>
        <param-name>username</param-name>
        <param-value>root</param-value>
    </init-param>
    <init-param>
        <param-name>password</param-name>
        <param-value>123</param-value>
    </init-param>
  </servlet>
      
</web-app>

二、域对象ServletContext

   定义:WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。

                     一个WEB应用对应一个ServletContext对象

                     一个WEB应用下有多个Servlet程序

                     一个web应用所有的servlet程序都共享同一个ServletContext对象

  作用:* 用来存储,起媒介的作用。ServletContext相当于一个媒介,demo1向其中存入数据,demo2可以冲其中取出数据

       * 获取WEB应用全局初始化参数

                            * 在web.xml中配置,不能放在servlet之中

                                          <context-param>

                                                 <param-name>encoding</param-name>

                                                 <param-value>GBK</param-value>

                                          </context-param>

                                  

                                   String getInitParameter(String name)  

                                   getInitParameterNames()                               

                  * 实现数据的共享(*****)

                                   void setAttribute(String name, Object object)   存入数据

                                   void removeAttribute(String name)                       删除数据

                                   Object getAttribute(String name)                          获取数据

                  * 读取资源文件(*****)

        InputStream getResourceAsStream(String path)     通过文件的地址获取输入流

        String getRealPath(String path)        通过文件的地址获取文件的绝对磁盘路径

代码

package cn.itcast.context;

import java.io.IOException;
import java.util.Enumeration;

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

/**
 * 获取全局初始化参数
 * @author Administrator
 *
 */
public class ContextDemo1 extends HttpServlet {
    
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 先获取ServletContext对象
        ServletContext context = getServletContext();
        // 获取初始化参数
        String encoding = context.getInitParameter("encoding");
        System.out.println("编码:"+encoding);
        //获取所有的参数名
        Enumeration<String> e = context.getInitParameterNames();
        while(e.hasMoreElements()){
            String name = e.nextElement();
            // 通过name获取值
            String value = context.getInitParameter(name);
            System.out.println(name+" : "+value);
        }
    }

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

}
package cn.itcast.context;

import java.io.IOException;

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

/**
 * 统计网站的访问次数
 * @author Administrator
 *
 */
public class CountServlet extends HttpServlet {
    
    /**
     * 实例被创建,调用init方法进行初始化
     *     在域对象存入一个变量,赋值为0
     */
    public void init() throws ServletException {
        // 获取ServletContext对象
        getServletContext().setAttribute("count", 0);
    }

    /**
     * 每一次访问,都会执行该方法。
     * 拿出count的变量,值自增,存入到域对象中
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 先获取ServletContext对象
        ServletContext context = getServletContext();
        // 获取count的值,自增
        Integer count = (Integer) context.getAttribute("count");
        // 存入到域对象中
        context.setAttribute("count", ++count);
        
        // 向页面输出内容
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().write("<h3>大爷,欢迎再来哦!!</h3>");
    }

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

}
package cn.itcast.context;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

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

/**
 * 读取资源文件
 * @author Administrator
 *
 */
public class ReadServlet extends HttpServlet {
    
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        read5();
    }
    
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
    
    /**
     * 通过ServletContext对象获取文件的绝对磁盘路径
     * 获取src目录下文件
     * @throws IOException 
     */
    public void read5() throws IOException{
        // 获取对象
        String path = getServletContext().getRealPath("/WEB-INF/classes/db.properties");
        // System.out.println(path);
        // C:\apache-tomcat-6.0.14\webapps\day09\WEB-INF\classes\db.properties
        
        // 获取输入流
        InputStream in = new FileInputStream(path);
        print(in);
    }
    
    /**
     * 获取WebRoot目录目录下db.properties文件
     * @throws IOException
     */
    public void read4() throws IOException{
        // ServletContext读取文件
        InputStream in = getServletContext().getResourceAsStream("/db.properties");
        // 打印方式
        print(in);
    }
    
    /**
     * 获取包目录下db.properties文件
     * @throws IOException
     */
    public void read3() throws IOException{
        // ServletContext读取文件
        InputStream in = getServletContext().getResourceAsStream("/WEB-INF/classes/cn/itcast/context/db.properties");
        // 打印方式
        print(in);
    }
    
    /**
     * 获取src目录下db.properties文件
     * @throws IOException   编译后,src文件不见了,全都放在class文件里
     */
    public void read2() throws IOException{
        // ServletContext读取文件
        InputStream in = getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
        // 打印方式
        print(in);
    }
    
    /**
     * 传统方式读取资源文件
     *     交给服务器处理,相对的位置tomcat/bin
     * @throws IOException 
     */
    public void read1() throws IOException{
        // 获取输入流
        InputStream in = new FileInputStream("src/db.properties");
        print(in);
    }
    
    /**
     * 在控制台打印内容
     * @param in
     * @throws IOException
     */
    public void print(InputStream in) throws IOException{
        Properties pro = new Properties();
        // 加载
        pro.load(in);
        // 获取文件中的内容
        String username = pro.getProperty("username");
        String password = pro.getProperty("password");
        String desc = pro.getProperty("desc");
        
        System.out.println("用户名:"+username);
        System.out.println("密码:"+password);
        System.out.println("描述:"+desc);
    }
    
}
package cn.itcast.context;

import java.io.IOException;

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

/**
 * 显示网站的访问次数
 * @author Administrator
 *
 */
public class ShowServlet extends HttpServlet {

    /**
     * 获取网站的访问次数,输出到客户端
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Integer count = (Integer) getServletContext().getAttribute("count");
        // 向页面输出
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().write("<h3>该网站一共被访问了"+count+"次</h3>");
    }

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

}

web.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    
    
    <!-- 配置全局初始化参数 -->
    <context-param>
        <param-name>encoding</param-name>
        <param-value>GBK</param-value>
    </context-param>
    
  <servlet>
    <servlet-name>ContextDemo1</servlet-name>
    <servlet-class>cn.itcast.context.ContextDemo1</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>CountServlet</servlet-name>
    <servlet-class>cn.itcast.context.CountServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>ShowServlet</servlet-name>
    <servlet-class>cn.itcast.context.ShowServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>ReadServlet</servlet-name>
    <servlet-class>cn.itcast.context.ReadServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>ServletDmo1</servlet-name>
    <servlet-class>cn.itcast.http.ServletDmo1</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>RefreshServlet</servlet-name>
    <servlet-class>cn.itcast.http.RefreshServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>ContextDemo1</servlet-name>
    <url-pattern>/context1</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>CountServlet</servlet-name>
    <url-pattern>/count</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ShowServlet</servlet-name>
    <url-pattern>/show</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ReadServlet</servlet-name>
    <url-pattern>/read</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ServletDmo1</servlet-name>
    <url-pattern>/servlet1</url-pattern>
  </servlet-mapping>
       
</web-app>

记录网站访问次数

CountServlet进行网站访问,ShowServlet显示网站访问次数

package cn.itcast.context;

import java.io.IOException;

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

/**
 * 统计网站的访问次数
 * @author Administrator
 *
 */
public class CountServlet extends HttpServlet {
    
    /**
     * 实例被创建,调用init方法进行初始化
     *     在域对象存入一个变量,赋值为0
     */
    public void init() throws ServletException {
        // 获取ServletContext对象
        getServletContext().setAttribute("count", 0);
    }

    /**
     * 每一次访问,都会执行该方法。
     * 拿出count的变量,值自增,存入到域对象中
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 先获取ServletContext对象
        ServletContext context = getServletContext();
        // 获取count的值,自增
        Integer count = (Integer) context.getAttribute("count");
        // 存入到域对象中
        context.setAttribute("count", ++count);
        
        // 向页面输出内容
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().write("<h3>大爷,欢迎再来哦!!</h3>");
    }

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

}
package cn.itcast.context;

import java.io.IOException;

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

/**
 * 显示网站的访问次数
 * @author Administrator
 *
 */
public class ShowServlet extends HttpServlet {

    /**
     * 获取网站的访问次数,输出到客户端
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Integer count = (Integer) getServletContext().getAttribute("count");
        // 向页面输出
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().write("<h3>该网站一共被访问了"+count+"次</h3>");
    }

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

}

web.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

  <servlet>
    <servlet-name>CountServlet</servlet-name>
    <servlet-class>cn.itcast.context.CountServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>ShowServlet</servlet-name>
    <servlet-class>cn.itcast.context.ShowServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>CountServlet</servlet-name>
    <url-pattern>/count</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ShowServlet</servlet-name>
    <url-pattern>/show</url-pattern>
  </servlet-mapping>

      
</web-app>

猜你喜欢

转载自www.cnblogs.com/zsj03180204/p/11023815.html
今日推荐