码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Servlet


    一、Servlet概述

    1.什么是Servlet

    Servlet是JavaWeb的 三大组件之一 ,它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:

    • 接收请求数据;

    • 处理请求;

    • 完成响应。

    2.实现Servlet的方式

    • 实现javax.servlet.Servlet接口

      1. public class BServlet implements Servlet {
      2. @Override
      3. public void init(ServletConfig servletConfig) throws ServletException {
      4. }
      5. @Override
      6. public ServletConfig getServletConfig() {
      7. return null;
      8. }
      9. @Override
      10. public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
      11. //得到请求参数
      12. String username = servletRequest.getParameter("username");
      13. String age = servletRequest.getParameter("age");
      14. //System.out.println("username:"+username);
      15. //System.out.println("age:"+age);
      16. //得到响应输出流
      17. // 写js脚本
      18. //servletResponse.getWriter().print("

        hello client

        "
        );
      19. if(username != null && username.equals("张三")){
      20. //跳转到index.html 使用js脚本 location.href 赋一个url, 实现页面跳转
      21. servletResponse.getWriter().print("");
      22. }else{
      23. servletResponse.getWriter().print("");
      24. }
      25. }
      26. @Override
      27. public String getServletInfo() {
      28. return null;
      29. }
      30. @Override
      31. public void destroy() {
      32. }
      33. }

    • 继承javax.servlet.GenericServlet抽象类

      1. public class CServlet extends GenericServlet {
      2. @Override
      3. public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
      4. servletResponse.getWriter().print("CServlet....");
      5. }
      6. }

    • 继承javax.servlet.http.HttpServlet抽象类 实际开发中使用这种方式

      1. /**
      2. * 实现Servlet的第三种方式, 继承HttpServlet
      3. */
      4. // name 忽略:
      5. //@WebServlet(name="DServlet",urlPatterns="/DServlet")
      6. //@WebServlet(urlPatterns="/DServlet")
      7. //urlPatterns 与value 等同
      8. //@WebServlet(value="/DServlet")
      9. // 如果只给value赋值, 省略 value=
      10. @WebServlet("/DServlet")
      11. public class DServlet extends HttpServlet {
      12. //处理get请求
      13. @Override
      14. protected void doGet( HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      15. resp.getWriter().print("DServlet....");
      16. }
      17. //处理post请求
      18. @Override
      19. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      20. }
      21. }

     在WEB-INF/web.xml文件中进行配置(老方法)

    1. <servlet>
    2. <servlet-name>AServletservlet-name>
    3. <servlet-class>com.fs.web.AServletservlet-class>
    4. servlet>
    5. <servlet-mapping>
    6. <servlet-name>AServletservlet-name>
    7. <url-pattern>/AServleturl-pattern>
    8. servlet-mapping>

    二、Servlet接口

    1.Servlet的生命周期

    描述Servelet的一生, 从生到死过程

    1. 默认情况: Servlet第一次请求的时候,由Tomcat创建

    2. 调用init()方法

    3. 用户每请求一次这个Servlet, tomcat调用一次service()方法

    4. 当Tomcat服务器关闭之前, 销毁它创建的所有对象,包含创建Servlet, 在Servlet销毁之前, 调用destroy()

    2.Servlet中的其他对象

      1.ServletConfig 对象: 对应Servlet的配置, Tomcat创建

    1. 获取Servlet的初始化参数 参数名,参数值 都是String类型

    String getInitParameter(String name) 根据初始化参数名获取初始化参数值

    Enumeration getInitParameterNames() 获取所有的初始化参数name

    1. <servlet>
    2. <!-- 名称 随意取, 一般取名类名-->
    3. <servlet-name>AServlet</servlet-name>
    4. <!--对应的Servlet类, 全限定名(包.类名) -->
    5. <servlet-class>com.fs.web.AServlet</servlet-class>
    6. <!--配置初始化参数-->
    7. <init-param>
    8. <param-name>name</param-name>
    9. <param-value>张三</param-value>
    10. </init-param>
    11. <init-param>
    12. <param-name>age</param-name>
    13. <param-value>21</param-value>
    14. </init-param>
    15. </servlet>

    2.ServletContext getServletContext() 得到ServletContext , 最大域对象(Application域)

    2.ServletRequest对象: 请求对象, 后面详细讲 核心 Tomcat创建

    核心方法: 获取请求参数

    String getParameter(String name) 根据请求参数name获取请求参数值

    前端发送请求有哪些方式:

    1. form 的action 可以是get,post method: 默认值get, 设置post,发送post请求

    2. 超链接 只能get

    3. 直接在浏览器地址栏输入url 只能get

    4. js发送ajax请求 可以是get,post

    请求方式: GET请求/POST请求

    get请求: 请求参数通过url传递, 请求参数 url: url?k1=v1&k2=v2&...

    不安全, 传递字符串, 不能传递文件数据

    post请求: 请求参数通过请求体传递,

    安全性高, 传递字符串, 传递文件数据

    3.ServletResponse对象: 响应对象, 后面详细讲 核心 Tomcat创建  

    getWriter() 得到字符响应输出流, 服务器通过改输出流,把数据写到客户端的浏览器页面上

    System.out.println(): 把数据打印到服务器的控制台

    1. System.out.println("AServlet 正在服务...");
    2. //获取Servlet配置
    3. //System.out.println("Servlet的名字:"+servletConfig.getServletName());
    4. //获取初始化参数
    5. //根据初始化参数名获取值
    6. String name = servletConfig.getInitParameter("name");
    7. System.out.println("name:"+name);
    8. //获取所有的初始化参数名
    9. Enumeration<String> names = servletConfig.getInitParameterNames();
    10. //遍历
    11. while(names.hasMoreElements()){
    12. String key = names.nextElement(); //参数名
    13. String value = servletConfig.getInitParameter(key);
    14. System.out.println("key:"+key+"--value:"+value);
    15. }

    三、注解servlet

    解: 特殊的接口, 在方法,类,属性.... @注解名 (创建注解类的对象)

    类类型: class interface enum @interface

    注解作用: 替换配置文件

    常用! 

    @WebServlet注解 替换servlet的配置文件

    1. // name 忽略:
    2. //@WebServlet(name="DServlet",urlPatterns="/DServlet")
    3. //@WebServlet(urlPatterns="/DServlet")
    4. //urlPatterns 与value 等同
    5. //@WebServlet(value="/DServlet")
    6. // 如果只给value赋值, 省略 value=
    7. @WebServlet("/DServlet")

    四、servlet细节

    1. servlet是否是一个线程安全? 判断依据: 多个线程是否共享同一资源, 是共享, 线程不安全, 不是共享, 线程安全

    AServlet类在Tomcat只有一个对象, 多个请求,请求的同一个Servlet对象, 多个线程使用的同一个对象, Servlet对象共享, 线程不安全

    一定不要再Servlet提供存放数据的属性

    2.Servlet的url-pattern: 给这个servlet绑定一个url

    1.一个Servlet只能绑定一个Url?

    可以绑定多个url, 但是实际开发一般只绑定一个

    2.url-pattern的写法

    • /字符串 绑定确定的url

    • 结合 * (通配符, 任意)

      • /user/* 前缀匹配, 只要前面是/user开头,后面的任意 /user/a /user/b

      • *.后缀名 后缀匹配, 只要url后面以 后缀名结尾的都匹配 *.do a.do c.do

    注意: /*.后缀名 错误写法

    - /* 匹配所有

    url的匹配, 越精确,优先级越高, 没有*的url优先级高于有*的

    3.Servlet的默认创建时机: 第一次请求该Servlet才创建, 第一次惩罚, 第一次请求耗费时间多一点

    修改Servlet的创建时机: 在web服务器启动的时候,创建Servlet

    1. <servlet>
    2.      
    3.      <load-on-startup>非负整数load-on-startup>
    4.  servlet>

    load-on-startup 中的数字越小,越先创建

    注解:

    @WebServlet(value="/*",loadOnStartup=2)

     

    五、ServletContext(上下文)

    与天(tomcat)同寿

    ServletContext 在Tomcat启动的时候创建, 在tomcat关闭的时候销毁, 在整个web项目中只有一个

    在Web项目任何一个用户任何一个地方都可以访问

    作用: 作为全局共享数据容器

    称为域对象 ServletContext 称为application域

    域对象作用: 存放数据,取数据, key/value对结构 key: String value:Object

    javaWeb中有四大域:

    application域 整个项目有效

    session域 常用 在同一次会话内有效

    request域 常用 在同一次请求内有效

    page域 在同一个页面/Servlet有效: 等同于this

    域对象都有下列方法

    void setAttribute(String name,Object object) 往域中存数据, 如果name不存在,就添加,如果name存在,覆盖object

    Object getAttribute(String name) 从域中获取数据, 如果name不存在, 返回null

    removeAttribute(String name) 从域中删除数据

    Enumeration getAttributeNames() 获取域中所有的name

  • 相关阅读:
    rhcsa安装及配置
    基于JAVA医院管理系统计算机毕业设计源码+系统+数据库+lw文档+部署
    IPv6转换难点分析之一:国家监测指标-中科三方
    100天精通Python(可视化篇)——第101天:Pyecharts绘制多种炫酷仪表盘图参数说明+代码实战
    [附源码]Python计算机毕业设计SSM精品旅游项目管理系统(程序+LW)
    对MDB数据库进行查询、删除记录、添加等功能的实现
    多快递统一管理教程
    robotframework 获取当前时间
    【C++】C++多线程库的使用
    @RequestMapping注解标识的位置
  • 原文地址:https://blog.csdn.net/H215919719/article/details/127412294
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号