首页 > 其他分享 >关于对ServletContext对象的应用详解

关于对ServletContext对象的应用详解

时间:2022-12-14 17:35:44浏览次数:49  
标签:对象 resp getx url 详解 ServletContext servlet hello

一.预准备工程

1.1 ServletContext的概念

ServletContext是用于存储信息的全局空间。它从服务器开始就存在,只有在服务器关闭后才释放。

ServletContext和Cookie、Session对比图如下:

1

2.1 创建新的Servlet项目

1.新建项目Servlet-02。

2.新建文件java,标记其为Sources Root。

3.新建接口为com.gowork.servlet

4.创建类helloservlet

5.继承HttpServlet

6.重写doGet和doPost方法

public class helloservlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Hello");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

7.注册hello,写映射

<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.gowork.servlet.helloservlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>

8.重新设置web容器路径—tomcat

C:\Users\24190\IdeaProjects\xiao\servlet-02\src\main\webapp

image-20220816093936346

测试可以正常访问!

二.ServletContext对象

做好了上面的准备过程,我们先了解一下几个对象

this.getInitParameter() 初始化参数
this.getServletConfig() servlet配置
this.getServletContext() servlet上下文

当web容器启动时,它将为每个web应用程序创建一个对应的ServletContext对象,该对象表示当前的web应用程序

  • 共享数据:我在这个servlet中保存的数据可以在另一个servlet中获得

    image-20220816095800249

2.1 新建类 GetServlet

1.继承HttpServlet。

2.重写doGet和doPost。

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    ServletContext context =this.getServletContext();
    String username = (String) context.getAttribute("username");
    resp.setContentType("text/html");
    resp.setCharacterEncoding("utf-8");
    resp.getWriter().print("我的用户名为"+username);

}

注册getx,写映射:如下

    <servlet>
        <servlet-name>getx</servlet-name>
        <servlet-class>com.gowork.servlet.getservlett</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>getx</servlet-name>
        <url-pattern>/getx</url-pattern>
    </servlet-mapping>

启动应用,测试项目

直接访问

http://localhost:8080/servlet-02/getx

会爆我的用户名为null

image-20220816102847581

这是因为,我们没有执行hello类,没有生成ServletContext对象,现在的ServletContext是空的,所以显示我的用户名为null。

那么,我们先访问hello,再来访问getx,如下图:

image-20220816103102165

image-20220816103118264

现在就出现了——我的用户名为上进小菜猪。

因为我们在第一次访问hello的时候,服务器端会执行helloservlet类,将ServletContext对象赋值。

我们再访问getx的时候,ServletContext就不为空了,而变成了上进小菜猪。

三.ServletContext应用

3.1 获取初始化函数

1.新建立一个类,类名为:servleDemo3。

2.继承HttpServlet。

3.重写doGet和doPost。

ServletContext comtext = this.getServletContext();

获取到之前访问得到的ServletContext对象值。

4.配置一下web应用初始化参数

<context-param>
    <param-name>url</param-name>
    <param-value>jdbc:mysql://localhost:3306/mybatis</param-value>
</context-param>

5.前台输出url的值

String url = comtext.getInitParameter("url");
resp.getWriter().print(url);

6.去配置表里,注册,写对应的映射。

<servlet>
    <servlet-name>url</servlet-name>
    <servlet-class>com.gowork.servlet.servletDemo3</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>url</servlet-name>
    <url-pattern>/url</url-pattern>
</servlet-mapping>

7,启动项目,访问:

image-20220816175045987

8.由上可以看出我们获取到了初始化函数。后期在这里链接我们的数据库。

jdbc:mysql://localhost:3306/mybatis

3.2 请求转发

1.首先先建立一个新的Demo方便我们操作,类名为servletDemo04。

2.配置好基础的步骤,与上面的配置步骤相同。

4.转发的请求路径

ServletContext context = this.getServletContext();   context.getRequestDispatcher("/url").forward(req,resp);

forward(req,resp);是实现了请求转发。

5.请求转发需要配置的注册表以及映射:

<servlet>
    <servlet-name>goandgo</servlet-name>
    <servlet-class>com.gowork.servlet.servletDemo04</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>goandgo</servlet-name>
    <url-pattern>/goandgo</url-pattern>
</servlet-mapping>

6.重新启动项目访问goandgo路径,观察下列结果。

image-20220816180455005

3.2.1 转发和重定向的区别

转发是服务器行为,重定向是客户端行为。

重定向是浏览器上的网址改变,转发是浏览器上的网址不变。

image-20220816113927938

3.3 读取资源文件

1.在build中配置resources,来防止我们资源导出失败的问题

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

image-20220816204947310

2.新建类 类名为:servletDemo05。

3.继承类,重写doGet

4.在resour目录下新建db.properties

username=zhu
password=123456

5.路径指向当前项目生成路径:

InputStream is=this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
Properties prop =new Properties();
prop.load(is);
String user = prop.getProperty("username");
String pas = prop.getProperty("password");

6.输出到页面

resp.getWriter().print(user+":"+pas);

7.写url注册与映射:

<servlet>
    <servlet-name>sx5</servlet-name>
    <servlet-class>com.gowork.servlet.servletDemo05</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>sx5</servlet-name>
    <url-pattern>/sx5</url-pattern>
</servlet-mapping>

8.访问localhost:8080/servlet-02/sx5

结果如下:

image-20220816214108147

标签:对象,resp,getx,url,详解,ServletContext,servlet,hello
From: https://blog.51cto.com/u_15568258/5935318

相关文章

  • 对于Servlet原理以及Mapping的五种映射和404页面的详解
    一.Servlet原理1,浏览器向web容器发送Http请求,我们这里用的web容器为tomcat。2.我们在Servlet里的protectedvoiddoGet(HttpServletRequestreq,HttpServletResponsere......
  • jsp页面通过JSTL表达式获取session中存储的对象的属性
    1.将user对象存入session  request.getSession().setAttribute("user",userSession);2.User类 publicclassUser{privateStringuserId;privateStringuser......
  • Vuex 详解
    state:import{Module,VuexModule}from'vuex-module-decorators'@ModuleexportdefaultclassVehicleextendsVuexModule{wheels=2}等同于下面的代......
  • Java继承详解
    继承的定义、功能及要求定义:class子类extends父类{}通常也称子类为派生类、父类为超类。功能: 继承的主要目的是使子类可以重用父类的结构,也可以根据子类功能的需......
  • 详解视频中动作识别模型与代码实践
    摘要:本案例将为大家介绍视频动作识别领域的经典模型并进行代码实践。本文分享自华为云社区《视频动作识别》,作者:HWCloudAI。实验目标通过本案例的学习:掌握C3D模型训......
  • @RequestBody中传递json里的对象,对象包含list属性,对应body里的格式
    以下就是对应格式,直接复制进接口文档相关工具即可{"userId":"88","openCostCenterDTO":[{"name":"大斯温例果取向","co......
  • JavaScript学习--Item29 DOM基础详解
    看完JavaScript高级程序设计,整理了一下里面的DOM这一块的知识点,比较多,比较碎!DOM在整个页面的地位如图:DOM(文档对象模型)是针对HTML和XML文档的一个API(应用程序编程接口)。DOM......
  • JavaScript的数据类型详解
    数据类型JavaScript中有5种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number和String。还有1种复杂数据类型——Object,Object本质上是由一组无序的名值对......
  • 14-咸鱼学Java-面向对象基础:类
    类类就相当于自定义类型,有自己的数据域,有自己的方法。属于一种用户自定义类型。类的目的就是模拟现实中存在的物体,如一个Person类,一个人他有自己的名字,年龄,性别等等,他有自己......
  • 面向对象编程
    面向对象编程Java的核心思想是oop初识面向对象方法的回顾与加深对象的创建分析面向对象的三大特性抽象类和接口内部类及oop实战面向过程&面向对象......