栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JavaEE之Servlet 的使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaEE之Servlet 的使用

二、Servlet 2.1Servlet的实现

Servlet 是 Server 与 Applet 的缩写,是服务端小程序的意思。使用 Java 语言编写的服务器端程序,可以生成动态的 WEB 页,Servlet 主要运行在服务器端,并由服务器调用执行, 是一种按照 Servlet 标 准来开发的类。

Servlet 本质:

  • Java 类,但要遵循 Servlet 规范进行编写,没有 main()方法,它的创建、使用、销毁都由 Servlet 容器进行管理(如 Tomcat)。

Servlet容器:

  • 指提供了 Servlet 功能的服务器,其常见容器有很多,如 Tomcat, Jetty, WebLogic ,Server, WebSphere, JBoss 等等。
2.1.1Servlet实现规范
  1. 继承HttpServlet接口

  2. 重写service方法

    ​ 实现请求处理的操作

    @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //请求处理的操作
            System.out.println("servlet");
        }
    

  3. 设置注解@WebServlet

    //设置注解@WebServlet
    @WebServlet("/serv02")
    public class Servlet02 extends HttpServlet {
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("servlet");
        }
    }
    

    ​ "/serv02"表示的是访问该servlet的 url 映射(地址)

2.2 Servlet执行流程
  1. 通过请求头获知浏览器访问的是哪个主机
  2. 再通过请求行获取访问的是哪个一个web应用
  3. 再通过请求行中的请求路径获知访问的是哪个资源
  4. 通过获取的资源路径在配置中匹配到真实的路径,
  5. 服务器会创建servlet对象,(如果是第一次访问时,创建servlet实例,并调用init方法进行初始化

操作)

  1. 调用service(request, response)方法来处理请求和响应的操作
  2. 调用service完毕后返回服务器 由服务器讲response缓冲区的数据取出,以http响应的格式发送给

浏览器

  • servlet执行原理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zlGzdCWj-1650454206856)(JavaEE.assets/servlet执行原理(文字描述).png)]

图解:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1ALRtmUH-1650454206857)(JavaEE.assets/servlet执行原理.png)]

2.3 servlet 生命周期

Servlet没有 main()方法,不能独立运行,它的运行完全由 Servlet 引擎来控制和调度。 所谓生命周期,指的是 servlet 容器何时创建 servlet 实例、何时调用其方法进行请求的处理、 何时并销毁其实例的整个过程。

  • 实例和初始化时机

    • 当请求到达容器时,容器查找该 servlet 对象是否存在,如果不存在,则会创建实例并进行初始化。
    • 调用init()方法在 Servlet 实例创建之后执行,只执行一次
    public void init() {
            System.out.println("实例创建了");
        }
    
  • 就绪/调用/服务阶段

    • 有请求到达容器,容器调用 servlet 对象的 service()方法,处理请求的方法在整个生命周期中可以被多次调用;
    • service()方法,每次有请求到达某个 Servlet 方法时执行,用来处理请求,可执行多次
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
            System.out.println("service服务被调用了");
        }
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TgxGk0rJ-1650454206858)(JavaEE.assets/1c950a7b02087bf41bc3ef042f6cff2b10dfcf73.jpeg)]

  • 销毁时机

    • 当容器关闭时(应用程序停止时),会将程序中的 Servlet 实例进行销毁。
    • destroy()方法,,Servlet 实例销毁时执行,只执行一次
    public void destroy() {
            System.out.println("destroy销毁方法,服务已关闭");
        }
    

    Servlet 的生命周期,简单的概括这就分为四步:servlet 类加载–>实例化–>服务–>销毁。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7uB0loHN-1650454206859)(JavaEE.assets/1650369407186.png)]

2.4 request对象 2.4.1 request的post请求乱码问题
  • 解决方案
    • 在获取参数前,设置request的编码:request.setCharacterEncoding(“UTF-8”);
2.4.2 请求转发
  • 特点:

    • 是一种服务器的行为,当客户端请求到达后,服务器进行转发,此时会将请求对象进行保存,地址栏中的 URL 地址不会改变,得到响应后,服务器端再将响应发送给客户端,从始至终只有一个请求发出
  • 步骤:

    • 通过request对象获取请求转发对象
    @Override
        protected void service(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {
            //请求转发到页面
            if(uname.equals("admin")){
                request.getRequestDispatcher("index.html").forward(request,resp);
            }else{
                request.getRequestDispatcher("login.jsp").forward(request,resp);
            }
    
            //请求转发到 servlet
            request.getRequestDispatcher("ser07").forward(request,resp);
    
        }
    
2.4.3 request 作用域

通过request对象可以在一个请求中传递数据,

  • 作用范围:

    • 在一次请求中有效,即服务器跳转有效。
  • 一般用于前后台交互,后台响应数据给客户端(设置域对象),客户端获取域对象显示数据(获取域对象)

  • 常用方法:

    • // 设置域对象内容

    • request.setAttribute(String name, String value);

    • // 获取域对象内容

    • request.getAttribute(String name);

    • // 删除域对象内容

    • request.removeAttribute(String name);

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/820121.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号