10-16/10-17 JavaWeb入门/servlet

news2024/11/15 7:00:29

JavaWeb

现实生活中的互联网项目都是javaWeb项目, 包含网络, 多线程, 展示: HTML等其他的前端技术, 界面窗体展示(Swing包,AWT包 窗体), C#,

JAVAWeb架构:(面试重点:要求记忆)
  • B/S: 浏览器/服务器

    优点: 以浏览器作为客户端, 使用这个软件, 用户不需要下载客户端, 程序更新,不需要更新客户端

    缺点: 通信协议固定: https(http+安全策略) http, 安全性相对比较低, 一直改善 (javaWeb大部分是B/S)

  • C/S 客户端/服务器: 客户端,服务器都是软件提供商开发的, 用户需要下载客户端, 客户端更新, 用户也需要更新客户端

    优点: 安全性高, 通信协议自定义, 窃取数据难度加大

资源

服务器存放的文件都称为资源, 代码,js,css,html,图片, 视频,音频, txt….

  • 静态资源

  • 动态资源

image-20231016092303803

资源访问: URL

URL组成部分:

协议(http(开发阶段)/https)://服务器ip:端口/资源路径

服务器ip:

  1. 直接写真实ip

  2. 如果是本地访问, 真实ip, localhost, 127.0.0.1

  3. 如果是远程, 买/租域名,来绑定服务器ip, 通过域名访问

端口:

http通信协议默认端口: 80

https通信协议默认端口: 443

web服务器

硬件服务器: 类似一台电脑

软件服务器: 程序(发布项目, 接收请求, 响应)

web软件服务器:

  • Tomcat(Apache):Apache基金组织,中小型的JavaEE服务器,仅仅支持少量的JavaEE规范servlet/jsp。开源的,免费的 学习

  • JBoss(JBOSS):大型的JavaEE服务器,支持所有的JavaEE规范,收费的。

  • Weblogic(Orcale):大型的JavaEE服务器,支持所有的JavaEE规范,收费的。

  • Websphere(IBM):IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。

tomcat的使用 (软件)

  1. 下载: apache官网下载 Apache Tomcat® - Welcome!

  1. 安装

    免安装版, 解压就可以使用, tomcat目录不要包含中文

启动tomcat: 在命令行的方式(了解),

在启动Tomcat之前,我们必须要配置环境变量 :

  • JAVA_HOME:必须先配置JAVA_HOME,因为Tomcat启动需要使用JDK;

  • CATALANA_HOME:如果是安装版,那么还需要配置这个变量,这个变量用来指定Tomcat的安装路径,例如:D: tomcat apache-tomcat-8.5.59。

启动:进入%CATALANA_HOME% bin目录,找到startup.bat,双击即可;

关闭:进入%CATALANA_HOME% bin目录,找到shutdown.bat,双击即可;

idea 整合tomcat 重点

idea2020之上, web项目删除了, 只能使用maven的方式

image-20231016101023299

Servlet

接收前端请求, 处理请求, 响应结果

 创建Servlet的方式

  1. 实现javax.servlet.Servlet接口

  2. 继承javax.servlet.GenericServlet抽象类

  3. 继承javax.servlet.http.HttpServlet抽象类(实际开发都使用该方式), 专门处理Http请求

Servlet类编写由程序员完成, Servlet对象创建, 方法的调用 不需要程序员手动创建与调用

Servlet对象创建由web服务器创建(tomcat),保存tomcat容器中

调用servlet的方法, 通过访问url调用

 

Servlet开发

1.编写一个类实现Servlet接口,重写抽象方法 

package com.fs.servlet;

import javax.servlet.*;
import java.io.IOException;

/**
* Servlet创建方式1
*  实现javax.servlet.Servlet接口
*  service 服务
*  servlet
*/
public class AServlet implements Servlet {
   /**
    * 生命周期方法  由tomcat调用
    *  创建该Servlet对象, 之后马上调用    初始化方法, 进行初始化操作
    * @param servletConfig
    * @throws ServletException
    */
   @Override
   public void init(ServletConfig servletConfig) throws ServletException {
       System.out.println("AServlet~创建成功了");
   }
   /**
    * 生命周期方法  由tomcat调用
    *  服务方法, 当前端发送请求该Servlet的url, 该方法就调用
    *  接收前端请求, 处理请求, 响应结果
    *  每请求一次,调用一次
    * @param servletRequest
    * @param servletResponse
    * @throws ServletException
    */
   @Override
   public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
       System.out.println("AServlet为您服务....");
   }

   /**
    * 生命周期方法  由tomcat调用
    *  该AServlet对象被销毁之前调用该方法  释放资源
    * @throws ServletException
    */
   @Override
   public void destroy() {
       System.out.println("AServlet正在死亡....");
   }

   /**
    * 获取ServletConfig对象(Servlet的配置),
    * @return
    */
   @Override
   public ServletConfig getServletConfig() {
       return null;
   }


   /**
    * 获取ServletInfo信息(Servlet描述信息)
    * 没有什么意义
    * @return
    */
   @Override
   public String getServletInfo() {
       return "AServlet是一个快乐的Servlet";
   }


}
2.

  1. 在web.xml文件中配置Servlet, 后期使用注解替换

绑定一个能够访问它的url

         <servlet>
          <!--servlet-name: 名字, 一般就是类名-->
          <servlet-name>AServlet</servlet-name>
          <!--servlet-class: 对应Servlet类, 全限定名-->
          <servlet-class>com.fs.servlet.AServlet</servlet-class>
      </servlet>

      <servlet-mapping>
          <servlet-name>AServlet</servlet-name>
          <!--绑定url 一般使用 /开头-->
          <url-pattern>/AServlet</url-pattern>
      </servlet-mapping>

提交方式:

  1. get请求: 超链接, 浏览器地址栏输入, form的method=“get”

请求参数通过url传递 , 安全性低

get请求无法提交文件数据

get请求请求参数大小限制

  1. post请求 form的method=“post”

请求参数通过请求体, url看不到, 安全性高

post请求,传递文件

  1. put请求

  2. delete请求

Http状态码:

100~500

200: 成功

404: 资源不存在

405: 方法不支持

500: 服务器内部出错, 后台抛出异常

 HttpServlet执行流程:

Servlet细节

Servlet中包含其他接口

ServletConfig Servlet的配置信息

  1. 获取Servlet的初始化参数, 固定参数, 在Servlet配置的时候,进行参数配置

  <servlet>
          <!--servlet-name: 名字, 一般就是类名-->
          <servlet-name>AServlet</servlet-name>
          <!--servlet-class: 对应Servlet类, 全限定名-->
          <servlet-class>com.fs.servlet.AServlet</servlet-class>

          <!--初始化参数-->
          <init-param>
              <param-name>name</param-name>
              <param-value>AServlet</param-value>
          </init-param>
          <init-param>
              <param-name>encoding</param-name>
              <param-value>UTF-8</param-value>
          </init-param>
      </servlet>

  1. 获取ServletContext对象

        getServletContext()

  1. ServletContext: 域对象, Servlet的上下文, Servlet运行环境 当前Servlet运行项目

一个Tomcat部署多个项目, 每一个项目在tomcat启动的时候, 产生对应的项目的ServletContext

ServletContext: 一个项目只能有一个, tomcat启动的时候, 就会创建该项目ServletContext对象,

ServletContext销毁在Tomcat关闭的时候

                

ServletContext 全局的存放数据容器, javaWeb中,把这个容器称为 域对象:

ServletContext对象称为: Application域, 全局共享的, 任何客户端,任何请求,访问任何资源, 都可以共享同一个ServletContext对象的数据

域对象: 动态资源之间的数据传递, 一定有下面几个:

  • 存数据

setAttribute(String name, Object value);

name唯一的, 如果调用setAttribute()方法存数据, key如果存在, 覆盖value

  • 取数据

Object getAttribute(String name) 如果name不存在,返回null

  • 删除数据

removeAttribute(String name)

  • 获取所有的属性名

Enumeration<String> getAttributeNames()

JavaWeb中有四大域:

  • page域: 当前某个动态资源有效

  • request域: 在同一次请求内有效

  • session域: 在同一次会话中有效, 同一次会话,包含N个请求, 分用户

  • Application域: 全局共享

案例: 统计网站的访问量

访问网站任何动态资源, 访问量+ 1

访问量数据, 使用容器保存, 域对象, 使用Application域存放数据

得到ServletContext对象

  • ServletConfig接口: getServletContext()

  • 如果继承HttpServlet, HttpServlet实现 ServletConfig接口, this.getServletContext()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1132651.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Cloud之服务熔断与降级(Hystrix)

目录 Hystrix 概念 作用 服务降级 简介 使用场景 接口降级 服务端服务降级 1.添加依赖 2.定义接口 3.实现接口 4.Controller类使用 5.启动类添加注释 6.浏览器访问 客户端服务降级 1.添加依赖 2.application.yml 中添加配置 3.定义接口 4.Controller类使用 …

Chat Towards Data Science|如何用个人数据知识库构建 RAG 聊天机器人?

生成式人工智能时代&#xff0c;开发者可以借助大语言模型&#xff08;LLM&#xff09;开发更智能的应用程序。然而&#xff0c;由于有限的知识&#xff0c;LLM 非常容易出现幻觉。检索增强生成&#xff08;RAG&#xff09;https://zilliz.com/use-cases/llm-retrieval-augment…

TS 入门指南

TS 类型基本用法 TS简介 TypeScript&#xff0c;简称 TS&#xff0c; 是一种由微软开发的编程语言&#xff0c;它是对 JavaScript 的一个增强让我们更加方便地进行类型检查和代码重构&#xff0c;提高代码的可靠性和可维护性同时&#xff0c;TypeScript 还支持 ECMAScript 的…

对长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中的所有值为x的数据元素

对长度为n的顺序表L&#xff0c;编写一个时间复杂度为O(n)&#xff0c;空间复杂度为O(1)的算法&#xff0c;该算法删除线性表中的所有值为x的数据元素 算法思路&#xff1a; 用count标记遇到x的次数&#xff0c;每次遇到x&#xff0c;count 遇到非x的元素&#xff0c;把它前移…

探索企业基本信息查询API:数据访问的便捷方式

前言 当涉及到获取企业的基本信息时&#xff0c;传统的方法往往需要大量的时间和人力资源&#xff0c;以收集、整理和验证数据。然而&#xff0c;现在有一种便捷的方式可以解决这个问题&#xff0c;那就是通过企业基本信息查询API。本文将探讨这种API是如何成为数据访问的便捷…

【Hive SQL】字符串操作函数你真的会用吗?

文章目录 ININSTRSUBSTRLOCATELIKE 前言&#xff1a; 今天在做一个需求的时候&#xff0c;需要判断字符串中是否包含一个子串&#xff0c;然后我发现了我平常没注意到的一个点&#xff0c;通过这篇博文来记录一下。 IN IN 函数用于判断一个元素是否存在于所给的元素组中&…

【基础架构设计】仿12306系统公共组件设计深度解析

仿12306系统学习 学习路线 12306 铁路购票系统学习总体分为三块&#xff1a;组件库开发、业务梳理以及业务系统开发。 组件库开发 组件库的产出源于对公共功能的封装&#xff0c;避免了在不同项目之间相互复制代码的情况。当然&#xff0c;如果这种复制代码的方式出现问题&a…

红酒种类及更多的红酒基本知识

从法国不拘一格的绿色牧场到北加州的金山&#xff0c;各种不同类型的红葡萄酒从淡色到豪放&#xff0c;从各种不同的种植地区走向世界各地的餐桌。来自云仓酒庄品牌雷盛红酒分享红葡萄酒在味道、酒体、颜色、香味以及它们提供的整体体验方面可以有很大的不同。 为合适的场合选…

amr文件苹果手机怎么打开?四个方法教会你!

Amr格式文件因其资源占用率低、传输方便&#xff0c;通常用作各大手机厂商广泛使用的一种保存录音文件的格式&#xff0c;非常适合制作来电铃声。但是amr音频格式的适用范围有限&#xff0c;很多时候就需要把amr转换成兼容性更好的mp3格式。如何将AMR文件转换为mp3然后在苹果手…

Linux 内核文件系统dentry_path_raw函数

文章目录 一、简介1.1 __dentry_path1.2 prepend_name1.3 d_path 二、dmeo参考资料 一、简介 // linux-5.4.18/fs/d_path.cchar *dentry_path_raw(struct dentry *dentry, char *buf, int buflen) {return __dentry_path(dentry, buf, buflen); } EXPORT_SYMBOL(dentry_path_r…

语雀停服8小时,P0级事故,故障原因和补偿来了。

昨天互联网圈子里发生了一件大事&#xff0c;那就是语雀的 P0 级事故&#xff0c;前后足足停服了 7 个多小时&#xff0c;放眼整个互联网的发展史&#xff0c;都是相当炸裂的表现。 语雀是技术大牛玉伯在蚂蚁金服内部孵化出来的一个云端知识库&#xff0c;整体的界面非常清爽&…

[SQL开发笔记]IN操作符: 在WHERE子句中规定多个值

上一实例我们在where子句使用(year2022 or year2020)&#xff0c;如果我们需要在WHERE子句中规定多个值呢&#xff1f;这时我们将学习IN操作符 一、功能描述&#xff1a; 在WHERE子句中规定多个值。 二、IN操作符语法详解&#xff1a; IN操作符语法&#xff1a; SELECT col…

【Linux】MAC帧协议 + ARP协议

文章目录 &#x1f4d6; 前言1. 数据链路层2. MAC帧格式3. 再谈局域网4. ARP协议4.1 路由器的转发过程&#xff1a;4.2 ARP协议格式&#xff1a; 5. 如何获得目的MAC地址 &#x1f4d6; 前言 在学完网络层IP协议之后&#xff0c;本章我们将继续向下沉一层&#xff0c;进入到数…

STM32-通用定时器

通用定时器 通用定时器由一个可编程预分频器驱动的16位自动重新加载计数器组成。应用&#xff1a;测量输入的脉冲长度信号&#xff08;输入捕获&#xff09;、产生输出波形&#xff08;输出比较和PWM&#xff09;。 脉冲长度和波形周期可以从几微秒调制到几毫秒&#xff0c;使用…

记录隐藏挖矿木马rcu_tasked的查杀

记录一次项目中挖矿病毒的经历 这是黑客使用的批量蔓延病毒的工具&#xff0c;通过如下脚本 [rootServer .cfg]# cat /home/pischi/.bash_history cd /root/ nvidia-smi;ls -a;cd .cfg;ls -a;wc -l ip ./key 20 -f ip pass 22 "nproc;nvidia-smi;rm -rf .cfg;mkdir .cfg…

怎么做好网络软文推广?媒介盒子为你揭秘

不管是初创公司还是成熟公司&#xff0c;都需要打响品牌知名度&#xff0c;而有些公司在网络推广中的预算不是很高&#xff0c;这个时候就可以利用软文进行推广&#xff0c;今天媒介盒子就来告诉大家&#xff0c;如何写好网络推广软文。 一、 明确推广目标 确定推广目标有助于…

【备考网络工程师】如何备考2023年网络工程师之常见考点篇(1)

文章目录 写在前面涉及知识点1、NSLOOKUP命令设置的几个类型&#xff08;DNS服务器资源记录类型&#xff09;2、结构化综合布线系统的组成3、xDSL及相关概念4、私有地址及A-E类地址4.1 、私有地址4.2 、A-E类地址 总结 写在前面 其实做模拟或真题时候&#xff0c;总是会在关键…

建联合作1000+达人,如何高效管理?

随着社交媒体的发展&#xff0c;达人营销已成为品牌营销重要的方式之一&#xff0c;甚至可以说是必选项。 对于很多品牌商家来说&#xff0c;一次合作几百个不同类型、不同社媒平台的达人&#xff0c;已屡见不鲜。在电商大促前、主推单品爆品时&#xff0c;同时合作上千个达人&…

通过js来实现用身份证号来判断性别和出生年月

html: <input type"text" id"shenfenzhenghao" oninput"hao()" placeholder"证件号"><input type"text" id"xingbie" disabled"disabled" placeholder"性别"><input type&qu…

CVPR 2024 延期!

点击下方卡片&#xff0c;关注“CVer”公众号 AI/CV重磅干货&#xff0c;第一时间送达 点击进入—>【计算机视觉和Transformer】交流群 扫码加入CVer知识星球&#xff0c;可以最快学习到最新顶会顶刊上的论文idea和CV从入门到精通资料&#xff0c;以及最前沿项目和应用&…