Day-41

JavaWEB-Servlet

1.Web流程

1.1 软件架构

1. C/S:客户端/服务器端

  cs架构建立在专用的网络上,一般面向相对固定的用户群,它可以对权限进行多层次校验,提供了更安全的存取模式,对信息安全的控制能力很强;

  1. B/S:浏览器/服务器端

bs架构建立在广域网之上,面向是不可知的用户群,对安全的控制能力相对弱。

1.2 资源分类

1. 静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源.静态资源可以直接被浏览器解析,如: html,css,JavaScript   

2. 动态资源:每个用户访问相同资源后,得到的结果可能不一样。称为动态资源。动态资源被访问后,需要先转换 为静态资源,在返回给浏览器,如:servlet/jsp,php,asp....

1.3 网络通信三要素

1. IP:电子设备(计算机)在网络中的唯一标识。   

2. 端口:应用程序在计算机中的唯一标识。 0~65536   

3. 传输协议:规定了数据传输的规则       

基础协议:

1. tcp:安全协议,三次握手。 速度稍慢           

2. udp:不安全协议。 速度

1.4 流程图

        

1.前端发送请求,根据路径信息,访问后台接口。

                  请求路径中,包含 协议、ip地址、端口号、路径

                  通过ip地址找到服务器

                  通过端口号,找到web服务器程序

                  通过具体路径,找到执行的代码

         2.后端接收到请求后,进行处理,处理完成后,向前端返回响应。

         3.后端处理时,会通过和数据库交互,完成数据的操作。

2.Web服务器软件

2.1概念

服务器:安装了服务器软件的计算机。

服务器软件:接收用户的请求,处理请求,做出响应。

web服务器软件:接收用户的请求,处理请求,做出响应。   

在web服务器软件中,可以部署web项目,让用户通过浏览器来访问这些项目,实际上可以理解为web容器。

2.2常见的与java相关的服务器软件

1.webLogic:oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。    2.webSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。

3.JBOSS:JBOSS公司的,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。

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

2.3 Tomcat

         1. 介绍

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

2. 下载安装与卸载

    官网下载:http://tomcat.apache.org/

    安装:解压压缩包即可

    * 注意:安装目录建议不要有中文和空格

    卸载:删除目录就行了

参考 相关软件/TomCat安装和使用.docx 进行安装测试即可

3.目录介绍

4. 启动 访问 关闭

                  启动:bin/startup.bat ,双击运行该文件即可

                  访问:浏览器输入http://localhost:8080 回车访问自己                                                     http://别人的ip:8080 访问别人

                  关闭:bin/shutdown.bat,双击运行该文件即可

         5. 修改端口号

                  Conf目录下的server.xml文件中,找到

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

                  修改8080为想要的端口即可

修改Tomcat端口号,变更失效如何解决?

因为在服务器上部署了多个Tomcat,要使用不同的端口号,可是修改后重新启动项目后又会回到之前的端口号,如何解决?

方法:1.先在tomcat的启动处bin--》startup.bat中将if not "%CATALINA_HOME%" == "" goto gotHome注释掉(这里的注释得用rem )。

        2.再在conf----》server.xml中将中间的8080端口改成你自己设定的端口。

    3.重新启动就好了。

Tomcat控制台乱码

-->Windows默认编码是GBK,而Tomcat默认编码是UTF-8,需要将Tomcat的编码改为GBK

--> 在Tomcat目录的conf目录下找到logging.properties文件,将java.util.logging.ConsoleHandler.encoding改为GBK

  1. 目项目部署

  1、方式一

                  直接将项目放到webapps目录下即可。

简化部署:将项目打成一个war包,再将war包放置到webapps目录下。                                      * war包会自动解压缩

  1. 方式二

               找到 Tomcat 下的 conf 目录\Catalina\localhost\ ,创建如下的配置文件.

abc.xml 配置文件内容如下:

<!-- Context 表示一个工程上下文

path 表示工程的访问路径:/abc

docBase 表示你的工程目录在哪里

-->

<Context path="/abc" docBase="E:\book" />

访问这个工程的路径如下:http://ip:port/abc/  就表示访问 E:\book 目录

3.Servlet

3.1 概述

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。

狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet 理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用 来扩展基于HTTP协议的Web服务器。

最早支持Servlet标准的是JavaSoft的Java Web Server,此后,一些其它的基于Java的Web服务器开始支持标准的Servlet。

什么是Servlet?

1ServletJavaEE 规范之一。规范就是接口

2ServletJavaWeb 三大组件之一。三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器。

3Servlet 是运行在服务器上的一个 java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。

3.2 快速入门

      1. idea中创建web项目

参考有道云笔记-idea使用指南,链接如下:

http://note.youdao.com/noteshare?id=48569c74ce3c409c3ac921b1c00ed425&sub=6A790066C9734EC18A9BF90D99548AAC

      2. 创建servlet

一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现 Servlet 程序。

1、编写一个类去继承 HttpServlet

2、根据业务需要重写 doGet doPost 方法

3、到 web.xml 中的配置 Servlet 程序的访问地址

Servlet类中的代码

public class HelloServlet_01 extends HttpServlet {

/**

* doGet()在 get 请求的时候调用

* @param req

* @param resp

* @throws ServletException

* @throws IOException

*/

    @Override

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        System.out.println("HelloServlet_01中的doGet方法");

    }

}

/**

* doPost()在 post请求的时候调用

* @param req

* @param resp

* @throws ServletException

* @throws IOException

*/

    @Override

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

        System.out.println("HelloServlet_01中的doPost方法");

    }

web.xml中的配置

<servlet>

    <servlet-name>HelloServlet1</servlet-name>

    <servlet-class>com.tledu.servlet.HelloServlet_01</servlet-class>

</servlet>

<servlet-mapping>

    <servlet-name>HelloServlet1</servlet-name>

    <url-pattern>/hello1</url-pattern>

</servlet-mapping>

演示示例:_01_HelloServlet

练习以上程序

 3. 执行原理

3.3 生命周期

 

Servlet生命周期就是从创建Servlet对象开始一直到死亡的一个执行过程

1 先执行构造方法,用于创建Servlet对象

2 执行init()方法做初始化操作

3 执行service()/doGet()/doPost()方法处理真正的逻辑操作和数据交互

4 执行destroy()方法进行资源释放和销毁

演示示例:_02_ServletLife

通过上面示例可以看出,默认是第一次请求的时候,对servlet进行初始化,第一次请求才会执行构造方法和init方法以及service方法

再次请求就只会执行service方法

当然我们也可以通过web.xml中的配置,设置在启动TomCat的时候就初始化servlet

使用 load-on-startup 可以设置初始化的时机

    <servlet>

        <servlet-name>_02_ServletLife</servlet-name>

        <servlet-class>com.tledu.servlet._02_ServletLife</servlet-class>

        <!-- 设置servlet初始化的时机,默认是 -1,在第一次请求的时候初始化 -->

        <!-- 0 和 正整数都是在加载的时候启动,启动TomCat的时候 -->

        <load-on-startup>1</load-on-startup>

    </servlet>

    <servlet-mapping>

        <servlet-name>_02_ServletLife</servlet-name>

        <url-pattern>/s</url-pattern>

</servlet-mapping>

3.4 ServletConfig类

ServletConfig 类从类名上来看,就知道是 Servlet 程序的配置信息类。Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建,我们负责使用。Servlet 程序默认是第一次访问的时候创建,ServletConfig 是每个 Servlet 程序创建时就会创建一个对应的 ServletConfig 对象。

  1. ServletConfig类的三大作用

1、可以获取 Servlet 程序的别名 servlet-name 的值

2、获取初始化参数 init-param

3、获取 ServletContext 对象

web.xml 中的配置:

    <servlet>

        <servlet-name>HelloServlet1</servlet-name>

        <servlet-class>com.tledu.servlet.HelloServlet_01</servlet-class>

        <!--init-param 是初始化参数-->

        <init-param>

            <!--是参数名-->

            <param-name>username</param-name>

            <!--是参数值-->

            <param-value>root</param-value>

        </init-param>

        <!--init-param 是初始化参数-->

        <init-param>

            <!--是参数名-->

            <param-name>url</param-name>

            <!--是参数值-->

            <param-value>jdbc:mysql://localhost:3306/test</param-value>

        </init-param>

    </servlet>

    <servlet-mapping>

        <servlet-name>HelloServlet1</servlet-name>

        <url-pattern>/hello1</url-pattern>

    </servlet-mapping>

Servlet中的代码

@Override

public void init(ServletConfig servletConfig) throws ServletException {

System.out.println("2 init 初始化方法");

//

1、可以获取 Servlet 程序的别名 servlet-name 的值

System.out.println("HelloServlet 程序的别名是:" + servletConfig.getServletName());

//

2、获取初始化参数 init-param

System.out.println("初始化参数 username 的值是;" + servletConfig.getInitParameter("username"));

System.out.println("初始化参数 url 的值是;" + servletConfig.getInitParameter("url"));

//

3、获取 ServletContext 对象

System.out.println(servletConfig.getServletContext());

}

3.5 ServletContext类

1.什么是ServletContext

1ServletContext 是一个接口,它表示 Servlet 上下文对象

2、一个 web 工程,只有一个 ServletContext 对象实例。

3ServletContext 对象是一个域对象。

4ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁。

什么是域对象?

域对象,是可以像 Map 一样存取数据的对象,叫域对象。

这里的域指的是存取数据的操作范围,整个 web 工程。

存数据   取数据   删除/数据

Map      put()     get()    remove()

域对象  setAttribute()  getAttribute()  removeAttribute();

2.ServletContext的四个作用

1、获取 web.xml 中配置的上下文参数 context-param

2、获取当前的工程路径,格式: /工程路径

3、获取工程部署后在服务器硬盘上的绝对路径

4、像 Map 一样存取数据

ServletContext 演示代码:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws

ServletException, IOException {

//

1、获取 web.xml 中配置的上下文参数 context-param

ServletContext context = getServletConfig().getServletContext();

String username = context.getInitParameter("username");

System.out.println("context-param 参数 username 的值是:" + username);

System.out.println("context-param 参数 password 的值是:" +

context.getInitParameter("password"));

//

2、获取当前的工程路径,格式: /工程路径System.out.println( "当前工程路径:" + context.getContextPath() );

//

3、获取工程部署后在服务器硬盘上的绝对路径

/**

* / 斜杠被服务器解析地址为:http://ip:port/工程名/ 映射到 IDEA 代码的 web 目录<br/>

*/

System.out.println("工程部署的路径是:" + context.getRealPath("/"));

System.out.println("工程下 css 目录的绝对路径是:" + context.getRealPath("/css"));

System.out.println("工程下 imgs 目录 1.jpg 的绝对路径是:" + context.getRealPath("/imgs/1.jpg"));

}

web.xml 中的配置:

<!--context-param 是上下文参数(它属于整个 web 工程)-->

<context-param>

<param-name>username</param-name>

<param-value>context</param-value>

</context-param>

<!--context-param 是上下文参数(它属于整个 web 工程)-->

<context-param>

<param-name>password</param-name>

<param-value>root</param-value>

</context-param>

ServletContext Map 一样存取数据:

ContextServlet1 代码:

public class ContextServlet1 extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// 获取 ServletContext 对象

ServletContext context = getServletContext();

System.out.println(context);

System.out.println("保存之前: Context1 获取 key1 的值是:"+ context.getAttribute("key1"));

context.setAttribute("key1", "value1");

System.out.println("Context1 中获取域数据 key1 的值是:"+ context.getAttribute("key1"));

}

}

ContextServlet2 代码:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

ServletContext context = getServletContext();

System.out.println(context);

System.out.println("Context2 中获取域数据 key1 的值是:"+ context.getAttribute("key1"));

}

3.6 HTTP协议

1.什么是Http协议

协议是指双方或多方相互约定好,大家都需要遵守的规则叫协议。

所谓 HTTP 协议,就是指,客户端和服务器之间通信时,发送的数据,需要遵守的规则,叫 HTTP 协议。HTTP 协议中的数据又叫报文。

2.Http协议格式

客户端给服务器发送数据叫请求。

服务器给客户端回传数据叫响应。

请求又分为 GET 请求,和 POST 请求两种

  1. GET 请求

1、请求行

(1) 请求的方式   GET

(2) 请求的资源路径   [+?+请求参数]

(3) 请求的协议的版本号   HTTP/1.1

2、请求头

key : value       组成    不同的键值对,表示不同的含义。

  1. POST 请求

1、请求行

(1) 请求的方式   POST

(2) 请求的资源路径   [+?+请求参数]

(3) 请求的协议的版本号    HTTP/1.1

2、请求头

1) key : value

不同的请求头,有不同的含义

空行

3、请求体 ===>>> 就是发送给服务器的数据

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
优化下面代码.bg { width: 100%; height: 100vh; background-image: url('../../assets/img/info-bg.png'); background-size: 100% 100%; background-repeat: no-repeat; position: relative; font-family: AlibabaPuHuiTiR; .goBack { position: absolute; top: 34px; right: 65px; cursor: pointer; color: #ffffff; width: 181px; padding: 15px 10px; background: rgba(24, 31, 30, 0.52); border: 1px solid #4a524e; border-radius: 5px; font-size: 18px; font-family: AlibabaPuHuiTiR; z-index: 111; display: flex; flex-direction: row; justify-content: space-between; align-items: center; } .home-left { position: absolute; top: 18%; left: 40px; width: 41%; height: 76%; font-size: 24px; color: #ffffff; } .unit { font-size: 24px; color: #636363; } .home-left-title { font-size: 24px; color: #ffffff; line-height: 36px; } .home-right { position: absolute; top: 18%; right: 88px; width: 46%; height: 78%; } .model { display: flex; justify-content: center; align-items: center; height: 90%; } #threeContained { width: 100%; height: 100%; } .model-qk-img { width: 82%; height: 90%; background-image: url('../../assets/img/howo.png'); background-size: 100% 100%; background-repeat: no-repeat; } .model-zk-img { width: 56%; height: 90%; background-image: url('../../assets/img/heavyT.png'); background-size: 100% 100%; background-repeat: no-repeat; } .model-gj-img { width: 82%; height: 90%; background-image: url('../../assets/img/transit.png'); background-size: 100% 100%; background-repeat: no-repeat; } .car-online { margin-bottom: 50px; } } .day-data { display: flex; flex-direction: row; justify-content: space-between; align-items: center; height: 29%; margin-left: 30px; } .day-val { width: 40%; } .prefix { display: inline-block; width: 6px; height: 14px; background: #ffffff; margin-right: 20px; } .zh-title { margin-left: 30px; padding-top: 30px; font-size: 30px; font-weight: 700; text-align: left; color: #ffffff; line-height: 32px; letter-spacing: 0.3px; font-family: AlibabaPuHuiTiB; } .en-title { margin-left: 30px; font-size: 14px; font-weight: 400; text-align: left; color: #ffffff; line-height: 32px; letter-spacing: -0.91px; font-family: AlibabaPuHuiTiR; }
05-31

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值