servlet(1)

本文介绍了Java Web程序的概念,以及B/S架构与C/S架构的区别。重点讲解了B/S架构的程序,如Servlet的定义、作用以及常见的Web服务器。接着阐述了动态网页技术,包括CGI、ASP、PHP和Servlet/JSP。详细展示了如何在IDEA中创建一个基于Maven的Web项目,并创建Servlet程序。最后,讨论了Servlet的生命周期和方法,以及在实际运行中的调用顺序。

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

1.什么是javaweb程序?

   就是通过java和web技术的组合开发出来的应用程序。

   web(全球广域网)

2.什么是B/S架构的程序?

   B/S----B【浏览器】S【服务器】

   通过浏览器来访问服务器上的程序的这种结构就是B/S架构的程序。

   C/S----C【客户端】S【服务器】

             

3.B/S架构的程序与C/S架构的程序比较

B/S架构

C/S架构

B【浏览器】S【服务器】

C【客户端】S【服务器】

浏览器来访问服务器上的程序

浏客户端访问服务器上的程序

本地磁盘空间的占用少

本地磁盘空间的占用多

维护成本低,容易维护

维护成本高,不容易维护

现在我们所开发的大部分程序都是基于B/S架构的程序。

4.Web程序发展过程

       早期web程序就是访问静态网页。结果是大家访问的静态网页中的内容不会随着个人需求发生变化。 【固定制式】

       随着人们需求的变化,要求访问的网页中的内容要根据个人的需求而发生变化。

       出现了动态网页技术,解决了要求网页中的内容要根据个人的需求而发生变化的问题。

5.常见的动态网页技术

       1.CGI[通用网关接口]---动态网页技术【不支持多线程,基于进程】

       2.ASP 、 PHP、Servlet/JSP---动态网页技术 [支持多线程]

       ASP----C#语言

       PHP---PHP的语法

       Servlet/JSP---java语言

6.什么是Servlet?

       用java语言编写的运行在服务器上,处理用户请求做出相应的小服务程序.

7.常见的Web服务器

       Apache Tomcat---开源

       IIS(Internet信息服务)英文Internet Information  Server的缩写  --- 微软

       Weblogic  ---  Oracle

       WebSphere  --- IBM 

   我们选择ApacheTomcat服务器作为我们的Servlet程序的运行服务器。

       1.开源,免费

       2.完美的支持Servlet/JSP

8.创建基于idea的Maven的web项目

新建项目---选择maven---选择webapp

命名

 

 

设置maven配置信息

 

打开pom.xml---<dependencies>---添加servlet-api的依赖包

在中央仓库搜索到此依赖包

 

将代码赋值粘贴到pom.xml中的dependencies处

 

外部库中出现依赖包即成功

 

创建Servlet程序:

项目结构----模块----main----新建文件夹----建2个,一个java,一个test,并设置好标记。

 

 

创建包---创建java类----继承HttpServlet

 

重写方法

 

具体重写代码:

public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //设置请求和响应的字符编码
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        //得到字符输出流
        PrintWriter out=resp.getWriter();
        //向浏览器输出一个html网页
        out.println("<!DOCTYPE html>");
        out.println("<html>");
        out.println("<head>");
        out.println("<meta charset=\"UTF-8\">");
        out.println("<title>Document</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Hello,你好</h1>");
        out.println("</body>");
        out.println("</html>");
        out.close();

在webapp/WEB-INF/web.xml

 

部署服务器并运行

 

http://localhost:8080/servletweb2/hello

此地址servletweb为部署项目时的名称,hello为web.xml中url-pattern中写的

 

9. Servlet的生命周期

在 Java 中,任何对象都有生命周期,Servlet 也不例外。

 

Servlet 的生命周期。按照功能的不同,大致可以将 Servlet 的生命周期分为四个阶段,分别是加载实例化阶段、初始化阶段、运行阶段【处理请求】和销毁阶段。

  1. 加载实例化阶段

当Servlet容器启动以后,会加载项目的web.xml配置文件,并解析得到所有配置好的servlet-class中配置的包名+类名,通过反射机制就实例化好了包名+类名对应的Servlet类对象。

  1. 初始化阶段

当客户端向 Servlet 容器发出 HTTP 请求要求访问 Servlet 时,Servlet 容器首先会解析请求,检查内存中是否已经有了该 Servlet 对象,如果有,则直接使用该 Servlet 对象,如果没有,则创建 Servlet 实例对象,然后通过调用 init() 方法实现 Servlet 的初始化工作。需要注意的是,在 Servlet 的整个生命周期内,它的 init() 方法只能被调用一次。

3.运行阶段【处理请求】

这是 Servlet 生命周期中最重要的阶段,在这个阶段中,Servlet 容器会为这个请求创建代表 HTTP 请求的 ServletRequest 对象和代表 HTTP 响应的 ServletResponse 对象,然后将它们作为参数传递给 Servlet 的 service() 方法。
service() 方法从 ServletRequest 对象中获得客户请求信息并处理该请求,通过 ServletResponse 对象生成响应结果。
在 Servlet 的整个生命周期内,对于 Servlet 的每一次访问请求,Servlet 容器都会调用一次 Servlet 的 service() 方法,并且创建新的 ServletRequest 和 ServletResponse 对象,也就是说,service() 方法在 Servlet 的整个生命周期中会被调用多次。

4.销毁阶段

当服务器关闭或 Web 应用被移除出容器时,Servlet 随着 Web 应用的关闭而销毁。在销毁 Servlet 之前,Servlet 容器会调用 Servlet 的 destroy() 方法,以便让 Servlet 对象释放它所占用的资源。在 Servlet 的整个生命周期中,destroy() 方法也只能被调用一次。

需要注意的是,Servlet 对象一旦创建就会驻留在内存中等待客户端的访问,直到服务器关闭或 Web 应用被移除出容器时,Servlet 对象才会销毁。

public class HelloServlet extends HttpServlet {

    @Override

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        doPost(req, resp);

        System.out.println("处理用户请求do-get");



    }

    @Override

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

       //设置请求和响应的字符编码

        req.setCharacterEncoding("utf-8");

        resp.setCharacterEncoding("utf-8");

        //得到字符输出流

        PrintWriter out=resp.getWriter();

        //向浏览器输出一个html网页

        out.println("<!DOCTYPE html>");

        out.println("<html>");

        out.println("<head>");

        out.println("<meta charset=\"UTF-8\">");

        out.println("<title>Document</title>");

        out.println("</head>");

        out.println("<body>");

        out.println("<h1>Hello,你好</h1>");

        out.println("</body>");

        out.println("</html>");

        out.close();

        System.out.println("处理用户请求do-post");

    }



    @Override

    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        System.out.println("启动有http的service");

        super.service(req, resp);

        System.out.println("有http的service");

    }



    @Override

    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {

        System.out.println("启动无http的service");

        super.service(req, res);

        System.out.println("无http的service");

    }



    @Override

    public void init(ServletConfig config) throws ServletException {

        System.out.println("启动有参的init");

        super.init(config);

        System.out.println("有参init");

    }



    @Override

    public void init() throws ServletException {

        System.out.println("启动无参的init");

        super.init();

        System.out.println("无参init");



    }



    @Override

    public void destroy() {

        super.destroy();

        System.out.println("销毁");

    }

}



查看运行顺序:

 

启动有参的init-------里面调用无参的init----无参init结束----有参init结束------启动无http的service-----里面调用有参的http的service----do-post-----do-get-----结束有http的service-----结束无http的service----关闭服务器就启动销毁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java-请多指教

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值