Servlet初学详解

12 篇文章 0 订阅
4 篇文章 0 订阅

Servlet学习

一、Servlet的认识

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和生成数据,生成动态Web内容。

编写一个Servlet程序只需完成下面两步:

  • 编写一个类,实现Servlet接口
  • 把开发好的Java类部署到web服务器中

简单明了一句话就是,实现了Servlet接口的Java程序叫做Servlet!

二、Servlet程序测试

完整步骤思路如下:

  1. 构建一个普通Maven项目,删除里面的src目录,其他文件保留,把该工程作为Maven的主工程

  2. 在上面Maven项目下创建新的Moudel,作为项目的子工程,子项目会继承父项目中的所有Java,可以直接使用。项目创建成功表现在:

    • 父项目的pom.xml有
    <modules>
        <module>servlet01</module>//为子共工程名称
    </modules>
    
    • 子项目的pom.xml有
     <parent>
         <artifactId>JavaWeb-02-maven</artifactId>//为主工程名称
         <groupId>com.yg</groupId>
         <version>1.0-SNAPSHOT</version>
     </parent>
    
  3. Maven环境优化

    • 修改web.xml为最新版本
    • 把Maven结构搭建完整
  4. 编写一个HelloServlet程序

    1. 创建一个普通类HelloServlet.java
    2. 实现Servlet接口(直接继承HttpServlet)

    例:

    public class HelloServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("进入doGet方法");
            PrintWriter writer = resp.getWriter();//响应流
            writer.print("hello,servlet!");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            super.doPost(req, resp);
        }
    }
    
  5. 编写Servlet的映射

    该步骤的作用:我们写的是Java程序,要想通过浏览器访问,则需要浏览器连接web服务器,所以我们需要在web服务中注册我们写的Servlet,给浏览器提供一个能访问的路径

    做法:

    <!-- 注册我们写的Servlet -->
    <servlet>
      <servlet-name>hello</servlet-name>
      <servlet-class>com.yg.servlet.HelloServlet</servlet-class>
    </servlet>
    <!-- 注册Servlet的请求路径-->
    <servlet-mapping>
      <servlet-name>hello</servlet-name>
      <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    
  6. 配置Tomcat

    1. 找到编辑位置

      image-20220424111108928

    2. 添加启动服务器

      image-20220424111325215

    3. 填写好相应信息

      image-20220424111639028

    4. 部署需要运行的工作

      image-20220424111929356

    5. 最后点击应用->确定,即可部署完成

  7. 启动测试

    image-20220424112455648

  8. 浏览器访问结果

    image-20220424112809125

    出现上面结果,恭喜你已经成功编写了第一个Servlet程序!

三、Servlet工作原理

Servlet是由Web服务器调用的,web服务器在收到浏览器请求后会:

image-20220424114836388

其中调用service(ServletRequest,ServletResponse)方法这一块是需要我们学习编写的,其他步骤都是我们看不到的!

四、Servlet Mapping问题

关于mapping问题详情可以看这篇文章:https://www.cnblogs.com/qianguyihao/p/4140529.html

由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml文件中使用元素和元素完成。

其中:

  1. 元素用于注册Servlet,它包含有两个主要的子元素:和,分别用于设置Servlet的注册名称和Servlet的完整类名。
  2. 一个元素用于映射一个已注册的Servlet的一个对外访问路径,它包含有两个子元素:和,分别用于指定Servlet的注册名称和Servlet的对外访问路径

注意!

  1. 一个可以对应多个,从而一个Servlet可以有多个路径来访问
  2. url-partten中的路径也可以使用通配符,但是只能有两种固定的格式*:一种格式是“.扩展名”,另一种格式是以正斜杠(/)开头并以“/”结尾。*
  3. 由于的引入,有可能一个路径被多个url-partten匹配,这是优先级判断条件如下:
    • 哪个越精确找哪个
    • *.后缀的格式永远匹配级最低
  4. 可以在标签里配置****可以用来指定启动顺序。Servlet默认是在第一次被访问的时候创建,如果配置了这个标签,就会随着Web应用的启动而创建

五、ServletContext应用

web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,它代表了当前的web应用

常见的ServletContext应用介绍:

  • 共享数据

    在这个Servlet中保存的数据,可以在另一个Servlet中取

    image-20220424162628414

    例:

    //创建SetServlet
    public class SetServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //创建一个ServletContext对象
            ServletContext context = this.getServletContext();
    
            //1.共享数据测试
            String username = "百度";//数据
            context.setAttribute("username",username);//将一个数据存放在ServletContext中,名字为:username,值为:username
        }
    }
    
    //创建GetServlet
    public class GetServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //创建一个ServletContext对象
            ServletContext context = this.getServletContext();
    
            //1.共享数据测试
            resp.setContentType("text/html");
            resp.setCharacterEncoding("utf-8");//设置响应字符编码
            String username = (String) context.getAttribute("username");//从context中取键为username的值
            resp.getWriter().print("名字:"+username);//在windows中打印出来
        }
    }
    

    web.xml中注册servlet:image-20220424163525379

    测试访问结果为:image-20220424163353970

  • 获取初始化参数

    在web.xml中配置一些web应用的初始化参数

    <context-param>
      <param-name>url</param-name>
      <param-value>https://www.baidu.com</param-value>
    </context-param>
    

    在GetServlet中编写以下代码

    //2.获取初始化参数测试
    String url = context.getInitParameter("url");
    resp.getWriter().println(url);
    
  • 请求转发

    在GetServlet中编写以下代码

    //3.请求转发测试
    RequestDispatcher requestDispatcher = context.getRequestDispatcher("/hello");//请求转发的路径
    requestDispatcher.forward(req,resp);//调用forward实现请求转发
    

    测试结果:image-20220424165151675

  • 读取资源文件

    Properties

    在resources模块下新建properties,Tomcat运行后会打包到了classes路径下,俗称classpath

    步骤:创建一个文件,然后在GetServlet中获取文件流即可

    • 创建db.properties

      username=root
      password=123456
      
    • GetServlet中获取

    //4.读取资源文件测试
    InputStream is = context.getResourceAsStream("/WEB-INF/classes/db.properties");//获取打包后web容器中的db.properties文件路径,并转化为流文件
    Properties prop = new Properties();
    prop.load(is);//把流文件加载加载进响应中
    String user = prop.getProperty("username");
    String pwd = prop.getProperty("password");
    resp.getWriter().println(user+":"+pwd);
    

最后测试结果即可!


学习路径参考

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Servlet 是 Java Web 开发中最基础的组件之一,其主要作用是处理客户端(浏览器)发出的 HTTP 请求并返回响应结果。在 Servlet 中,有一些常用的方法,下面对这些方法进行详细介绍。 1. `init()` 方法 `init()` 方法是 Servlet 的生命周期方法之一,表示 Servlet 初始化时调用的方法。在 Servlet 对象被创建后,容器会自动调用 `init()` 方法,用来对 Servlet 进行初始化,例如读取配置文件、建立数据库连接等。`init()` 方法只会被调用一次。 2. `service()` 方法 `service()` 方法是 Servlet 的核心方法,用来处理客户端发送的请求并生成响应结果。在每次客户端请求时,容器都会调用 `service()` 方法,将请求信息封装为一个 `ServletRequest` 对象和一个 `ServletResponse` 对象,然后调用具体的 `doXXX()` 方法(如 `doGet()`、`doPost()` 等)来处理请求。 3. `destroy()` 方法 `destroy()` 方法也是 Servlet 的生命周期方法之一,表示 Servlet 被销毁时调用的方法。在 Servlet 对象被销毁前,容器会自动调用 `destroy()` 方法,用来释放资源、关闭数据库连接等。`destroy()` 方法只会被调用一次。 4. `doGet()` 方法 `doGet()` 方法是处理 HTTP GET 请求的方法。当客户端发送 GET 请求时,容器会自动调用 `doGet()` 方法,并将请求信息封装为一个 `HttpServletRequest` 对象和一个 `HttpServletResponse` 对象,然后在此方法中编写处理逻辑,并通过 `HttpServletResponse` 对象生成响应结果。 5. `doPost()` 方法 `doPost()` 方法是处理 HTTP POST 请求的方法。当客户端发送 POST 请求时,容器会自动调用 `doPost()` 方法,并将请求信息封装为一个 `HttpServletRequest` 对象和一个 `HttpServletResponse` 对象,然后在此方法中编写处理逻辑,并通过 `HttpServletResponse` 对象生成响应结果。 6. `doPut()` 方法 `doPut()` 方法是处理 HTTP PUT 请求的方法。当客户端发送 PUT 请求时,容器会自动调用 `doPut()` 方法,并将请求信息封装为一个 `HttpServletRequest` 对象和一个 `HttpServletResponse` 对象,然后在此方法中编写处理逻辑,并通过 `HttpServletResponse` 对象生成响应结果。 7. `doDelete()` 方法 `doDelete()` 方法是处理 HTTP DELETE 请求的方法。当客户端发送 DELETE 请求时,容器会自动调用 `doDelete()` 方法,并将请求信息封装为一个 `HttpServletRequest` 对象和一个 `HttpServletResponse` 对象,然后在此方法中编写处理逻辑,并通过 `HttpServletResponse` 对象生成响应结果。 以上是 Servlet 中常用的方法,了解这些方法可以帮助我们更好地理解 Servlet 的工作原理,并能够编写出符合规范的 Servlet 程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值