写点什么

Servent

作者:喜羊羊
  • 2022 年 9 月 08 日
    河南
  • 本文字数:5627 字

    阅读完需:约 18 分钟

Servent

Servent

关于系统架构

1.系统架构包括什么形式?


  • C/S 架构

  • B/S 架构


2.C/S 架构?


  • Client/Server(客户端/服务器)

  • C/S 架构的软件或者说系统有哪些呢?

  • C/S 框架的特点:无需安装特定的客户端软件

  • C/S 框架的系统优点和缺点分别是什么?

  • 优点:

  • 速度好(软件中的数据大部分都是集成到客户端软件中的,很少量的数据从服务器端传送过来,所以 C/S 结构的系统速度快)

  • 体验好(速度又快,界面又酷炫,当然体验好了)

  • 界面酷炫(专门的语言去实现界面的,更加灵活)

  • 服务器压力小(因为大量的数据都是集成在客户端软件当中,所以服务器只需要传送很少的数据量,当然服务器压力小)

  • 安全(因为大量的数据是集成在客户端软件当中的,并且客户端有很多个,服务器虽然只有一个,就算服务器那边受损了,问题也不大,因为大量的数据在多个客户端上有缓存,有存储,所以从这个方面来说,C/S 结构的系统比较安全)

  • 缺点:

  • 升级维护比较差劲(升级维护比较麻烦,每一个客户端软件都需要升级,有一些软件不是那么容易安装的)


3.B/S 架构


  • B/S(Browser/Server,浏览器/服务器)

  • http://www.baidu.com

  • http://www.jd.com

  • B/S 结构的系统还是一个 c/s,只不过这个 C 比较特殊,这个 Client 是一个固定不变的浏览器软件

  • 优点:

  • 升级维护方便,成本比较低。(只需要升级服务器端即可)

  • 不需要安装特定的客户端软件,用户操作极其方便,只需要打开浏览器,输入网址即可

  • 缺点:

  • 速度慢(不是因为带宽低的问题,是因为所有的数据都是在服务器上,用户发送的每一个请求都是需要服务器全身心地响应数据,所以)

  • 体验差(界面不是那么酷炫,因为浏览器只支持三个语言 HTML css JavaScript 再加上速度慢)

  • 不安全(所有的数据都在服务器上,只要服务器发生销毁,最终数据全部丢失)


4.c/s 和 B/S 结构哪个好,哪个不好?


  • 这个问题在不同的业务场景下有不同的使用场景

  • 娱乐性软件建议使用?

  • c/s 结构

  • 公司内部使用的一些业务软件建议使用?

  • 公司内部使用的系统,需要维护成本低

  • 公司内部使用的系统,不需要很酷炫

  • 公司内部使用的企业版系统主要是能够进行数据的维护即可

  • B/S 结构


5.注意了:开发 B/S 结构的系统,其实就是开发网站,其实就是开发一个 WEB 系统


  1. 开发一个 web 系统需要哪些技术


  • web 前端(运行在浏览器上的程序)

  • html

  • css

  • javascript

  • web 后端(web 服务器端的程序)

  • Java 可以(java 做 web 开发我们称为 javaweb 开发,javaweb 开发最核心的规范:Servlet[Servent Applet 服务器的 Java 小程序])

  • c 语言也可以

  • c++也可以

  • python 也可以

  • php 也可以

B/S 结构的系统通信原理(没有涉及到 Java 小程序)

  • web 系统的访问过程

  • 第一步:打开浏览器

  • 第二步:找到地址栏

  • 第三步:输入一个合法的网址

  • 第四步:回车

  • 第五步:在浏览器上会展示响应的结果

  • 关于域名

  • http://www.baidu.com/(网址)

  • www.baidu.com是一个域名

  • 在浏览器地址栏中输入域名,回车之后,域名解析器会将域名解析出来一个具体的 ip 地址和端口号等

  • 解析结果也许是:http://110.242.68.3:80/index.html

  • ip 地址是啥?

  • 计算机在网络当中的一个身份证号,ip 地址是唯一的

  • A 计算机要想和 B 计算机通信,首先需要知道 B 计算机的 IP 地址,有了 IP 地址才能建立连接

  • 端口号是啥?

  • 一个端口代表一个软件(一个端口代表一个应用,一个端口仅代表一个服务)

  • 一个计算机当中有很多软件,每一个软件启动之后都有一个端口号

  • 在同一个计算机上,端口号具有唯一性

  • 一格 web 系统的通信原理?通信步骤:

  • 第一步:用户输入网址(url)

  • 第二步:域名解析器进行域名解析:http://110.242.68.3:80/index.html

  • 第三步:浏览器软件在网络中搜索 110.242.68.3 这一台主机,直到找到这台主机

  • 第四步:定位 110.242.68.3 这台主机上的服务器软件,因为是 80 端口,可以很轻松的定位到 80 端口对应的服务器软件

  • 第五步:80 端口对应的服务器软件得知浏览器想要的资源名是:index.html

  • 第六步:服务器软件找到 index.html 文件,并且将 index.html 文件中的内容直接输出响应的浏览器上

  • 第七步:浏览器接收到来自服务器的代码(html css js)

  • 第八步:服务器渲染,执行 html css js 代码,展示效果

  • 什么是 URL?

  • 统一资源定位符(http://www.baidu.com)

关于 web 服务器软件

  • web 服务器软件都有哪些?

  • Tomcat(web 服务器)

  • jetty(web 服务器)

  • JBOSS(应用服务器)

  • weblogic(应用服务器)

  • websphere(应用服务器)

  • 应用服务器和 web 服务器的关系?

  • 应用服务器实现了 Java EE 的所有规范(javaEE 有十三个不同的规范)

  • web 服务器只实现了 javaEE 中的 Servlet+JSP 两个核心的规范

  • 通过这个讲解说明了:应用服务器是包含 web 服务器的

  • 用过 JBOSS 服务器的同学应该清楚,JBOSS 中内嵌一个 Tomcat 服务器

  • Tomcat 下载

  • apache 网址:http://www.apache.org

  • tomcat 官方网址:http://www.tomcat.apache.org

  • tomcat 开源免费的轻量级 web 服务器











  • 可以配置主机的名称

  • 默认的主机名为 localhost->127.0.0.1

  • 默认网站应用存放的位置为:webapps

面试题

请你谈谈网站是如何访问的?


  • 输入一个域名:回车

  • 检查本机的配置文件下有没有这个域名映射

  • 有:直接返回对应的 ip 地址,这个地址中,有我们需要访问的 web 程序,可以直接访问

  • 无:去 DNS 服务器找,找到的话就返回,找不到就返回找不到



发布一个 web 网站

模仿


  • 将自己写的网站,放到服务器(tomcat)中指定的 web 应用文件夹(webapps)下,就可以访问了

  • 网站应有的结构


  `webapps:tomcat服务器的web目`   -root   -hh :网站的目录名     -web-inf     -classes:java程序     -lib:web应用所依赖的jar包     -web.xml:网站配置文件     —index.html:默认的首页          -static       —css         -style.css       -js       -img
复制代码


HTTP 协议:面试


Maven:构建工具


  • Maven 安装包


Servlet 入门


  • HelloWorld

  • Servlet 配置

  • 原理

什么是 http

http(超文本传输协议) 是一个简单的请求-响应协议,它通常运行在 tcp 之上


  • 文本:html,字符串...

  • 超文本:图片,音乐,视频,定位,地图...

  • 80


​ https:安全的


  • 443

两个时代

http1.0


  • http/1.0:客户端可以与 web 服务器连接后,只能获得一个 web 资源,断开连接


http2.0


  • http/1.1:客户端可以与 web 服务器连接后,可以获得多个 web 资源,


http 请求


  • 客户端---发请求(request)---服务器


http 响应


  • 服务器---响应---客户端


请求行


  • 请求行中的请求方式:get

  • 请求方式:Get,post,head,delete,put

  • get:请求能够携带的参数比较少,大小有限制,会在浏览器的 url 地址栏显示数据内容,不安全,但高效

  • post:请求能够携带的参数没有限制,大小没有限制,不会在浏览器的 url 地址栏显示数据内容,安全,但不高效

  • 消息头


  Accept: 告诉浏览器,它所支持的数据类型  Accept-Encoding: 支持哪种编码格式 GBK UTF-8 GB2312  Accept-Language: 告诉浏览器,它的语言环境  Cache-Control: max-age=0  Connection: 告诉浏览器,请求完成是断开还是保持连接  Refresh:告诉客户端,多久刷新一次  Host: 主机。。。。。。/  Location:让网页重新定位
复制代码


响应状态码


200 :请求响应成功 200


3xx:请求重定向


  • 重定向:你重新到新位置


4xx:找不到资源 404


  • 资源不存在


5xx:服务器代码错误 500 502 网关错误

Maven

我们为什么要学这个技术?


1.在 javaweb 开发中,需要使用大量的 jar 包,我们手动去导入


2.如何能够让一个东西自动帮我们导入和配置这个 jar 包


由此,Maven 诞生了

Maven 项目架构管理工具

我们目前用来就是方便导入 jar 包的


Maven 的核心思想:约束大于配置


  • 有约束,


镜像:方便下载使用


Maven 是国外的,国内有墙,我们访问外网会非常的慢; 翻墙,vpn


配置环境变量


在我们的系统环境变量中


配置如下:


M2_HOME maven 目录下的 bin 目录


MAVEN_HOME maven 的目录


在系统的 path 中配置,%MAVEN_HOME%\bin


检测 Maven 是否安装成功,保证必须配置完毕

阿里云镜像

镜像:mirrors


  • 作用:加速我们的下载


国内推荐使用阿里云的镜像


<mirror>  <id>alimaven</id>  <mirrorOf>central</mirrorOf>  <name>aliyun maven</name>  <url>http://maven.aliyun.com/nexus/content/repositories/central/</url></mirror>
复制代码


本地仓库


在本地的 仓库,远程仓库


建立一个本地仓库:localRepository


<localRepository>D:\25791\Documents\apache-maven-3.8.6\maven-repo</localRepository>
复制代码

Servlet

1.Servlet 简介

  • Servlet 就是 sun 公司开发动态 web 的一门技术

  • Sun 在这些 API 中提供一个接口叫做:Servlet,如果想开发一个 Servlet 程序

  • 只需完成两个小步骤:

  • 编写一个类,实现 Servlet 接口

  • 把开发好的 Java 类部署到 web 服务器中

  • 把实现了 Servlet 接口的 Java 程序叫做,Servlet

2.HelloServlet

1.构建一个普通的 Maven 项目,删掉里面的 src 目录,以后我们的学习就在这个项目里面建立 Moudel;这个空的项目就是 Maven 主工程


2.关于 Maven 父子工程的理解:


父项目中会有


<modules>        <module>servlet-01</module>    </modules>
复制代码


子项目会有:


<parent>        <artifactId>javaweb-01-maven02</artifactId>        <groupId>com.he</groupId>        <version>1.0-SNAPSHOT</version>    </parent>
复制代码


父项目中的 Java 子项目可以直接使用


son extends father
复制代码


3.Maven 环境优化


  1. 修改 web.xml 为最新的

  2. 将 maven 的结构搭建完整


4.编写一个 Servlet 程序


  1. 编写一个普通类

  2. 实现 Servlet 接口,这里我们直接继承 HttpServlet


5.编写 Servlet 的映射


​ 为什么需要映射:我们写的是 Java 程序,但是要通过浏览器访问,而浏览器需要连接 web 服务器,所有我们需要在 web 服务器中注册我们写的 Servlet,还需要给他一个浏览器能够访问的路径;


6.配置 tomcat


​ 略


7.启动测试


Mapping 问题

1.一个 Servlet 可以指定一个映射路径


2.一个 Servlet 可以指定多个映射路径


3.一个 Servlet 可以指定通用映射路径


4.指定一些后缀或者前缀等等......


5.优先级问题


​ 指定了固有的映射录井优先级最高,如果找不到就会走默认的处理请求

ServletContext

web 容器在启动的时候,它会为每个 web 程序都创建一个对应的 ServletContext 对象,它代表了当前的 web 应用;


  • 共享数据

  • 在这个 Servlet 中保存的数据,可以在另一个 Servlet 中拿到;




@Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        //this.getInitParameter();初始化数据        //this.getServletConfig();Servlet配置        //this.getServletContext();Servlet上下文        ServletContext context = this.getServletContext();        String username = "小何";        context.setAttribute("username",username);//将一个数据都保存在ServletContext中,名字为Username,值username    }
复制代码


@Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        ServletContext context = this.getServletContext();        String username = (String) context.getAttribute("username") ;        resp.setContentType("text/html");        resp.setCharacterEncoding("utf-8");        resp.getWriter().print("名字"+username);
}
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { }
复制代码


 <servlet>    <servlet-name>hello</servlet-name>    <servlet-class>com.he.servlet.HelloServlet</servlet-class>  </servlet>  <servlet-mapping>    <servlet-name>hello</servlet-name>    <url-pattern>/hello</url-pattern>  </servlet-mapping>
<servlet> <servlet-name>getc</servlet-name> <servlet-class>com.he.servlet.GetServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>getc</servlet-name> <url-pattern>/getc</url-pattern> </servlet-mapping>
复制代码


<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee           http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"         version="4.0"         metadata-complete="true"></web-app>
复制代码

2.获取初始化参数

 <!--配置一些web应用的初始化参数--><context-param>    <param-name>url</param-name>    <param-value>jdbc:mysql://localhost:3306/mybatis</param-value>  </context-param>
复制代码


 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        ServletContext context = this.getServletContext();        String url = context.getInitParameter("url");        resp.getWriter().print(url);    }
复制代码

3.请求转发

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        ServletContext context = this.getServletContext();        System.out.println("进入了ServletDemo04");        context.getRequestDispatcher("/gp").forward(req,resp);    }
复制代码


4.读取资源文件

Properties


  • 在 java 目录下新建 properties

  • 在 resources 目录下新建 properties


都被打包到了同一个路径下:classes,我们俗称这个路径为 classpath;


思路:需要一个文件流


username = root123password = 123123
复制代码


  @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        InputStream is =this.getServletContext().getResourceAsStream("/WEB-INF/classes/com/he/servlet/aa.properties");        Properties prop = new Properties();        prop.load(is);        String user = prop.getProperty("username");        String pwd = prop.getProperty("password");
resp.getWriter().print(user+":"+pwd); }
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req,resp); }
复制代码


访问测试即可 ok;

发布于: 刚刚阅读数: 7
用户头像

喜羊羊

关注

还未添加个人签名 2022.09.01 加入

还未添加个人简介

评论

发布
暂无评论
Servent_9月月更_喜羊羊_InfoQ写作社区