热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Web学习历程记录(七)——Tomcat基本概念和配置

本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。

Web学习历程记录——Tomcat


Web

静态Web资源
指Web页面中供人们浏览的数据始终是不变的

动态Web资源
指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同

软件架构
C/S架构
Client/Server
客户端和服务器端,用户需要安装专门的客户端程序

B/S架构
Browser/Server
浏览器和服务器端,不需要安装专门的客户端程序,浏览器是操作系统内置

B/S和C/S交互模型的比较
相同点:
都是基于请求,相应交互模型。且必须先有请求,再有响应
请求和相应成对出现。
不同点:
实现C/S模型需要用户在自己的操作系统安装各种客户端软件
实现B/S模型,只需要用户安装浏览器即可。


Web服务器

Servlet 容器
Web 容器
Web 服务器


常见的web服务器

Weblogic
WebSphere
Tomcat


Tomcat基本概念

虚拟主机
将一个网站交给tomcat区管理的过程称为为tomcat配置一台虚拟主机

web应用
一个虚拟主机包含着许多web资源,但这些web资源不能直接交给虚拟主机管理,需要按照功能将web资源按照一定的目录结构组织成web应用再交给虚拟主机区管理

虚拟路径映射
将web应用交给虚拟主机管理,为web应用真实路径配置一个对外访问的虚拟的路径的过程叫做web应用的虚拟路径映射


http协议

HyperText Transfer Protoco(超文本传输协议)

作用:用于定义WEB浏览器与WEB服务器之间交换数据的过程和数据本身的内容


请求

请求行
请求方式,八种
get:明文传输,不安全,参数跟在请求路径后面,对请求参数大小有限制
post:暗文传输,安全一些,请求参数在请求体里面,对请求参数大小没有限制
url:统一资源码

请求头
以键值对的形式存在,但存在一个key对应多个值的请求头

作用:
浏览器告诉服务器自己相关的设置
User-Agent:浏览器信息
Referrer:从哪里来的,防盗链
Content-type:内容类型,告诉服务器,浏览器传输数据的MIME类型,文件传输的类型
COOKIE:最重要的请求头信息之一,会话技术

请求体
只有请求方式是post的时候,才有请求体,请求参数所在的位置


响应

响应行
响应状态码

响应头
服务器指示浏览器去干什么,去配置什么
响应头以key-value存在
Location:通常和请求码302一起使用,完成请求重定向
Content-Type:设置服务器发送的内容的MIME类型
Refresh:指示客户端刷新频率
Content-Disposition:指示客户端下载文件

响应体
页面展示内容


Servlet

运行在服务端(tomcat)的Java小程序,动态资源

作用:用来处理客户端请求,相应给浏览器的动态资源
通过Java的api向客户端输出内容

必须实现servlet接口
必须在servlet容器中运行
servlet程序可以接受用户请求的参数以及向浏览器输出数据


Servlet生命周期

出生:用户第一次访问时执行
活着:应用活着,每次访问都会执行
死亡:应用卸载

对应方法
init(ServletConfig config)
service(ServletRequest req,ServletResponse res)
destroy()

描述
常规
默认情况下,来了第一次请求,会调用init()方法进行初始化【调用一次】
任何一次请求,都会调用service()方法处理这个请求
服务器正常关闭或者项目从服务器移除,调用destory()方法进行销毁【调用一次】

扩展
servlet是单例多线程,所以尽量不要在servlet里面使用全局变量,可能会导致线程不安全

ServletConfig
Servlet配置对象,可以使用ServletConfig来获得Servlet的初始化参数

启动项
如果要让Servlet提前创建,可以使用启动项


Servlet体系结构

使用GenericServlet
简化了servlet开发
已经提供好了一些servlet接口所需的方法

HttpServlet
继承HttpServlet,需要重写doGet/doPost方法中的一个

HttpServlet是GenericServlet的子类,它增强了父类的一些功能

Servlet体系源码
以get方式访问页面时执行getLastModified()函数,执行doGet(request,rsponse)前会先执行getLastModified,果果浏览器发现其返回值与上次文章的返回值相同,则认为文档没有更新,浏览器估用缓存而不执行doGet()若返回-1,则认为时刻更新,总是执行该函数


ServletContext

是一个全局对象,上下文对象
服务器为每个应用都创建了一个ServletContext对象,ServletContext属于整个应用的,不局限于某个Servlet

作用
作用域对象存取数据,让Servlet共享
获得文件MIME类型(文件下载)
获得全局初始化参数
获取web资源路径

常用API
getAttribute(String name):向ServletContext对象的map取对象
setAttribute(String name , Object obj):向ServletContext对象的map中添加数据
removeAttribute(String name):根据name删除数据

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext servletContext = getServletContext();servletContext.setAttribute("111","222");servletContext.removeAttribute("111");String str = (String) servletContext.getAttribute("111");resp.getWriter().print(str);
}

获得文件mime类型

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String file01 = "a.mp3";String file02 = "b.txt";String file03 = "c.jip";String mime01 = getServletContext().getMimeType(file01);String mime02 = getServletContext().getMimeType(file02);String mime03 = getServletContext().getMimeType(file03);response.getWriter().println(mime01);response.getWriter().println(mime02);response.getWriter().println(mime03);response.getWriter().println(value);}

获得全局初始化参数
在web.xml中配置
所有的servlet都可以获取这个参数
跟init的不同是init只能由一个servlet获取

获取web资源路径
API:

根据资源名称得到资源的绝对路径
String getRealPath(String path);

返回指定路径文件的流
getResourceAsStream(String path);

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String realPath = getServletContext().getRealPath("a.txt");System.out.println(realPath);InputStream is = getServletContext().getResourceAsStream("a.txt");System.out.println(is);
}

练习

统计网站被访问的次数

package count;import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/count")
public class CountServlet 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 {int count = (int) getServletContext().getAttribute("count");count++;getServletContext().setAttribute("count",count);response.getWriter().print("welcome");}@Overridepublic void init(ServletConfig config) throws ServletException {super.init(config);getServletContext().setAttribute("count", 0);}
}

package count;import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/count")
public class CountServlet 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 {int count = (int) getServletContext().getAttribute("count");count++;getServletContext().setAttribute("count",count);response.getWriter().print("welcome");}@Overridepublic void init(ServletConfig config) throws ServletException {super.init(config);getServletContext().setAttribute("count", 0);}
}

推荐阅读
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
author-avatar
翰茂文虹152
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有