gpt4 book ai didi

Java Web编程之Servlet技术详解

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Java Web编程之Servlet技术详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

Java Web编程之Servlet技术,知多少?

1、Servlet基础   针对Servlet技术开发,Sun公司提供了一些列接口和类,其中最重要的是javax.servlet.Servlet接口,两个重要的包是javax.servlet和javax.servlet.http,Servlet就是一种实现了Servlet接口的类,它由Web容器(Tomcat/Jetty等)负责调用并创建,用于接收和响应用户请求。Servlet接口中定义了5个抽象方法:

Java Web编程之Servlet技术详解

Servlet顶层类结构如下所示:

Java Web编程之Servlet技术详解

2、第一个Servlet程序 。

新建一个Java Web工程,然后新建Hello类,Hello.java源码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package zzz;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class Hello extends HttpServlet {
  @Override
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
   // 设置响应消息编码
   response.setContentType( "text/html;charset=utf-8" );
   PrintWriter out = response.getWriter();
   out.println( "Hello World" );
  }
 
  @Override
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
   this .doGet(request, response);
  }
}

配置文件web.xml如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<? 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 >zzz</ display-name >
 
  < servlet > <!-- 注册Servlet -->
   < servlet-name >Hello</ servlet-name > <!-- 指定Servlet名称 -->
   < servlet-class >zzz.Hello</ servlet-class > <!-- 指定Servlet完整类名 -->
  </ servlet >
  < servlet-mapping > <!-- 映射Servlet对外访问路径 -->
   < servlet-name >Hello</ servlet-name > <!-- 指定Servlet名称 -->
   < url-pattern >/hello</ url-pattern > <!-- 指定访问Servlet的虚拟路径 -->
  </ servlet-mapping >
</ web-app >

启动运行浏览器显示如下:

Java Web编程之Servlet技术详解

3、Servlet生命周期 。

Java Web编程之Servlet技术详解

Servlet生命周期大致分为3个阶段,初始化阶段、运行阶段和销毁阶段。以下是各个阶段详细说明:

初始化阶段:客户端向Servlet容器发出请求访问Servlet时,容器首先解析请求,查看内存中是否有该Servlet对象,如果有直接使用;否则创建该Servlet对象,然后调用init()方法,注意,Servlet整个声明周期中,init()只会调用一次 运行阶段:这个是Servlet最重要的阶段,此阶段容器会构造一个ServletRequest和ServletResponse对象作为参数传递到Servlet的service()方法中。对于Servlet的每一次访问,Servlet容器都会调用一次service()方法,service()方法在Servlet整个生命周期中会被调用多次 销毁阶段:当服务器关闭或者Web应用被移除出容器时,会进入到此阶段,此时会调用destroy()方法,整个生命周期中destroy()方法只会被调用一次   在客户端首次访问Servlet时,容器会创建该Servlet对象,但是有时希望Servlet对象在Tomcat启动时跟随启动,这怎么处理呢?此时,只需要在web.xml中使用<load-on-startup>元素即可,示例配置如下:

?
1
2
3
4
5
6
7
8
9
10
<servlet>
   <servlet-name>Hello</servlet-name>
   <servlet- class >zzz.Hello</servlet- class >
  <!-- 自动加载servlet程序 -->
  <load-on-startup> 1 </load-on-startup>
  </servlet>
  <servlet-mapping>
   <servlet-name>Hello</servlet-name>
   <url-pattern>/hello</url-pattern>
  </servlet-mapping>

4、ServletConfig和ServletContext 。

ServletConfig接口   Servlet运行期间,如果需要一些辅助信息,例如文件编码、使用Servlet的公司等,这些信息可以在web.xml中使用<init-param>元素进行配置,当Tomcat初始化一个Servlet时,会将该Servlet配置信息封装成一个ServletConfig对象通过init(ServletConfig config)传递到Servlet。ServletConfig定义了一系列获取配置信息的方法:

Java Web编程之Servlet技术详解

接下来以getInitParameter()为例,讲解该方法使用示例:

web.xml配置文件如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<? 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 >zzz</ display-name >
 
  < servlet >
   < servlet-name >Hello</ servlet-name >
   < servlet-class >zzz.Hello</ servlet-class >
   < init-param >
    < param-name >company</ param-name >
    < param-value >dahua</ param-value >
   </ init-param >
  </ servlet >
  < servlet-mapping >
   < servlet-name >Hello</ servlet-name >
   < url-pattern >/hello</ url-pattern >
  </ servlet-mapping >
</ web-app >

Hello.java文件如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package zzz;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class Hello extends HttpServlet {
  @Override
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
   // 设置响应消息编码
   response.setContentType( "text/html;charset=utf-8" );
   PrintWriter out = response.getWriter();
  
   ServletConfig config = this .getServletConfig();
   String param = config.getInitParameter( "company" );
   out.println( "company: " + param);
  }
 
  @Override
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
   this .doGet(request, response);
  }
}

ServletContext接口   当Servlet容器启动时,会为每一个Web应用创建一个唯一的ServletContext对象代表当前Web应用,该对象不仅封装了该Web应用的所有信息,而且实现了多个Servlet对象间的数据共享。在web.xml中不仅可以配置Servlet的初始化信息,还可以配置整个Web应用的初始化信息,配置方式如下所示:

?
1
2
3
4
5
6
7
8
<context-param>
  <param-name>name</param-name>
  <param-value>luoxn28</param-value>
</context-param>
<context-param>
  <param-name>company</param-name>
  <param-value>dahua</param-value>
</context-param>

注意:一个<context-param>元素里只能有一个<param-name>和<param-value>,上面的配置在web.xml中<web-app>下配置。Hello.java文件如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package zzz;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
 
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class Hello extends HttpServlet {
  @Override
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
   // 设置响应消息编码
   response.setContentType( "text/html;charset=utf-8" );
   PrintWriter out = response.getWriter();
  
   ServletContext context = this .getServletContext();
   Enumeration<String> paramNames = context.getInitParameterNames();
   while (paramNames.hasMoreElements()) {
    String name = paramNames.nextElement();
    String value = context.getInitParameter(name);
    out.println(name + ": " + value + "<br/>" );
   }
  }
 
  @Override
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
   this .doGet(request, response);
  }
}

  由于一个Web应用中所有Servlet共享一个ServletContext对象,所以ServletContext对象的域属性可以被Web应用中所有的Servlet访问。在ServletContext接口中定义了分别增加、删除、设置ServletContext域属性的4个方法:

Java Web编程之Servlet技术详解

通过以上方法就可以实现多个Servlet间共享数据,这个具体实例就不贴代码了,网上可参考的资料很多,比如可以点击:

javaweb Servlet开发总结(二) 。

以上就是本文的全部内容,希望对大家了解Java Web的Servlet技术有所帮助.

参考资料 。

1、《Java Web程序开发入门》Servlet技术章节 。

最后此篇关于Java Web编程之Servlet技术详解的文章就讲到这里了,如果你想了解更多关于Java Web编程之Servlet技术详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com