Servlet

版权声明:如果对大家有帮助,大家可以自行转载的。 https://blog.csdn.net/S2013122867/article/details/79248412

什么Servlet

servlet 是运行在 Web 服务器中的小型 Java 程序(即:服务器端的小应用程序)。servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。

web.xml中配置servlet

<!-- 配置一个servlet -->
  <!-- servlet的配置 -->
  <servlet>
      <!-- servlet的内部名称,自定义。尽量有意义 -->
      <servlet-name>FirstServlet</servlet-name>
      <!-- servlet的类全名: 包名+简单类名 -->
      <servlet-class>gz.itcast.a_servlet.FirstServlet</servlet-class>
  </servlet>

  <!-- servlet的映射配置 -->
  <servlet-mapping>
      <!-- servlet的内部名称,一定要和上面的内部名称保持一致!! -->
      <servlet-name>FirstServlet</servlet-name>
      <!-- servlet的映射路径(访问servlet的名称) -->
      <url-pattern>/first</url-pattern>
  </servlet-mapping>

Servlet生命周期

Servlet生命周期的四个重要方法

构造方法: 创建servlet对象的时候调用。默认情况下,第一次访问servlet的时候创建servlet对象。只调用1次。证明servlet对象在tomcat是单实例的。
init方法: 创建完servlet对象的时候调用。只调用1次。
service方法: 每次发出请求时调用。调用n次。
destroy方法: 销毁servlet对象的时候调用。停止服务器或者重新部署web应用时销毁servlet对象。只调用1次。

用时序图来演示servlet的生命周期

生命周期

Servlet的自动加载

默认情况下,第一次访问servlet的时候创建servlet对象。如果servlet的构造方法或init方法中执行了比较多的逻辑代码,那么导致用户第一次访问sevrlet的时候比较慢。
改变servlet创建对象的时机:提前到加载web应用的时候在servlet的配置信息中,加上一个即可

<servlet>
    <servlet-name>LifeDemo</servlet-name>
    <servlet-class>gz.itcast.c_life.LifeDemo</servlet-class>
    <!-- 让servlet对象自动加载 -->
    <load-on-startup>1</load-on-startup>  注意: 整数值越大,创建优先级越低!!
  </servlet>

Servlet的三种创建方式

实现javax.servlet.Servlet接口(参见:编写一个servlet程序:)

继承javax.servet.GenericServlet类(适配器模式)

继承javax.servlet.http.HttpServlet类(模板方法设计模式)

ServletConfig对象

作用

ServletConfig对象: 主要是用于加载servlet的初始化参数。在一个web应用可以存在多个ServletConfig对象(一个Servlet对应一个ServletConfig对象)

Servlet初始化参数配置

<servlet>
    <servlet-name>ConfigDemo</servlet-name>
    <servlet-class>gz.itcast.f_config.ConfigDemo</servlet-class>
    <!-- 初始参数: 这些参数会在加载web应用的时候,封装到ServletConfig对象中 -->
    <init-param>
       <param-name>encoding</param-name>
       <param-value>utf-8</param-value>
    </init-param>
  </servlet>

获取servlet配置信息

方式一

方式一

方式二

方法二

方式三

方法三

ServletContext对象

作用

ServletContext对象 ,叫做Servlet的上下文对象。表示一个当前的web应用环境。一个web应用中只有一个ServletContext对象。

域对象:在一定范围内(当前应用),使多个Servlet共享数据。

常用方法:

void setAttribute(String name,object value);//向ServletContext对象的map中添加数据
Object getAttribute(String name);//从ServletContext对象的map中取数据
void rmoveAttribute(String name);//根据name去移除数据

获取全局配置信息:

修改web.xml文件:

String getInitParameter(String name)//根据配置文件中的key得到value

获取资源路径

String  getRealPath(String path);//根据资源名称得到资源的绝对路径.

可以得到当前应用任何位置的任何资源。

private void test3() throws IOException{
        ServletContext sc = this.getServletContext();
        String path = sc.getRealPath("/WEB-INF/b.properties");//参数一定要以/开头
        //创建一个properties
        Properties prop = new Properties();
        //创建输入流,读取文件内容
        InputStream in = new FileInputStream(path);
        prop.load(in);
        System.out.println(prop.getProperty("key"));
    }

实现Servlet的转发

 RequestDispatcher getRequestDispatcher(java.lang.String path) ;//参数表示要跳转到哪去

1)转发
 a)地址栏不会改变
 b)转发只能转发到当前web应用内的资源
* c)可以在转发过程中,可以把数据保存到request域对象中*

2)重定向 
a)地址栏会改变,变成重定向到地址。
b)重定向可以跳转到当前web应用,或其他web应用,甚至是外部域名网站。
c)不能再重定向的过程,把数据保存到request中。

//实现请求转发,目标是跳转到ServletContextDemo3
        ServletContext sc = this.getServletContext();
        RequestDispatcher rd = sc.getRequestDispatcher("/ServletContextDemo3");
        rd.forward(request, response);
展开阅读全文

没有更多推荐了,返回首页