学习:JAVAEE_3 TomCat/HTTP协议/Servlet/三层架构综合案例和开发模式

TomCat

Tomcat服务器是一个免费的开放源代码的Web应用服务器。

下载地址:Apache Tomcat® - Welcome!

  • tar.gz 文件 是linux操作系统下的安装版本

  • exe文件是window操作系统下的安装版本

  • zip文件是window操作系统下压缩版本

  • /usr/local/apache-tomcat-8.5.78 存放位置

环境变量

export APACHE_TOMCAT=/usr/local/apache-tomcat-8.5.78

export PATH=$PATH:$APACHE_TOMCAT/bin

source ~/.zshrc

进入bin目录给sh文件权限

cd /usr/local/apache-tomcat-8.5.78/bin

sudo chmod 755 *.sh

启动: startup.sh 停止: shutdown.sh

访问地址:http://127.0.0.1:8080或者http://localhost:8080

Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet 和JSP规范总是能在Tomcat中得到体现。

因为Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,是目前比较流行的Web应用服务器。

端口号冲突

  1. 修改conf/server.xml , 第70行左右

  2. 打开命令行输入: windows:netstat -ano|findstr 8080 mac:lsof -i tcp:port kill -9 PID 查看占用端口的进程ID 然后杀死进程

运用Tomcat服务器部署WEB项目

标准的JavaWeb应用目录结构
  WebAPP(文件夹,项目)  
   		|---静态资源: html,css,js,图片(它们可以以文件存在,也可以以文件夹存在)  
   		|---WEB-INF :固定写法。此目录下的文件不能被外部(浏览器)直接访问
   			|---lib:jar包存放的目录
   			|---web.xml:当前项目的配置文件(3.0规范之后可以省略)
   			|---classes:java类编译后生成class文件存放的路径
发布项目(资源)到tomcat

方式一:直接发布

  • 拷贝img文件夹 到Tomcat目录/webapps文件夹

  1. 启动Tomcat

  2. 打开浏览器,访问 http://localhost:8080/img/具体图片的名字

方式二: 虚拟路径的方式发布项目

  • 第一步:在tomcat/conf目录下新建一个Catalina目录(如果已经存在无需创建)

  • 第二步:在Catalina目录下创建localhost目录(如果已经存在无需创建)

  • 第三步:在localhost中创建xml配置文件,名称自定义:例如:second(注:这个名称是浏览器访问路径 就是项目名)

  • 第四步:添加second.xml文件的内容为: docBase就是你需要作为虚拟路径的项目的路径

  • 
    
  • 第五步:直接访问(通过写配置文件的路径来访问):http://localhost:8080/second/74078288_p0.png

HTTP协议

HTTP是HyperText Transfer Protocol(超文本传输协议)的简写,传输HTML文件。就是规范.

HTTP是互联网上用的最多的一个协议, 所有的www开头的都是遵循这个协议的(可能是https)

http协议已经到了2.0版本,但是目前使用最为广泛的还是1.1的版本

请求部分

请求行

GET /myApp/success.html?username=zs&password=123456 HTTP/1.1 POST /myApp/success.html HTTP/1.1

  • 请求方式(8种,put,delete等)

    GET:明文传输, 不安全,参数跟在请求路径后面,对请求参数大小有限制,

    POST: 暗文传输,安全一些,请求参数在请求体里,对请求参数大小没有有限制,

  • URI:统一资源标识符(即:去掉协议和IP地址部分)

  • 协议版本:HTTP/1.1

请求头

  • Accept:浏览器可接受的MIME类型 ,告诉服务器客户端能接收什么样类型的文件。

  • User-Agent:浏览器信息.(浏览器类型, 浏览器的版本....)

  • Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集

  • Content-Length:表示请求参数的长度

  • Host:初始URL中的主机和端口

  • Referrer:从哪里里来的(之前是哪个资源)、防盗链

  • Content-Type:内容类型,告诉服务器,浏览器传输数据的MIME类型,文件传输的类型,application/x-www-form-urlencoded .

  • Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip

  • Connection:表示是否需要持久连接。如果服务器看到这里的值为“Keep -Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接 )

  • Cookie:这是最重要的请求头信息之一(会话技术, 后面会有专门的时间来讲的)

  • Date:Date: Mon, 22Aug 2011 01:55:39 GMT请求时间GMT

请求体

响应部分

响应行

HTTP/1.1 200

  • 协议/版本

  • 响应状态码

    • 200:正常,成功

      302:重定向 , 重新定位方向

      304:表示客户机缓存的版本是最新的,客户机可以继续使用它,无需到服务器请求. 读取缓存

      404:客户端错误(一般是路径写错了,没有这个资源)

      500:服务器内部错误

    • 状态码 含义
      100~199 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程
      200~299 表示成功接收请求并以完成整个处理过程,常用200
      300~399 为完成请求,客户需进一步细化请求.例如,请求的资源已经移动一个新地址,常用302,307和304
      400~499 客户端的请求有错误,常用404
      500~599 服务器出现错误,常用500
响应头

响应头以key:vaue存在, 可能多个value情况. ==服务器指示浏览器去干什么,去配置什么.==

  • Location: http://www.it315.org/index.jsp,通常和状态,码302一起使用,完成请求重定向

  • Content-Type: text/html; charset=UTF-8; 设置服务器发送的内容的MIME类型,文件下载时候

a.mp3 b.mp4

  • Refresh: 5;url=百度一下,你就知道 指示客户端刷新频率。单位是秒 eg: 告诉浏览器5s之后跳转到百度

  • Content-Disposition: attachment; filename=a.jpg 指示客户端(浏览器)下载文件

  • Content-Length:80 告诉浏览器正文的长度

  • Server:apachetomcat 服务器的类型

  • Content-Encoding: gzip服务器发送的数据采用的编码类型

  • Set-Cookie:SS=Q0=5Lb_nQ;path=/search服务器端发送的Cookie

  • Cache-Control: no-cache (1.1) 

  • Pragma: no-cache  (1.0)  表示告诉客户端不要使用缓存

  • Connection:close/Keep-Alive  

  • Date:Tue, 11 Jul 2000 18:23:51 GMT

响应体

页面展示内容, 和网页右键查看的源码一样

Servlet

学习:JAVAEE_3 TomCat/HTTP协议/Servlet/三层架构综合案例和开发模式_第1张图片

Servlet 运行在服务端(tomcat)的Java小程序,是sun公司提供一套规范. 就是动态资源

Servlet就是一个接口,但是这个类需要依赖服务器才能执行。

作用

  • 接受请求,处理请求,响应请求。

  • 用来处理客户端请求、响应给浏览器的动态资源。

  • 但servlet的实质就是java代码,通过java的API动态的向客户端(浏览器)输出内容

servlet与普通的java程序的区别

  • 写了一个自己的类,实现servlet接口。

  • servlet必须在servlet容器 | Servlet引擎(服务器 tomcat)中运行 , servlet如果脱离了服务器(weblogic tomcat..) 无法执行。

  • servlet程序可以接收用户请求参数以及向浏览器输出数据

/*
    采用配置文件的方式来创建servlet
    1. 写一个类,实现接口Servlet

    2. 配置Servlet(告诉Tomcat,我们这个项目有这个servlet,以后遇到指定的请求的时候,把这个请求,交给servlet来完成。)
        在web/WEB-INF/web.xml中配置
 */

//  或者使用注解方式  @WebServlet("/demo02")  // localhost:8080/项目映射名/demo02
public class DemoServlet01 implements Servlet {
  @Override
  public void init(ServletConfig servletConfig) throws ServletException {
    System.out.println("DemoServlet01::init~~~");
    try {
      //获取servlet配置的初始化参数
      String fileName = servletConfig.getInitParameter("fileName");


      //假如在这里就要开始读取文件。
      //FileInputStream fis = new FileInputStream("地址路径");
      //FileInputStream fis = new FileInputStream(fileName);

    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  //    主要用来处理请求,来一个请求,这个方法就会执行一次
  @Override
  public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    System.out.println("DemoServlet01::service~~~");
  }

  @Override
  public void destroy() {
    System.out.println("DemoServlet01::destroy~~~");

  }

  @Override
  public ServletConfig getServletConfig() {
    return null;
  }

  @Override
  public String getServletInfo() {
    return null;
  }
}
/*
    Servlet的生命周期:

        init :
            调用时机:
                第一次访问servlet的时候调用。只会执行一次。
            作用:
                一般用来初始化的,其实初始化指的就是做一些准备工作。读取文件...数据的预准备工作。..

        service:
            调用时机:
                来一次请求调用一次..
            作用:
                专门用来处理请求。

        destroy:
            调用时机:
                正常关闭服务器|从服务器里面移除项目。 只会执行一次。

            作用:
                主要用来做一些收尾工作,清理工作。比如: 把日志写入到文件当中,内存的数据序列化到硬盘上。
 */

web.xml配置(该文件在web/WEB-INF 文件夹下):




  
  
    name
    value
  

  
  
    abc
    com.zml.servlet.DemoServlet01

    
    
      fileName
      c:/a/b/heima111.txt
    

    
    1
  

  
  
    abc
    /aa 
  
  

Servlet继承体系

实现Servlet接口的时候,我们必须实现接口的所有方法。但是,在servlet中,真正执行程序逻辑的是service方法,对于servlet的初始化和销毁,由服务器调用执行,开发者本身不需要关心。因此,官方推荐使用继承的方式,继承GenericServlet 或者HttpServlet来实现接口

/*
 继承GenericServlet
     只需要关注service方法即可,其他的init方法和destroy方法不需要关注。
*/
@WebServlet("/demo06")
public class DemoServlet06  extends GenericServlet {

@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
 System.out.println("DemoServlet06:::service...");
}
}
/*
虽然,GenericServlet已经简化了servlet开发,但是我们平时开发程序需要按照一种互联网传输数据的协议来开发程序——http协议,因此,sun公司又专门提供了HttpServlet,来适配这种协议下的开发
*/
@WebServlet("/demo07")
public class DemoServlet07 extends HttpServlet {
//如果走的是get请求,那么执行这个方法 , 所有的浏览器直接写的地址访问,都是get请求。
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 System.out.println("DemoServlet07:::doGet...");
}

//如果走的是post请求,那么执行的是这个方法。 一般只有form表单里面的method="post"  | Ajax发起的请求。
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 System.out.println("DemoServlet07:::doPost...");

 doGet(req, resp);
}
}
ServletContext

ServletContext: 是一个全局对象, 上下文对象. 小技巧: 以后只要看见有 XXXContext ,这是一个上下文!

服务器为每一个应用(项目)都创建了一个ServletContext对象。 ServletContext属于整个应用的,不局限于某个Servlet。 一个应用就有一个ServletContext,它是由服务器(Tomcat)创建。

ServletContext对象的获取方式: init方法中的ServletConfig对象和service方法中的ServletRequest对象的getServletContext()方法

作用

  • 作为域对象存取数据,让Servlet共享

  • 获得文件MIME类型(文件下载)

  • 获得全局初始化参数 web.xml配置的参数

  • 获取web资源路径 可以读取文件。

方法 说明
getAttribute(String name) ; 向ServletContext对象的map取数据
setAttribute(String name, Object object) ; 从ServletContext对象的map中添加数据
removeAttribute(String name) ; 根据name去移除数据
getMimeType(String file) 获取文件的mime类型(mime主要是用来表述文件的类型是什么。)
String getInitParameter(String name) ; 根据配置文件中的key得到value

你可能感兴趣的:(JAVAEE,学习,java-ee,tomcat)