Servlet基本知识

本文介绍了Servlet的基本概念,包括如何创建和配置Servlet,Servlet的生命周期方法,以及如何通过ServletConfig和ServletContext对象进行配置信息的读取。此外,还讲解了GET与POST请求的区别及如何在Servlet中获取请求参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                  Servlet

 

  1. Serlvet
  1. 创建一个Serlvet接口的实现类

Public class HellowServlet  implements Servlet

  1. 在web.xml文件中配置和映射这个Servlet

 <!-- 配置和映射Serlvet -->

 

 <servlet>

    //servlet 注册的名字

<servlet-name>HelloServlet</servlet-name>     

    //servlet的全类名

<servlet-class>firstWeb.HelloServlet</servlet-class>

    //指定servlet被创建的时机

<servlet-on-stratup>1</servlet-on-stratup>

 

 </servlet>

 

 <servlet-mapping

<servlet-name>HelloServlet</servlet-name>

//代表当前web应用的根目录

        <url-pattern>/hello</url-pattern>

 </servlet-mapping>

 

 

  1. Servlet容器:运行servlet、jsp、filter、等的软件环境
  1. 可以来创建Servlet,并调用servlet的相关生命周期方法

 

  1. servlet生命周期的方法
  1. 构造器,创建Servlet容器对象
  2. Init方法 :只被调用一次,在创建好实例后被调用。用于初始化当前Servlet
  3. Service: 被多次调用,每次请求都会调用这个方法,实际用于响应请求
  4. Destory:只被调用一次,在当前Servlet所在的web应用被卸载时被调用
  1. 关于 servlet-mapping
  1. 同一个servlet可以用多个servlet-mapping来映射
  2. 在servlet映射的URL中也可以使用*通配符,但是只能有两种固定的格式,一种格式事“*。扩展名”,另一种格式事以正斜杠“/”开头并以“/*”结尾

 

  1. servletConfig:封装了Servlet的配置信息,并可以获取ServletContext对象
  1. 配置servlet的初始值,且节点必须在load-on-startup的前面

    <!-- 配置Servlet的初始参数 -->

     <init-param>

      <!-- 参数名 -->

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

      <!-- 参数值 -->

      <param-value>root</param-value>

     </init-param>

     <init-param>

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

        <param-value>123</param-value>

     </init-param>

  1. 获取初始化参数:

 >getInitParameter(String name):获取指定参数名的初始化参数

 >getInitParameterNames();获取参数名组成的Enumeration对象

  //获得初始化参数的两种方法

String user = servletConfig.getInitParameter("user");

System.out.println("user:" + user);

 

Enumeration<String> names = servletConfig.getInitParameterNames();

while (names.hasMoreElements()) {

String name = names.nextElement();

String value = servletConfig.getInitParameter(name);

System.out.println("--:" + name + "--:" + value);

}

 

 

  1. ServletContext
  1. 可以由ServletConfig获取
  2. 该对象代表Web应用:可以认为ServletContext是当前Web应用的一个大管家。可以从中获取到当前WEB应用的各个方面的信息

 > 获取web应用参数

   <!-- 配置当前WEb应用的初始化参数 -->

  <context-param>

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

     <param-value>com.mysql.jdbc.Driver</param-value>  

  </context-param>

 

  >获取当前WEb应用的某一个文件在服务器上的绝对路径

   getRealPath(String path)

 

  >获取当前WEb应用的名称

  getContextPath()

 

  >获取当前WEb应用某一个文件对应的输入流

  getResourceAsStream(String path):path的/相当于当前WEb应用的根目录

   try {

ClassLoader cl = getClass().getClassLoader();

InputStream is = cl.getResourceAsStream("jdbc.properties");

System.out.println("1." + is);

catch (Exception e) {

e.printStackTrace();

}

 

try {

InputStream is2 = sc.getResourceAsStream("/WEB-INF/classes/jdbc.properties");

System.out.println("2." + is2);

catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

 

  1. get请求和Post请求

 1)get请求传递参数

 >在浏览器地址栏中输入某个URL地址或单机某个超链接时,一定是get请求

 >如果网页中的<form>表单元素的method属性被设置成get时也时Get请求

>使用get请求方式给WEB服务器传递参数的格式是:http://localhost:8080/firstWeb/LoginServlet?user=213&password=321

>使用get方式传送的数据量一般限制在1KB一下

 

  1. 使用post方式传递参数

 >post请求方式主要用于向WEb服务器端程序提交FROM表单中的数据,<form>表单元素的method属性被设置成post

>post方式将各个表格中的元素及其数据作为HTTP消息的实体内容发送给WEB服务器。传送数据量要大很多

 

  1. 如何在Servlet中获取请求信息

  1)servlet 中的service()方法用于应答请求:因为每次请求都会调用这个方法

public void service(ServletRequest request, ServletResponse responsethrows ServletException, IOException {

}

ServletRequest:封装了请求信息,可以从中获取任何请求信息

 ServletResponse 封装了响应信息。如果想给用户什么响应,具体可以使用该接口的方法实现

 

这两个接口的实现类都是服务器给予实现的,并在服务器调用service方法时实现

 

  1. servletRequest:

  >获取请求参数

String getParameter(String name):根据请求参数的名字,返回请求参数的值

 

String [] getParameterValues(String name):根据请求参数的名字,返回请求参数对应的字符串数组

 

  Map getParameterMap();返回请求参数的键值对: key:参数名 value[]:参数对应的字符串数组

 

// 获取请求的信息

System.out.println("user:" + user + "   " + "password: " + password);

String[] interestring = request.getParameterValues("interesting");

for (String interest : interestring) {

System.out.println("interesting:" + interest);

}

 

// 用Enumeration数组来获取请求的信息

Enumeration<String> names = request.getAttributeNames();

while (names.hasMoreElements()) {

String name = names.nextElement();

String value = request.getParameter(name);

System.out.println(name + ":" + value);

}

 

// 用Map获取请求的信息

java.util.Map<String, String[]> map = request.getParameterMap();

for (Entry<String, String[]> entry : map.entrySet()) {

System.out.println("**" + entry.getKey() + ":" + Arrays.asList(entry.getValue()));

}

 

   >获取请求的servlet的映射路径

// 获取请求的URl

String url = hsr.getRequestURI();

System.out.println(url);  // /firstWeb/LoginServlet

 

  >获取请求的方式

String method = hsr.getMethod();

System.out.println(method);

 

 

// 获取get请求的,请求参数的那个字符串,即?后的那个字符串

String msg = hsr.getQueryString(); System.out.println(msg);//user=213&password=123&interesting=reading&interesting=party&Submit=%E6%8F%90%E4%BA

 

 

 3)ServletResponse:封装了响应信息,如果想给用户什么响应,具体可以使用该接口实现

   <getWriter():返回PrintWriter对象,该对象调用print()方法,可以直接把数据发送到客户端浏览器上

<setContentType("application/msword"):设置响应给浏览器的文件格式

<sendRedirect(String location):请求重新定位(次方法在HTTPServletResponse中定义的)

 

 

  1. GenericServlet:
  1. 是一个Servlet。是Servlet接口和ServletConfig接口的实现类,但是是一个抽象类,其中的service方法为抽象方法
  2. 如果Servlet程序,直接继承GenericServlet会使开发更简洁

 

1

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值