javaweb笔记 - servlet【狂神说】

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系统的访问过程

    • 第一步:打开浏览器

    • 第二步:找到地址栏

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

    • 第四步:回车

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

  • 关于域名

  • ip地址是啥?

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

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

  • 端口号是啥?

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

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

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

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

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

    • 第二步:域名解析器进行域名解析:百度一下,你就知道

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

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

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

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

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

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

  • 什么是URL?

关于web服务器软件

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

    • Tomcat(web服务器)

    • jetty(web服务器)

    • JBOSS(应用服务器)

    • weblogic(应用服务器)

    • websphere(应用服务器)

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

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

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

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

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

  • Tomcat下载

可以配置主机的名称

  • 默认的主机名为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程序

    只需完成两个小步骤:

    1. 编写一个类,实现Servlet接口

    2. 把开发好的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

//由于get或者post只是请求实现的不同的方式,可以相互调用,业务逻辑都一样;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    ServletOutputStream outputStream = resp.getOutputStream();
    PrintWriter writer = resp.getWriter();
    writer.print("Hello,Servlet");
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

}

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 = root123
password = 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;

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超级小何

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值