zoukankan      html  css  js  c++  java
  • 第九章 Servlet API

    第九章 Servlet API

    Servlet API 定义了Servlet和服务器之间的一个标准接口,这使得Servlet具有跨应用服务器的特性,通过使用Servlet API,开发人员不必关心服务器的内部运作方式。

    Servlet API由两个软件包组成:Javax.servlet包和Javax.servlet.http包

    一个存放与HTTP协议无关的一般性Servlet类,另一个存放与HTTP协议相关的功能的类。这两个软件包位于Tomcat的servlet-api.jar中,在myeclipse中创建项目的时候引入Java EE 6也是可以的。

    1. 1.         servletConfig接口

    在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数。

    当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息

    从一个servlet实例化后,对任何客户端任何时候访问都有效,只对本servlet有效,一个servlet的ServletConfig不能被其他sevlet访问

    案例:

             配置:通过web.xml文件中的<init-param>标签进行设置,

    <servlet>

        <servlet-name>ServletConfigDemo1</servlet-name>

        <servlet-class>com.silvan.servlet.ServletConfigDemo1</servlet-class>

        <init-param>

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

        <param-value>ross</param-value>

        </init-param>

        <load-on-startup>0</load-on-startup>

    </servlet>

    <servlet-mapping>

        <servlet-name>ServletConfigDemo1</servlet-name>

        <url-pattern>/ServletConfigDemo1</url-pattern>

      </servlet-mapping>  

    获取:在servlet实现类里面通过getServletConfig().getInitParameter("name")获取;

    package com.silvan.servlet;

    import java.io.IOException;

    import java.io.PrintWriter;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    public class ServletConfigDemo1 extends HttpServlet {

             /**

              * Constructor of the object.

              */

             public ServletDemo1() {

                       super();

             }

             /**

              * Destruction of the servlet. <br>

              */

             public void destroy() {

                       super.destroy(); // Just puts "destroy" string in log

                       // Put your code here

             }

             /**

              * The doGet method of the servlet. <br>

              *

              * This method is called when a form has its tag value method equals to get.

              *

              * @param request the request send by the client to the server

              * @param response the response send by the server to the client

              * @throws ServletException if an error occurred

              * @throws IOException if an error occurred

              */

             public void doGet(HttpServletRequest request, HttpServletResponse response)

                                throws ServletException, IOException {

                       String name = getServletConfig().getInitParameter("name");

                       response.setContentType("text/html");

                       PrintWriter out = response.getWriter();

                       out.println("<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">");

                       out.println("<HTML>");

                       out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");

                       out.println("  <BODY>");

                       out.print("    This is ");

                       out.print(name);

                       out.println("  </BODY>");

                       out.println("</HTML>");

                       out.flush();

                       out.close();

             }

             /**

              * The doPost method of the servlet. <br>

              *

              * This method is called when a form has its tag value method equals to post.

              *

              * @param request the request send by the client to the server

              * @param response the response send by the server to the client

              * @throws ServletException if an error occurred

              * @throws IOException if an error occurred

              */

             public void doPost(HttpServletRequest request, HttpServletResponse response)

                                throws ServletException, IOException {

                       doGet(request,  response);

             }

             /**

              * Initialization of the servlet. <br>

              *

              * @throws ServletException if an error occurs

              */

             public void init() throws ServletException {

                       String name = getServletConfig().getInitParameter("name");

                       System.out.println("this is "+name);

             }

    }

     

    1. 2.         ServletContext接口

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

    ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。

    由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。

    ServletContext对任何servlet,任何人在任何时间都有效,是真正的全局对象

    案例:

             配置:通过web.xml文件中的<context-param>标签设置

    <context-param>

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

        <param-value> ross</param-value>

      </context-param>

      <servlet>

        <servlet-name>ServletContextDemo1</servlet-name>

        <servlet-class>com.silvan.servlet.ServletContextDemo1</servlet-class>

      </servlet>

      <servlet-mapping>

        <servlet-name>ServletContextDemo1</servlet-name>

        <url-pattern>/ServletContextDemo1</url-pattern>

      </servlet-mapping>

             获取: getServletContext().getInitParameter(“name”);

    getServletConfig().getServletContext().getInitParameter(“name”);

    public void doGet(HttpServletRequest request, HttpServletResponse response)

                  throws ServletException, IOException {

             String name1 = getServletContext().getInitParameter("name");

             String name2 = getServletConfig().getServletContext().getInitParameter("name");

             response.setContentType("text/html;charset=UTF-8");

             PrintWriter out = response.getWriter();

             out.println("<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">");

             out.println("<HTML>");

             out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");

             out.println("  <BODY>");

             out.print("直接getServletContext()取得name为:" +name1);

             out.println("<br/>");

             out.print("getServletConfig()对象中取得name为:"+name2);

             out.println("  </BODY>");

             out.println("</HTML>");

             out.flush();

             out.close();

         }

             显示

    案例:

    统计站点访问次数

    配置web.xml

    <servlet>

        <servlet-name>ServletContextDemo21</servlet-name>

        <servlet-class>com.silvan.servlet.ServletContextDemo21</servlet-class>

      </servlet>

      <servlet>

        <servlet-name>ServletContextDemo22</servlet-name>

        <servlet-class>com.silvan.servlet.ServletContextDemo22</servlet-class>

      </servlet>

      <servlet-mapping>

        <servlet-name>ServletContextDemo21</servlet-name>

        <url-pattern>/ServletContextDemo21</url-pattern>

      </servlet-mapping>

      <servlet-mapping>

        <servlet-name>ServletContextDemo22</servlet-name>

        <url-pattern>/ServletContextDemo22</url-pattern>

      </servlet-mapping>  

    统计访问次数

    ServletContextDemo21.java

    package com.silvan.servlet;

    import java.io.IOException;

    import java.io.PrintWriter;

    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 ServletContextDemo21 extends HttpServlet {

             /**

              * Constructor of the object.

              */

             public ServletContextDemo21() {

                       super();

             }

             /**

              * Destruction of the servlet. <br>

              */

             public void destroy() {

                       super.destroy(); // Just puts "destroy" string in log

                       // Put your code here

             }

             public void doGet(HttpServletRequest request, HttpServletResponse response)

                                throws ServletException, IOException {

                       // 每次访问获得原来访问次数+1

                       ServletContext context = getServletContext();

                       // 获得访问次数

                       int count = (Integer) context.getAttribute("count");

                       // 次数+1保存

                       context.setAttribute("count", ++count);

                       System.out.println("context对象地址:"+context);

                       System.out.println("网站被访问次数为:" + count);

                       // 浏览器显示中文

                       response.setContentType("text/html;charset=utf-8");

                       response.getWriter().println("context对象地址:" + context+"<br/>");

                       response.getWriter().println("Demo1网站被访问次数为:" + count);

             }

             public void doPost(HttpServletRequest request, HttpServletResponse response)

                                throws ServletException, IOException {

                       doGet( request,  response);

             }

             public void init() throws ServletException {

                       // 在ServletContext对象中保存一个访问次数

                       ServletContext context = getServletContext();

                       if(context.getAttribute("count")==null){

                                // 保存一个数据

                                context.setAttribute("count", 0);

                       }

             }

    }

    ServletContextDemo22.java

    package com.silvan.servlet;

    import java.io.IOException;

    import java.io.PrintWriter;

    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 ServletContextDemo22 extends HttpServlet {

             public void doGet(HttpServletRequest request, HttpServletResponse response)

                                throws ServletException, IOException {

                       // 每次访问获得原来访问次数+1

                       ServletContext context = getServletContext();

                       // 获得访问次数

                       int count = (Integer) context.getAttribute("count");

                       // 次数+1保存

                       context.setAttribute("count", ++count);

                       System.out.println("context对象地址:"+context);

                       System.out.println("网站被访问次数为:" + count);

                       // 浏览器显示中文

                       response.setContentType("text/html;charset=utf-8");

                       response.getWriter().println("context对象地址:" + context+"<br/>");

                       response.getWriter().println("Demo1网站被访问次数为:" + count);

             }

             public void doPost(HttpServletRequest request, HttpServletResponse response)

                                throws ServletException, IOException {

                       doGet( request,  response);

             }

             public void init() throws ServletException {

                       // 在ServletContext对象中保存一个访问次数

                       ServletContext context = getServletContext();

                       if(context.getAttribute("count")==null){

                                // 保存一个数据

                                context.setAttribute("count", 0);

                       }

             }

    }

    访问

  • 相关阅读:
    垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
    自考感悟,话谈备忘录模式
    [每日一题] OCP1z0-047 :2013-07-26 alter table set unused之后各种情况处理
    Java实现 蓝桥杯 算法提高 p1001
    Java实现 蓝桥杯 算法提高 拿糖果
    Java实现 蓝桥杯 算法提高 拿糖果
    Java实现 蓝桥杯 算法提高 求arccos值
    Java实现 蓝桥杯 算法提高 求arccos值
    Java实现 蓝桥杯 算法提高 因式分解
    Java实现 蓝桥杯 算法提高 因式分解
  • 原文地址:https://www.cnblogs.com/zhouyeqin/p/6743527.html
Copyright © 2011-2022 走看看