1 Java Web

本文将从最基础的HTTP协议开始讲起,介绍如何徒手搭建Web应用,内容如果比较多的话,后面会分成多篇逐步介绍。

2 皇冠上的明珠-Apache

不知道Apache的研发不是好的研发,若你的主语言是Java则更是如此。Apache事实上是很多技术标准的制定者和践行者。比如我们现在要说的Maven和Tomcat。

Tomcat是Web容器的一种,那什么是Web容器呢?

在上一篇文章中,我们提到Servlet。Servlet其实是Java语言的一部分,其给出了一个Web应用该如何处理HTTP请求并给出正确HTTP响应的框架。但Java本身并未给出一套完整的实现(至少在业界没有流行起来Java版本的Web容器),因此有很多公司和组织便根据Servlet标准开发了具体的实现。因为这些软件都是为Web应用服务,形形色色的Web应用都是运行在这些软件之上的,所以他们便被叫做Web容器。著名的有Tomcat、Jetty、GlassFish、JBoss、Resin、WebLogic、WebSphere……这些当中,有的好用,有的不好用;有的收费,有的不收费。我们所采纳的是Tomcat,因为它:1.由Apache基金会运营、2.免费、3.应用极其广泛;4.好用。

除了Tomcat之外,Java研发过程不可避免需要使用到Maven。Maven是一个仓库系统,你可以把你写好的代码编译成工具包丢上去供他人使用,也可以在上面找别人提供的工具包用在自己的工程中。对了,Maven也是Apache基金会运营的。

3 新建工程

到目前为止,徒手创建Web应用需要介绍的背景知识基本结束了。下面你可以选择你喜欢的IDE(IDEA或Eclipse)创建一个Maven工程,然后我们就可以开始了。

新建一个Maven工程

工程中创建的pom.xml文件,需要调整/新增部分内容。

<?xml  version="1.0" encoding="UTF-8"?><project ...>    <packaging>warpackaging>    <properties>        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>        <maven.compiler.source>1.8maven.compiler.source>        <maven.compiler.target>1.8maven.compiler.target>        <maven.compiler.compilerVersion>1.8maven.compiler.compilerVersion>    properties>project>

war配置会强制工程按照WAR包结构进行打包编译,否则会被当成普通的Java工程,那么和Web应用相关的特性都将不会起效。另外在properties中增加编码格式约束以及编译相关信息。

4 Tomcat Maven Plugin

Tomcat Maven Plugin是Apache为Tomcat提供的一个Maven插件,方便开发人员直接在开发环境中调用Web容器,而不需要进行打包发布的操作。这样的好处是方便调试,而方便调试其实是提升开发效率的核心因素(但大家往往忽视它)。

修改工程中的pom.xml文件,引入Tomcat Maven Plugin插件:

<?xml  version="1.0" encoding="UTF-8"?><project ...>    ...    <build>        <plugins>            <plugin>                <groupId>org.apache.tomcat.mavengroupId>                <artifactId>tomcat7-maven-pluginartifactId>                <version>2.2version>            plugin>        plugins>    build>project>

5 调整目录结构

新建的Maven工程中,只包含了java和resources文件夹。java目录下面放的是源代码文件,resources文件夹下放的是配置文件。Web工程中还需要增加webapp文件夹,存放Web应用特有的相关文件。

调整目录结构

6 web.xml

web容器启动时,会扫描Web-INF下的web.xml文件,web.xml文件是web应用和web容器的沟通桥梁,容器会在该文件的指导下完成应用的加载。首先在webapp/WEB-INF文件夹中创建一个空的web.xml文件。

<?xml  version="1.1" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee              http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0">

web-app>

7 开发Web应用

在上一篇文章中提到,Web应用需要接收浏览器提交的HTTP请求并正确返回HTTP响应。所以需要编写一个Servlet接口的具体实现。

在pom.xml文件中增加servlet-api的依赖,这样在源代码中就可以继承/实现Servlet接口或其子类/子接口了。

<dependency>    <groupId>javax.servletgroupId>    <artifactId>javax.servlet-apiartifactId>    <version>4.0.1version>    <scope>providedscope>dependency>

引入了servlet-api包之后,创建一个名为MyServlet的类,用于处理HTTP请求。这个类直接获取response的writer对象,并写入字符串Hello Servlet!。基于我们上一篇文章的分析,Web容器会将该字符串序列化到HTTP协议的报文体中,并返回给浏览器。浏览器在收到该响应后,会在页面上展示该字符串。

public class MyServlet extends HttpServlet {    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        PrintWriter writer = resp.getWriter();        writer.print("Hello Servlet!");    }}

8 最后的配置

下面我们修改下web.xml,将MyServlet类注入到Web容器中,这样Web容器就可以在收到特定请求后,调用我们的逻辑开始处理了。

<?xml  version="1.1" encoding="UTF-8"?><web-app ...>    <servlet>        <servlet-name>web-applicationservlet-name>        <servlet-class>org.example.MyServletservlet-class>    servlet>    <servlet-mapping>        <servlet-name>web-applicationservlet-name>        <url-pattern>/hello.dourl-pattern>    servlet-mapping>web-app>

9 测试

启动应用,然后在浏览器中输入地址http://localhost:8080/WebApplication/hello.do,页面显示Hello Servlet!字符串。

正常返回结果

使用抓包工具,可以看到服务器返回的HTTP响应报文的报文体中,Hello Servlet!字符串。

HTTP协议中返回的信息

至此,简单的Web应用搭建完成,一切均和预想的一样!

10 结论

Web应用的处理流程比较复杂,但仔细梳理后,发现其实核心的逻辑很是清晰,用两篇文章的篇幅就能完成介绍。

虽然整个框架简单,但配合脚本执行、页面渲染等功能后,最终呈现的效果依然可以做到非常酷炫。这说明保持简单确实是设计的核心理念,而简单功能的叠加往往会达到出乎意料的效果。

web接口响应时间标准_从零搭建Web应用(二)相关推荐

  1. 吃透这套架构演化图_从零搭建Web网站也不难!

    摘要: 前言 工作也有几多年了,无论是身边遇到的还是耳间闻到的,多多少少也积攒了自己的一些经验和思考,当然,博主并没有太多接触高大上的分布式架构实践,相对比较零碎,随时补充.俗话说得好,冰冻三尺非一日 ...

  2. [渝粤教育] 宁波城市职业技术学院 Web服务器运维(从零搭建一个企业网站) 参考 资料

    教育 -Web服务器运维(从零搭建一个企业网站)-章节资料考试资料-宁波城市职业技术学院[] 作业:购买阿里云ECS 作业:在万网注册域名 作业:ICP备案 微测验:准备主机 1.[单选题]ECS是阿 ...

  3. 吃透这套架构演化图,从零搭建Web网站也不难

    转载自 吃透这套架构演化图,从零搭建Web网站也不难 前言 工作也有几多年了,无论是身边遇到的还是耳间闻到的,多多少少也积攒了自己的一些经验和思考,当然,博主并没有太多接触高大上的分布式架构实践,相对 ...

  4. python h5开发_从零搭建移动H5开发项目实战

    从零搭建移动H5开发项目实战 前端H5的前世今身 在Pc的时代,前端技术无疑统治了大多数用户的交互界面!而在移动为王的今天,NA开发在早期占领了大多数用户的交互界面,后来逐渐的前端H5开发找到了自己的 ...

  5. fastdfs windows部署_从零搭建分布式文件系统MinIO比FastDFS要更合适

    前两天跟大家分享了一篇关于如何利用FastDFS组件来自建分布式文件系统的文章,有兴趣的朋友可以阅读下<用asp.net core结合fastdfs打造分布式文件存储系统>.通过留言发现大 ...

  6. springboot项目结构_从零搭建Spring Boot脚手架(1):开篇以及技术选型

    1. 前言 目前Spring Boot已经成为主流的Java Web开发框架,熟练掌握Spring Boot并能够根据业务来定制Spring Boot成为一个Java开发者的必备技巧,但是总是零零碎碎 ...

  7. haproxy负载均衡_使用haproxy搭建web集群

    会不会有那么一天,生活可以简单到每天清早踏上一辆载着鲜花的脚踏车,微笑着穿过窄窄的街巷,为爱花的人送去芬芳,为需要知识的你送去帮助. 简介 在前面已经学习了使用Nginx.LVS做负载均衡群集,它们都 ...

  8. java web应用开发技术_第一章 Java Web应用开发技术

    Java Web应用开发是基于JavaEE(JavaEnterprise Edition)框架的,而JavaEE是建立在Java平台上的企业级应用解决方案.JavaEES框架提供的Web开发技术主要支 ...

  9. 函数计算搭建 Serverless Web 应用(三)- 三分钟搭建 Web 应用

    简介 阿里云 函数计算(Function Compute) 是事件驱动的全托管计算服务,是阿里云的 Serverless 计算平台.基于函数计算构建应用,您无需管理服务器等基础设施,而是专注于应用逻辑 ...

最新文章

  1. Django mysql 多线程_【实例:利用Django管理后台管理IP地址】(四)Django test+多线程+数据库+(踩坑)...
  2. 图灵奖得主Hamming对于少数人获得重大成果原因的思考,送给此刻克服迷惘坚持前行的你...
  3. SAP RETAIL 事务代码MP38可以为多个物料执行预测
  4. Hadoop高速入门
  5. Visual Studio常用快捷键(非常实用)
  6. 你在发表理科学术文章过程中有哪些经验值得借鉴
  7. 前端DEMO:网络上流行的抖音罗盘
  8. 从 MySQL 5.6 升级到 MySQL 8.0,Facebook 付出了什么代价?
  9. POJ1088 Bailian1088 滑雪【DFS+记忆化搜索】
  10. excel mysql仓库管理_怎样用excel数据库建立仓库管理系统?
  11. python 提取百度网盘下载_百度网盘直链提取工具下载
  12. EChart案例-折线面积渐变色
  13. 淘宝账号 支付宝账号 阿里旺旺账号
  14. 极客日报:王者荣耀道歉:因新游海报擅用原神素材;Facebook改名为Meta;Node.js v16.13.0发布
  15. 有意思的张飞日记-_-
  16. 快来看,这些心理学家与诺贝尔奖有关系
  17. iconic 安装和使用
  18. 计算机突然需要管理者密码,为什么windows7旗舰版开启管理员帐号登录需要密码...
  19. 服务器维护 志愿填报时间顺延,因系统维护耽误考生填报,西藏高考志愿填报截止时间顺延两日...
  20. 用python解决微分方程

热门文章

  1. 十个最值得阅读学习的C开源项目代码
  2. Mac OS 下安装 MacVim
  3. 【转载】SQL中使用update inner join和delete inner join
  4. Adobe pixel Bender toolkit
  5. 不删除文件,清空文件内容命令
  6. 华为路由器qos car+nat+dhcp+vlan配置心得
  7. [公告]向大家汇报服务器的情况
  8. 基于Springboot开发的家庭财务管理系统
  9. Scala的特质(Trait)介绍
  10. 利用进化算法进行仿k-means聚类(可称之为EA-KMeans算法)