admin管理员组文章数量:1033043
JavaWeb后端入门6—Servlet
1. 概述
Servlet是一个运行在Web服务器上的Java程序,用于处理从Web客户端发送的请求并对请求做出响应。
2. 使用Servlet
- 编写一个Java类实现Servlet接口
- 配置Servlet
3. 入门代码
①创建包和类
②实现Servlet接口
代码语言:javascript代码运行次数:0运行复制package com.itheima.servlet.demo1;
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入门程序
* */
public class HelloServlet implements Servlet{
@Override
/*
* 用来处理客户请求,并对请求做出响应的方法
* */
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
// TODO 自动生成的方法存根
//想页面输出Hello Servlet字符串
res.getWriter().println("Hello Servlet!!!");
}
@Override
public void destroy() {
// TODO 自动生成的方法存根
}
@Override
public ServletConfig getServletConfig() {
// TODO 自动生成的方法存根
return null;
}
@Override
public String getServletInfo() {
// TODO 自动生成的方法存根
return null;
}
@Override
public void init(ServletConfig config) throws ServletException {
// TODO 自动生成的方法存根
}
}
③在web.xml
配置这个类
<!-- 配置Servlet -->
<servlet>
<!-- 配置Servlet名称 -->
<servlet-name>HelloServlet</servlet-name>
<!-- 配置Servlet类的全路径 -->
<servlet-class>com.itheima.servlet.demo1.HelloServlet</servlet-class>
</servlet>
<!-- 配置servlet映射 -->
<servlet-mapping>
<!-- 配置Servlet名称 -->
<servlet-name>HelloServlet</servlet-name>
<!-- 配置访问路径 -->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
4. Servlet执行流程
5. Servlet的实现关系
基本的实现关系
代码语言:javascript代码运行次数:0运行复制Servlet接口
|
GenericServlet类
|
HTTPServlet类 是一个与协议相关的Servlet,专门用来处理HTTP协议的请求
通常一般都会让Servlet继承HttpServlet,然后重写doGet和doPost方法,往往请求要处理的代码都是一直的,所以需要让doGet和doPost相互调用简化编程。
6. Eclipse中使用Servelet模板
①在包下新建Servlet
②自动继承HTTPServlet,输入Servlet名,点击下一步
③输入类名和URL,下一步
④选择要继承的方法,完成
7. Servlet的生命周期
生命周期:一个对象从创建到销毁的过程
Servlet何时创建:Servlet在第一次被访问的时候实例化,同时init方法会执行。实例化以及init方法只会执行一次,任何一次从客户端发来的请求,Servlet的service的方法就会被执行。
Servlet何时销毁:当Servlet从服务器移除或者服务器关闭的时候,Servlet对象被销毁,里面的的story方法就会执行,将其回收。
代码演示 不演示了
8. Servlet的启动时加载
Servlet对象时第一次被访问的时候被创建的,init方法执行。
如果在init方法中做了一些比较耗时的操作,比如加载了一些配置文件,呢么第一个用户第一次访问Servlet时,就需要等待。
在web.xml
中的<servlet>
标签中加入<load-on-startup>
标签
数字越小,优先级越高
代码语言:javascript代码运行次数:0运行复制<servlet>
<servlet-name>ServletDemo2</servlet-name>
<servlet-class>com.itheima.servlet.demo1.ServletDemo2</servlet-class>
<!-- 启动时加载 -->
<load-on-startup>1</load-on-startup>
</servlet>
9. Servlet的访问路径的配置
- 完全路径配置 以/开始,比如 /demo
- 目录匹配 以/开始,以/*结束,如/aaa/*
- 扩展名匹配 不能以/开始,而是以*开始
<servlet-mapping>
<servlet-name>ServletDemo3</servlet-name>
<!-- 完全路径匹配 -->
<!-- <url-pattern>/ServletDemo3</url-pattern> -->
<!-- 目录匹配 -->
<!-- <url-pattern>/aaa/*</url-pattern> -->
<!-- 扩展名匹配 -->
<!-- <url-pattern>*.abc</url-pattern> -->
</servlet-mapping>
优先级:完全 > 目录 > 扩展名
10. ServletConfig对象
ServletConfig用来获得Servlet的相关的配置对象
- 获得 :getServletConfig
- API:获得Servlet的初始化参数、获得ServletContext对象、获得Servlet名称
代码演示
①web.xml中加入以下
代码语言:javascript代码运行次数:0运行复制 <servlet>
<description></description>
<display-name>ServletDemo4</display-name>
<servlet-name>ServletDemo4</servlet-name>
<servlet-class>com.itheima.servlet.demo1.ServletDemo4</servlet-class>
<!-- 配置Servlet初始化参数 -->
<init-param>
<param-name>username</param-name>
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>abc</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ServletDemo4</servlet-name>
<url-pattern>/ServletDemo4</url-pattern>
</servlet-mapping>
②java内容
代码语言:javascript代码运行次数:0运行复制package com.itheima.servlet.demo1;
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对象演示
*/
public class ServletDemo4 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获得初始化参数API
//获得ServletConfig对象
ServletConfig config = this.getServletConfig();
String username = config.getInitParameter("username");
String password = config.getInitParameter("password");
System.out.println(username+" "+password);
//2.获得所有初始化参数名称
Enumeration<String> names = config.getInitParameterNames();
while (names.hasMoreElements()) {
String name = names.nextElement();
String value = config.getInitParameter(name);
System.out.println(name+" "+value);
}
//3.获得Servlet名称
String servletname = config.getServletName();
System.out.println(servletname);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
11. ServletContext对象
ServletContext是Servlet的上下文对象,对Servlet之前和之后的内容都可以查询。这个对象每个Web项目只有一个。服务器启东市为每个web项目创建一个单独的ServletContext对象
11.1 获取web信息
因为一个web项目只有一个ServletContext对象,所以这个对象对整个项目的信息都是了解的。
方法:
- 获取文件的MIME类型 getMimeType( )
- 获取web项目请求工程名 getContentPath( )
- 获取web项目的初始化参数 getInitParameter ( ) 、 getInitParameterName ( )
代码:
web.xml
配置全局初始化参数
<!-- 全局初始化参数配置 -->
<context-param>
<param-name>username</param-name>
<param-value>abc</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>GuessMyPasswordBitch</param-value>
</context-param>
Demo5.java
的doGet
部分:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获得ServletContext
ServletContext servletContext = this.getServletContext();
//1.获取文件MIME类型
String mimeType = servletContext.getMimeType("a.mp4");
System.out.println(mimeType);
//2.获得请求路径的工程名:
String path = servletContext.getContextPath();
System.out.println(path);
//3.获得全局初始化参数
String username = servletContext.getInitParameter("username");
String password = servletContext.getInitParameter("password");
System.out.println(username+" "+password);
Enumeration<String> names = servletContext.getInitParameterNames();
while (names.hasMoreElements()) {
String name = (String) names.nextElement();
String value = servletContext.getInitParameter(name);
System.out.println(name+" "+value);
}
}
11.2 读取web项目下的文件
之前使用IO流可以读取文件(java项目)。web项目是需要发布到tomcat下才能访问,获取web项目下的文件如果使用传统的IO流就会出现问题。(原因:路径中使用的是相对路径,相对的是jre环境)
传统IO方法(test1)和ServletContext方法(test2)如下:
代码语言:javascript代码运行次数:0运行复制package com.itheima.servlet.demo1;
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;
/**
*web项目中的读取文件
*/
public class ServletDemo6 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//传统方式
test1();
//ServletContext方式
test2();
}
private void test2() throws IOException{
//使用ServletContext方式
Properties properties = new Properties();
//创建一个文件的输入流
//InputStream is = new FileInputStream("/web01/src/main/java/db.properties");
InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
properties.load(is);
//获取数据
String driverClassName = properties.getProperty("driverClassName");
String url = properties.getProperty("url");
String username = properties.getProperty("username");
String password = properties.getProperty("password");
//输出
System.out.println(driverClassName);
System.out.println(url);
System.out.println(username);
System.out.println(password);
}
private void test1() throws FileNotFoundException, IOException {
//传统方式
Properties properties = new Properties();
//创建一个文件的输入流
InputStream is = new FileInputStream("/web01/src/main/java/db.properties");
properties.load(is);
//获取数据
String driverClassName = properties.getProperty("driverClassName");
String url = properties.getProperty("url");
String username = properties.getProperty("username");
String password = properties.getProperty("password");
//输出
System.out.println(driverClassName);
System.out.println(url);
System.out.println(username);
System.out.println(password);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
11.3 作为域对象存取数据
- 域对象概述
将数据存入到域对象中,这个数据就会有一定的作用范围。域指的是一定的作用范围。
- ServletContext作为域对象的API
setAttribute:存入数据
getAttribute:取得数据
removeAttribute:移除数据
- ServletContext作为域对象的作用范围
服务器启动的时候为每个Web项目创建一个单独的ServletContext对象。当Web项目从服务器中移除,或者是关闭服务器的时候ServletContext对象会被销毁。想ServletContext中保存的数据会一直存在(只有在服务器关闭的时候,对象被销毁,否则ServletContext会一直存在)
范围:整个Web应用(只要有一个地方存储,其他地方都可以调用)
- 代码演示
新建ServletDemo7
/**
* ServletContext的域对象演示
*/
public class ServletDemo7 extends HttpServlet {
@Override
public void init() throws ServletException {
// 当ServletDemo7被创建时,初始化一个值。
this.getServletContext().setAttribute("name", "张三");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = (String) this.getServletContext().getAttribute("name");
System.out.println("姓名:"+name);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
新建 ServletDemo8
/**
* ServletContext的域对象演示
*/
public class ServletDemo8 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = (String) this.getServletContext().getAttribute("name");
System.out.println("姓名:"+name);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
当浏览器访问localhost:8080/web01/ServletDemo7和 localhost:8080/web01/ServletDemo8 时都能获取到以下内容:
代码语言:javascript代码运行次数:0运行复制姓名:张三
12. Servlet域对象的总结—数据访问范围
12.1 请求范围(ServletRequest
)
- 何时创建和销毁
- 创建:当用户向服务器发送一次请求,服务器创建一个Request对象
- 销毁:服务器对这次请求做出了相应,服务器就会销毁这个Request对象
- 如何存取数据
- 存数据:
Void setAttribute(String name, Object value);
- 取数据:
Object getAttribute(String name);
- 存数据:
- 作用范围
- 一次请求(转发就是一次请求)。
12.2 会话范围(HttpSession
)
- 何时创建和销毁
- 创建:服务器端第一次调用
getSession( )
方法的时候 - 销毁:三种情况
- Session过期(默认过期时间30分钟,
tomcat/conf/web.xml
可以修改) - 非正常关闭服务器(terminate或者服务器直接拔电源)。正常关闭服务器时,Session会保存在
tomcat/work/Catalina/localhost/
工程名 下 - 手动调用
session.invalidate()
- Session过期(默认过期时间30分钟,
- 创建:服务器端第一次调用
- 如何存取数据
- 存数据:
Void setAttribute(String name, Object value);
- 取数据:
Object getAttribute(String name);
- 存数据:
- 作用范围
- 一次会话,多个请求。
12.3 应用范围(ServletContext
)
- 何时创建和销毁
- 创建:服务器启动时创建,为每一个单独的web项目创建一个单独的
ServletContext
对象 - 销毁:服务器关闭或项目从服务器移除时。
- 创建:服务器启动时创建,为每一个单独的web项目创建一个单独的
- 如何存取数据
- 存数据:
Void setAttribute(String name, Object value);
- 取数据:
Object getAttribute(String name);
- 存数据:
- 作用范围
- 整个应用(项目任何位置都可以获得)。
JavaWeb后端入门6—Servlet
1. 概述
Servlet是一个运行在Web服务器上的Java程序,用于处理从Web客户端发送的请求并对请求做出响应。
2. 使用Servlet
- 编写一个Java类实现Servlet接口
- 配置Servlet
3. 入门代码
①创建包和类
②实现Servlet接口
代码语言:javascript代码运行次数:0运行复制package com.itheima.servlet.demo1;
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入门程序
* */
public class HelloServlet implements Servlet{
@Override
/*
* 用来处理客户请求,并对请求做出响应的方法
* */
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
// TODO 自动生成的方法存根
//想页面输出Hello Servlet字符串
res.getWriter().println("Hello Servlet!!!");
}
@Override
public void destroy() {
// TODO 自动生成的方法存根
}
@Override
public ServletConfig getServletConfig() {
// TODO 自动生成的方法存根
return null;
}
@Override
public String getServletInfo() {
// TODO 自动生成的方法存根
return null;
}
@Override
public void init(ServletConfig config) throws ServletException {
// TODO 自动生成的方法存根
}
}
③在web.xml
配置这个类
<!-- 配置Servlet -->
<servlet>
<!-- 配置Servlet名称 -->
<servlet-name>HelloServlet</servlet-name>
<!-- 配置Servlet类的全路径 -->
<servlet-class>com.itheima.servlet.demo1.HelloServlet</servlet-class>
</servlet>
<!-- 配置servlet映射 -->
<servlet-mapping>
<!-- 配置Servlet名称 -->
<servlet-name>HelloServlet</servlet-name>
<!-- 配置访问路径 -->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
4. Servlet执行流程
5. Servlet的实现关系
基本的实现关系
代码语言:javascript代码运行次数:0运行复制Servlet接口
|
GenericServlet类
|
HTTPServlet类 是一个与协议相关的Servlet,专门用来处理HTTP协议的请求
通常一般都会让Servlet继承HttpServlet,然后重写doGet和doPost方法,往往请求要处理的代码都是一直的,所以需要让doGet和doPost相互调用简化编程。
6. Eclipse中使用Servelet模板
①在包下新建Servlet
②自动继承HTTPServlet,输入Servlet名,点击下一步
③输入类名和URL,下一步
④选择要继承的方法,完成
7. Servlet的生命周期
生命周期:一个对象从创建到销毁的过程
Servlet何时创建:Servlet在第一次被访问的时候实例化,同时init方法会执行。实例化以及init方法只会执行一次,任何一次从客户端发来的请求,Servlet的service的方法就会被执行。
Servlet何时销毁:当Servlet从服务器移除或者服务器关闭的时候,Servlet对象被销毁,里面的的story方法就会执行,将其回收。
代码演示 不演示了
8. Servlet的启动时加载
Servlet对象时第一次被访问的时候被创建的,init方法执行。
如果在init方法中做了一些比较耗时的操作,比如加载了一些配置文件,呢么第一个用户第一次访问Servlet时,就需要等待。
在web.xml
中的<servlet>
标签中加入<load-on-startup>
标签
数字越小,优先级越高
代码语言:javascript代码运行次数:0运行复制<servlet>
<servlet-name>ServletDemo2</servlet-name>
<servlet-class>com.itheima.servlet.demo1.ServletDemo2</servlet-class>
<!-- 启动时加载 -->
<load-on-startup>1</load-on-startup>
</servlet>
9. Servlet的访问路径的配置
- 完全路径配置 以/开始,比如 /demo
- 目录匹配 以/开始,以/*结束,如/aaa/*
- 扩展名匹配 不能以/开始,而是以*开始
<servlet-mapping>
<servlet-name>ServletDemo3</servlet-name>
<!-- 完全路径匹配 -->
<!-- <url-pattern>/ServletDemo3</url-pattern> -->
<!-- 目录匹配 -->
<!-- <url-pattern>/aaa/*</url-pattern> -->
<!-- 扩展名匹配 -->
<!-- <url-pattern>*.abc</url-pattern> -->
</servlet-mapping>
优先级:完全 > 目录 > 扩展名
10. ServletConfig对象
ServletConfig用来获得Servlet的相关的配置对象
- 获得 :getServletConfig
- API:获得Servlet的初始化参数、获得ServletContext对象、获得Servlet名称
代码演示
①web.xml中加入以下
代码语言:javascript代码运行次数:0运行复制 <servlet>
<description></description>
<display-name>ServletDemo4</display-name>
<servlet-name>ServletDemo4</servlet-name>
<servlet-class>com.itheima.servlet.demo1.ServletDemo4</servlet-class>
<!-- 配置Servlet初始化参数 -->
<init-param>
<param-name>username</param-name>
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>abc</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ServletDemo4</servlet-name>
<url-pattern>/ServletDemo4</url-pattern>
</servlet-mapping>
②java内容
代码语言:javascript代码运行次数:0运行复制package com.itheima.servlet.demo1;
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对象演示
*/
public class ServletDemo4 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获得初始化参数API
//获得ServletConfig对象
ServletConfig config = this.getServletConfig();
String username = config.getInitParameter("username");
String password = config.getInitParameter("password");
System.out.println(username+" "+password);
//2.获得所有初始化参数名称
Enumeration<String> names = config.getInitParameterNames();
while (names.hasMoreElements()) {
String name = names.nextElement();
String value = config.getInitParameter(name);
System.out.println(name+" "+value);
}
//3.获得Servlet名称
String servletname = config.getServletName();
System.out.println(servletname);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
11. ServletContext对象
ServletContext是Servlet的上下文对象,对Servlet之前和之后的内容都可以查询。这个对象每个Web项目只有一个。服务器启东市为每个web项目创建一个单独的ServletContext对象
11.1 获取web信息
因为一个web项目只有一个ServletContext对象,所以这个对象对整个项目的信息都是了解的。
方法:
- 获取文件的MIME类型 getMimeType( )
- 获取web项目请求工程名 getContentPath( )
- 获取web项目的初始化参数 getInitParameter ( ) 、 getInitParameterName ( )
代码:
web.xml
配置全局初始化参数
<!-- 全局初始化参数配置 -->
<context-param>
<param-name>username</param-name>
<param-value>abc</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>GuessMyPasswordBitch</param-value>
</context-param>
Demo5.java
的doGet
部分:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获得ServletContext
ServletContext servletContext = this.getServletContext();
//1.获取文件MIME类型
String mimeType = servletContext.getMimeType("a.mp4");
System.out.println(mimeType);
//2.获得请求路径的工程名:
String path = servletContext.getContextPath();
System.out.println(path);
//3.获得全局初始化参数
String username = servletContext.getInitParameter("username");
String password = servletContext.getInitParameter("password");
System.out.println(username+" "+password);
Enumeration<String> names = servletContext.getInitParameterNames();
while (names.hasMoreElements()) {
String name = (String) names.nextElement();
String value = servletContext.getInitParameter(name);
System.out.println(name+" "+value);
}
}
11.2 读取web项目下的文件
之前使用IO流可以读取文件(java项目)。web项目是需要发布到tomcat下才能访问,获取web项目下的文件如果使用传统的IO流就会出现问题。(原因:路径中使用的是相对路径,相对的是jre环境)
传统IO方法(test1)和ServletContext方法(test2)如下:
代码语言:javascript代码运行次数:0运行复制package com.itheima.servlet.demo1;
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;
/**
*web项目中的读取文件
*/
public class ServletDemo6 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//传统方式
test1();
//ServletContext方式
test2();
}
private void test2() throws IOException{
//使用ServletContext方式
Properties properties = new Properties();
//创建一个文件的输入流
//InputStream is = new FileInputStream("/web01/src/main/java/db.properties");
InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
properties.load(is);
//获取数据
String driverClassName = properties.getProperty("driverClassName");
String url = properties.getProperty("url");
String username = properties.getProperty("username");
String password = properties.getProperty("password");
//输出
System.out.println(driverClassName);
System.out.println(url);
System.out.println(username);
System.out.println(password);
}
private void test1() throws FileNotFoundException, IOException {
//传统方式
Properties properties = new Properties();
//创建一个文件的输入流
InputStream is = new FileInputStream("/web01/src/main/java/db.properties");
properties.load(is);
//获取数据
String driverClassName = properties.getProperty("driverClassName");
String url = properties.getProperty("url");
String username = properties.getProperty("username");
String password = properties.getProperty("password");
//输出
System.out.println(driverClassName);
System.out.println(url);
System.out.println(username);
System.out.println(password);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
11.3 作为域对象存取数据
- 域对象概述
将数据存入到域对象中,这个数据就会有一定的作用范围。域指的是一定的作用范围。
- ServletContext作为域对象的API
setAttribute:存入数据
getAttribute:取得数据
removeAttribute:移除数据
- ServletContext作为域对象的作用范围
服务器启动的时候为每个Web项目创建一个单独的ServletContext对象。当Web项目从服务器中移除,或者是关闭服务器的时候ServletContext对象会被销毁。想ServletContext中保存的数据会一直存在(只有在服务器关闭的时候,对象被销毁,否则ServletContext会一直存在)
范围:整个Web应用(只要有一个地方存储,其他地方都可以调用)
- 代码演示
新建ServletDemo7
/**
* ServletContext的域对象演示
*/
public class ServletDemo7 extends HttpServlet {
@Override
public void init() throws ServletException {
// 当ServletDemo7被创建时,初始化一个值。
this.getServletContext().setAttribute("name", "张三");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = (String) this.getServletContext().getAttribute("name");
System.out.println("姓名:"+name);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
新建 ServletDemo8
/**
* ServletContext的域对象演示
*/
public class ServletDemo8 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = (String) this.getServletContext().getAttribute("name");
System.out.println("姓名:"+name);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
当浏览器访问localhost:8080/web01/ServletDemo7和 localhost:8080/web01/ServletDemo8 时都能获取到以下内容:
代码语言:javascript代码运行次数:0运行复制姓名:张三
12. Servlet域对象的总结—数据访问范围
12.1 请求范围(ServletRequest
)
- 何时创建和销毁
- 创建:当用户向服务器发送一次请求,服务器创建一个Request对象
- 销毁:服务器对这次请求做出了相应,服务器就会销毁这个Request对象
- 如何存取数据
- 存数据:
Void setAttribute(String name, Object value);
- 取数据:
Object getAttribute(String name);
- 存数据:
- 作用范围
- 一次请求(转发就是一次请求)。
12.2 会话范围(HttpSession
)
- 何时创建和销毁
- 创建:服务器端第一次调用
getSession( )
方法的时候 - 销毁:三种情况
- Session过期(默认过期时间30分钟,
tomcat/conf/web.xml
可以修改) - 非正常关闭服务器(terminate或者服务器直接拔电源)。正常关闭服务器时,Session会保存在
tomcat/work/Catalina/localhost/
工程名 下 - 手动调用
session.invalidate()
- Session过期(默认过期时间30分钟,
- 创建:服务器端第一次调用
- 如何存取数据
- 存数据:
Void setAttribute(String name, Object value);
- 取数据:
Object getAttribute(String name);
- 存数据:
- 作用范围
- 一次会话,多个请求。
12.3 应用范围(ServletContext
)
- 何时创建和销毁
- 创建:服务器启动时创建,为每一个单独的web项目创建一个单独的
ServletContext
对象 - 销毁:服务器关闭或项目从服务器移除时。
- 创建:服务器启动时创建,为每一个单独的web项目创建一个单独的
- 如何存取数据
- 存数据:
Void setAttribute(String name, Object value);
- 取数据:
Object getAttribute(String name);
- 存数据:
- 作用范围
- 整个应用(项目任何位置都可以获得)。
本文标签: JavaWeb后端入门6Servlet
版权声明:本文标题:JavaWeb后端入门6—Servlet 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/jiaocheng/1748000163a2239845.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论