Tomcat&Servlet

第一章 WEB概述

1.WEB简介

  • Javaweb: 用Java技术来解决相关web互联网领域的技术总和。web包括:web服务器和web客户端两部分.简而言之: 用java制作网页,JavaEE应用软件前端展示界面.

2.WEB通信

WEB采用B/S通信模式,通过超文本传送协议(HTTP, Hypertext transport protocol)进行通信.
通过浏览器地址栏编写URL,向服务器发送一个请求,服务器端根据请求进行相应的处理,处理完成之后,会向浏览器作出一个响应,及将服务器端资源发送给浏览器

3.WEB资源介绍

  1. 静态资源:指web页面中供人们浏览的数据始终是不变。比如:HTML、CSS、JS、图片、多媒体。

  2. 动态资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。
    比如:JSP/Servlet、ASP、PHP

4.常见的WEB服务器:

(WEB服务器对JavaEE规范部分或全部支持(实现),也就是WEB服务器实现部分或全部接口。)

  • Tomcat:Apache组织提供一个免费的小型的服务器软件。支持Servlet和JSP规范。(免费,开源,性能高)
  • WebLogic:Bea公司的一个收费的大型的服务器软件,后被Oracle收购。支持EE的所有的规范
  • WebSphere:IBM公司的一个收费的大型的服务器软件,支持EE的所有的规范。
  • JBoss:是一个基于J2EE的开放源代码的应用服务器。JBoss是一个管理EJB的容器和服务器,JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。

5.URL请求路径

前言: 在我们访问网站时,我们通过浏览器输入网址,访问目标网址应用程序。
接下来我们详细解析网址组成部分:

如下:URL (Uniform Resource Locator) ,统一资源定位符是对互联网上资源位置的一种表示,互联网上的每个文件都有一个唯一的URL。

书写完整格式如下
协议://域名:端口号/资源位置?参数=值
协议,http、https、ftp等
域名,域名或IP地址,都可以访问WEB资源
端口号,程序必须使用端口号,才可以让另一个计算机访问。
http协议的默认端:80
资源位置,用于描述WEB资源再服务器上的位置
参数=值,浏览器和服务器交互传递的数据
例如:常见路径http://www.itcast.cn:80/apps/index.html
搜索路径:https://www.baidu.com/apps?name=lisi&pwd=123
小结: 通过url资源地址,我们可以通过浏览器访问服务器上指定的资源!

第二章 Tomcat

1.Tomcat概述

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
支持Servlet和JSP 规范,且最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现

2. Tomcat版本

Tomcat 目前存在很多版本,不同版本的规范技术可能不同。
官网地址http://tomcat.apache.org/whichversion.html

Tomcat版本 Servlet版本 JDK版本
8.0x 3.0 1.8
7.0x 2.5/3.0 1.6/1.7
6.0x 2.5 1.5

JavaEE规范版本 必须要和服务器版本匹配才能运行
JavaEE1.3 (Servlet2.3/JSP1.2) ========= tomcat4.1
JavaEE1.4 (Servlet2.4/JSP2.0) ========= tomcat5.0
JavaEE5.0 (Servlet2.5/JSP2.1) ========= tomcat5.5/6.0
JavaEE6.0 (Servlet3.0/JSP2.2) ========= tomcat7.0
JavaEE7.0 (Servlet3.0/JSP2.2) ========= tomcat8.0+

3. Tomcat安装

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

3.1 下载文件说明:
  1. tar.gz 文件 是linux操作系统下的安装版本
  2. exe文件是window操作系统下的安装版本
  3. zip文件是window操作系统下压缩版本(我们选择zip文件)
3.2 Tomcat目录结构

bin:脚本目录
启动脚本:startup.bat
停止脚本:shutdown.bat
conf:配置文件目录 (config /configuration)
核心配置文件:server.xml
用户权限配置文件:tomcat-users.xml
所有web项目默认配置文件:web.xml
lib:依赖库,tomcat和web项目中需要使用的jar包
logs:日志文件.
localhost_access_log..txt tomcat记录用户访问信息,星表示时间。
例如:localhost_access_log.2017-04-28.txt
temp:临时文件目录,文件夹内内容可以任意删除。
webapps:默认情况下发布WEB项目所存放的目录。
work:tomcat处理JSP的工作目录。


tomcat2.png
3.3配置JAVA_HOME环境变量:
JAVA_HOME.png
3.4Tomcat启动和访问
  • tomcat解压目录/bin/startup.bat 双击运行启动tomcat
    访问路径、浏览器输入:http://localhost:8080
3.5Tomcat常见问题
  • JAVA_HOME的配置
    如果没有配置JAVA_HOME环境变量,在双击“startup.bat”文件运行tomcat时,将一闪立即关闭。
    解决方式:需要正确配置JAVA_HOME环境变量,指向JDK的安装目录
  • 端口号冲突
    控制台将出现大量异常信息,描述的是3个端口被占用(8080、8009、8005 )
    解决方式: 通过修改tomcat目录下conf/server.xml配置文件修改端口号
    1.我们需要做的是查看本地端口使用情况,关闭占用端口的程序:
    2.在dos窗口中输入 netstat –nao 就可以查看 当前端口的占用情况
    3.使用任务管理器---->选择详细信息---->查看pid为11604(查询出来的 值),关闭结束进程即可
    4.修改tomcat启动端口 Tomcat服务器的配置文件,全部都在tomcat的安装目录下conf目录下:
    server.xml:服务器端口配置、服务器自身配置文件 打开server.xml,
    修改服务器端口:
    修改服务器端口.png

    修改tomcat的端口为9090
    修改完server.xml文件必须重启服务器才能有效。 通过浏览器的地址栏访问测试:http://localhost:9090
3.6 idea发布web项目
1530414965532.png
1530519844618.png
1530519872638.png
  • 启动tomcat8,浏览器访问index.html页面


    1530520517786.png
3.7 Tomcat与nginx的区别
  1. 设计目的: Tomcat是一个免费的开源的Servlet容器,实现了JAVAEE规范,遵循http协议的的服务器 Nginx是一款轻量级 的电子邮件(电子邮件遵循IMAP/POP3协议)代理服务器,后来又发展成可以部署web应用程序和进行反向 代理的服务器
  2. 存放内容: tomcat可以存放静态和动态资源 nginx可以存放静态资源
  3. 应用场景: tomcat用来开发和测试javaweb应用程序 nginx用来做负载均衡服务器

第三章 Servlet(web动态资源)

1.什么是Servlet

  • Servlet 运行在服务端的Java小程序,是sun公司提供一套规范,用来处理客户端请求、响应给浏览器的动态web资源。Servlet是JavaWeb三大组件之一(Servlet、Filter、Listener),是最重要的组件。

2.Servlet的请求和处理

获取客户端请求数据——>处理业务请求——>客户端响应

3.Servlet的入门开发(XML)

3.1Servlet接口元源码如下


public interface Servlet {
    void init(ServletConfig var1) throws ServletException;

    ServletConfig getServletConfig();

    void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;

    String getServletInfo();

    void destroy();
}

3.2Servlet实现类的编写,编写一个普通的java类实现Servlet接口。

// 创建类实现Servlet接口 
package cn.itcast.web;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * Servlet implementation class FirstServlet
 */
public class DemoServlet implements Servlet {
    private static final long serialVersionUID = 1L;
     @Override

        public void destroy() {

            //TODO Auto-generated method stub

            System.out.println("-----servlet被销毁 该方法会执行----");

        }
        @Override

        public ServletConfig getServletConfig() {

            //TODO Auto-generated method stub

            return null;

        }

        @Override
        public String getServletInfo() {

            //TODO Auto-generated method stub

            return null;

        }
        @Override
        public void init(ServletConfig arg0) throws ServletException {
            // TODO Auto-generated method stub
               //   Servlet对象 tomcat服务器在接受客户端发送请求  对象被创建

            System.out.println("-----servlet被创建 该方法会执行----");
        }
        @Override
        public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
            // TODO Auto-generated method stub
              // 每发送一次请求 该方法执行一次...
            System.out.println("-----接受一次请求----");
        }
        
}

3.3. 配置web.xml,客户浏览器发送请求,配置Servlet接受客户端的请求。

web.xml配置又被称为,访问Servlet的请求映射,一个客户端请求对应一个servlet配置,在每一个工程的web目录下有一个WEB-INF目录下,有一个web.xml 双击打开


1530523317164.png
// 编写web.xml 标签配置
    <servlet>
        <servlet-name>FirstServlet</servlet-name>
        <servlet-class>cn.itheima.servlet.FirstServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>FirstServlet</servlet-name>
        <url-pattern>/firstServlet</url-pattern>
    </servlet-mapping>


启动项目,浏览器访问项目url路径
localhost:8080/demoServlet

3.4 Servlet的执行的流程详解

1530523045552.png

3.5 web.xml中Servlet访问路径的编写规范

<servlet>
    <servlet-name>FirstServlet</servlet-name>
    <servlet-class>cn.itheima.servlet.FirstServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>FirstServlet</servlet-name>
    <url-pattern>/firstServlet</url-pattern>
</servlet-mapping>

说明: <url-pattern>/FirstServlet</url-pattern> 标签配置的灵活性。
可以配置有几种方式: 不同的编写,请求的路径的访问方式不同。
正确的书写方式:

  1. /*
  2. *.xxx
  3. /a/b
  4. /a/*
  5. /a
    错误的编写: 不可以有 /.xxx 的写法!
    总结如下:
    url-pattern配置方式共有三种:
    1.完全路径匹配 :以 / 开始
    例如: /ServletDemo4 , /aaa/ServletDemo5 , /aaa/bbb/ServletDemo6
    2.目录匹配 :以 / 开始需要以 * 结束.
    例如: /
    (所有) ,/aaa/* (aaa目录下的所有) ,/aaa/bbb/*
    3.扩展名匹配 :不能以 / 开始以 * 开始的. 例如: .do ,.action 、.jsp 、.jpg
    错误的写法 : /*.do
    4.缺省路径 /
    通常情况访问 html页面时,首先从当前web项目的web.xml文件寻找匹配路径,如果如果没有找到,再从tomcat默认的web.xml匹配,将使用缺省servlet
    tomcat获得匹配路径时,优先级顺序:1 >2 > 3 > 4
    在web.xml中在<servlet></servlet>标签内部中配置:
    <load-on-startup>2</load-on-startup> 1 2 3 4 5 --- 传入正整数,整数越小,被创建的优先级就越高.

3.6 Servlet编程优化

1530495338737.png

3.7Servlet生命周期

 1.浏览器第一次访问servlet,此时将执行Servlet接口的初始化方法:init(ServletConfig)
          详见:GenericServlet.java里面的init
            public void init(ServletConfig config) throws ServletException {
                this.config = config;// 进行一些对象的初始化操作
                this.init();// 自定义的servlet可以重写给方法,扩展初始化操作。
           }
        2.客户端每一次访问Servlet,都将执行service(ServletRequest,ServletResponse)方法
         //  该方法主要是用来处理具体的业务逻辑

        3.服务器正常关闭,自动调用 destroy()方法,在GenericServlet里面
           public void destroy() {
           }
          // 此方法是给自定义的Servlet 复写使用,主要是做一些资源回收处理。

Servlet生命周期小结: servlet后续开发中 ,一般不会设置成员对象!
单例、在客户端访问到具体的servlet时,才会被初始化对象,在服务器正常关闭时,servlet对象被销毁。

3.8服务器启动,立刻加载Servlet对象

此时的业务场景,我们需要在web.xml文件中给指定的Servlet添加一个标签<load-on-startup>

此时的Servlet对象一般不做业务逻辑处理,而是做项目启动初始化数据使用。

实现步骤:在web.xml中在<servlet></servlet>标签内部中配置:

<load-on-startup>2</load-on-startup> 1 2 3 4 5 --- 传入正整数,整数越小,被创建的优先级就越高.


1530495386287.png

Servlet初始化代码:

public class SecondServlet extends GenericServlet{
    @Override
    public void init() throws ServletException {
        // 初始化方法。。。。
        System.out.println("two------------------two");
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("hello servlet two");
    }
}

启动服务器tomcat8 会发现该Servlet会立刻被初始化

控制台:


1530495603923.png

3.9 Servlet3.0注解开发(***)

Servlet3.0相较于Servlet2.5: 目前快捷开发,主流使用注解技术

  • 3.0注解简化的javaweb代码开发,可以省略web.xml配置文件
  • 支持异步处理(多线程技术)
  • 支持可插性特性(书写的代码编译后生成的class文件可以直接部署到其他项目的,自动加载执行)
  • 基于idea模板 template 快速创建Servlet对象:


    1530412277705.png

// name 属性 相当于以前的 <servlet-name>
//  urlPatterns 编写访问servlet的路径  类似于 <url-pattern>    
@WebServlet("/hello")
public class DemoServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("hello servlet3 ");
    }
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容