Servlet笔记(一)

Servlet笔记 - day1


一、引言
  1. 目前程序存在的问题
  • tomcat+html展示信息不变
  1. 原因:

    • html网页中的信息是静态的(数据不变)
    • tomcat直接读取html源文件中的内容,响应给浏览器
  2. 解决思路:

    • 将 Java程序交给 tomcat管理
    • 服务器调用Java程序,获得结果响应给浏览器
      在这里插入图片描述
二、Servlet
  1. 概念:

    (1) 在 服务器上运行的,用Java语言编写的一段程序。
    (2) 用于接收 client的请求(rquest),处理完成后把对应的结果响应(response)给client

    • 通常以网页的形式:是一种制作动态网页的技术

在这里插入图片描述

  1. Servlet标准:Servlet接口,JavaEE规范

(1) 接口:javax.servlet.Servlet
(2) 接口的位置:tomcat/lib/servlet-api.jar包中

  1. 自定义Servlet程序的三种方式:
    (1) class 类名 implements Servlet{}

    • 必须实现接口中的5个方法
    • 与协议无关

    (2) class 类名 extends GenericServlet{}

    • GenericServlet位于javax.servlet包中的抽象类
    • 必须实现service方法;
    • 与协议无关

    (3) class 类名 extends HttpServlet{}

    • HttpServlet位于java.servlet.http包中,需要覆盖service方法;

    • 与协议有关

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UWA3msT5-1609819136940)(1609733790601.png)]

三、第一个Servlet程序
第一个Servlet程序:动态显示当前系统时间。
  1. 准备工作:

    • 在Java Project项目中,必须导入Servlet的jar包
    • tomcat/lib/servlet-api.jar包中
  2. 编写Servlet程序 :

在这里插入图片描述

在这里插入图片描述

  1. 将servlet程序部署到tomcat(发布):

    • 注意:将带包结构的.class文件放到tomcat/webapps/web应用/WEB-INF/classes文件夹中

在这里插入图片描述

  1. 配置Servlet的 web.xml 文件:

    • 配置的目的:把不能直接运行的Servlet类转化为用户可以直接访问运行的类
    • 注意:每一个 web应用,有且只能有一个 web.xml文件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6xb5Q68C-1609819136949)(1609741928871.png)]

  2. 启动 tomcat:

    • tomcat的根目录/bin/startup.bat
    • 注意:只要更改web.xml 中的内容,必须重启tomcat服务器
  3. 访问/请求:

    • http://ip:port/web应用名/url-pattern
    • 例如:http://localhost:8989/myweb/first
    • 注意:访问地址中间不能带有任何空格

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lYHbFl5J-1609819136951)(1609742049077.png)]

四、Servlet中乱码解决
  1. 设置响应的内容类型:
    response.setContentType(“text/html”);
  2. 设置响应的字符集:
    response.setCharacterEncoding(“gbk”);
  3. 以上两句代码合成一句:
    response.setContentTyp("text/html;charset=“gbk”);
五、常见异常及解决方案
  1. 404 :请求资源无效
    解决方案:
    • url 地址栏的地址写错,特别是web应用名和url-pattern
    • 检查控制台是否有异常信息
    • 确认带包结构的 class 文件,已经拷贝到 server 的正确路径
    • 检查 web应用的 目录结构
  2. 405:
    解决方案:
    • 检查servlet中的service方法的声明是否正确
    • service方法中 不能调用父类的方法:super.service(参数);删除
  3. 500:服务器端错误
    解决方案:
    • java源代码运行过程中出现异常
    • 检查异常堆栈信息确定到错误行
    • 确认 web.xml 中的< servlet> 包名.类名< /servlet > 是否正确
  4. 运行正常,在浏览器提示下载或是另存为…
    解决方案:
    • 检查是否设置响应类型的参数:
    • response.setContentType(“text/html”);
  5. servlet修改后,没有变化
    解决方案:
    • servlet代码修改,tomcat需要重启,才能生效
六、MyEclipse集成开发Servlet和部署
  1. MyEclipse 管理 tomcat

    (1) 配置tomcat

    • window --> preferences --> 搜 tomcat —> tomcat 7.x -->
      点击 --> 选择Enable+tomcat目录 --> apply

    (2) 管理 tomcat窗口:

    • window --> showview --> other --> servers

    (3) 启动tomcat

    • servers --> tomcat7.x --> 右键 run server

    (4) 关闭 tomcat

    • servers --> tomcat 7.x --> 右键 stop server
  2. MyEclipse 开发部署 Servlet

    (1) 新建 web project

    ​ web项目自动创建对应的web应用目录结构:

    • WEB-INF
    • classes
    • web.xml

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wv9b0eve-1609819136952)(1609742673858.png)]

    (2) 编写 Servlet程序

    (3) 编写 配置文件 web.xml
    (4) 部署 web项目

    • servers --> tomcat8.x --> 右键 --> add deployment --> 选择部署项目
    • 注意:项目部署后,默认 server 上的web应用名 是 web project 项目名。
    • 查看web应用名:
      项目右键 --> properties -->MyEclipse --> Project Facets -->Web 点击右侧展示
七、请求Servlet的三种方式
  1. 浏览器通过地址栏直接请求:
    http://ip:port/web应用名/url-pattern

  2. 通过超链接请求:
    (1) 在server上创建 html网页,并且定义 a 标签
    (2) 指定a标签的href属性:
    < a href="/web应用名/url-pattern" > … < /a>

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lurb9nSZ-1609819136953)(1609744315670.png)]

  3. 通过表单请求
    在server上创建 html页面,并定义form 表单
    指定 form标签中的 action 属性:

    < form action="/web应用名/url-pattern">

    注意:
    1. 地址栏请求方式和超链接请求方式都是get发送方式
    2. 表单请求即可以get请求方式也可以post请求方式
    
八、Servlet接收请求参数
  1. 引入 :

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FJuzZhlQ-1609819136954)(1609745086389.png)]

  2. 获取表单数据(get和post方式):
    String value = request.getParameter(“表单元素的name”);

  3. 解决post请求数据中的中文乱码:
    request.setCharacterEncoding(“utf-8”);
    注意:设置编码,需要在接收请求参数之前设置

  4. Client带参请求:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TGFiUu2g-1609819136955)(1609745351378.png)]

    (1) Server获取Client请求参数:
    String value = request.getParameter(“表单元素的name”);

    (2) 解决Client请求参数乱码:

    • post提交方式乱码:

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4ET12kGR-1609819136956)(1609745440859.png)]

    • get提交方式乱码:修改 tomcat的 conf/server.xml中 < connector>

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hZFw1JeF-1609819136957)(1609745461415.png)]

九、Servlet生命周期
  1. servlet的生命周期 由 server tomcat 进行管理。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dQrj3MF0-1609819136958)(1609745555860.png)]

  2. 请求处理的完整过程:

    (1) client 向 server 发出请求
    (2) server 接到请求,解析URL地址,根据 /web应用名,确定唯一的 web.xml
    (3) 根据 /url-pattern,在 web.xml 找到中对应的
    注意: 找不到 报 404
    (4) 根据中的,找到中的


    (5) 根据中的 ,找到 中的


    (6) 根据 中的 ,找到 中的

    • server 在内存中获取该类的对象:
      • 第一次请求(对象不存在),使用反射创建该类的对象:
        obj = Class.forName(“包名.类名”).newInstance();
      • 以后再请求(对象存在),直接使用该对象

    (7) 调用 service 方法,处理请求,把结果响应给 client

  3. Servlet生命周期阶段【面试 题目】

    (1) servlet的生命周期 由 server tomcat 进行管理

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f50ewE2Q-1609819136960)(1609745996539.png)]

    (2) 扩充:同一个Servlet在tomcat整个启动过程中,只启动一次,默认是在client第一次请求时,也有特殊情况

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oloDnz0K-1609819136961)(1609746042953.png)]

  4. 思考:如何统计当前显示系统时间的Servlet被访问的次数。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Cya7hX6-1609819136962)(1609746104294.png)]

  5. 线程问题:
    (1) servlet在运行时,tomcat只为该类创建1个对象(servlet为单例设计),并由这个对象负责对所有请求它的client进行处理。 当多个client同时请求该servlet时,这个对象就成为多线程环境下的临界资源对象,此时必须保证该临界资源对 象的准备性和正确性(线程安全):

    • 方法一: 对临界资源对象操作不安全的代码 使用synchronized(效率低);
    • 方法二: 尽量避免在servlet中定义(有修改可能的)成员变量。

    (2) Servlet单例设计的优缺点:

    • 缺点:多线程环境下,数据不安全
    • 优点:提高效率,减小频繁创建对象带来的消耗;同时提高jvm内存空间的利用率

这个对象负责对所有请求它的client进行处理。 当多个client同时请求该servlet时,这个对象就成为多线程环境下的临界资源对象,此时必须保证该临界资源对 象的准备性和正确性(线程安全):

  • 方法一: 对临界资源对象操作不安全的代码 使用synchronized(效率低);
  • 方法二: 尽量避免在servlet中定义(有修改可能的)成员变量。

(2) Servlet单例设计的优缺点:

  • 缺点:多线程环境下,数据不安全
  • 优点:提高效率,减小频繁创建对象带来的消耗;同时提高jvm内存空间的利用率
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值