第一个 JAVA WEB 应用

注意:本文的基本条件是基于Tomcat的常规 java web开发,web 开发的模式非常对,种类也非常多,切勿对号入座。

接上一篇文章,本章讲解下搭建第一个Java Web应用。当然,如果只是导入运行完事,那么没必要看这篇文档,因为我向稍微细致讲解下,以方便读者更加清楚的理解下原理。

事实上我写这篇文章是有一定个人想法的,有那么一段时间,我接触过一些刚接触java web的小伙伴(新手也行,菜鸟也罢), 很大部分人有一个共性,就是一上来就要搞大框架,什么SSH框架,什么SSM框架,这一点我其实很反对,当然我并不反对用框架,只是觉得没有比较刚一上来就要去接触什么大框架,很多人就是在这些框架中把自己搞混了,以至于很快从入门到放弃, 所以,这篇文章我要讲的是很原始的java web,没有任何框架,就是希望你读了之后能对jiava web有更加直观的认识,并且多说一句,一旦你能够形成这个直观且清醒的认识,你会发现,那些所谓的框架,其实都是基于此而开发的,无非就是简化开发周期,加快效率罢了,甚至到最后,你更想自己手撸一套自己的框架。

看过别人的代码的小伙伴肯定对 web.xml 这个文件有映像, 开发java web, 第一点,也是至关重要的一点,就是要正确理解web.xml 文件,下面是一个web.xml的文件示例,为了突出重点,很多其他边边角角的配置我都没加,这样才能更加突出核心。

WebDemo

TestServlet

com.webdemo.servlet.TestServlet

TestServlet

/TestServlet

先脑补一个场景,一次http请求具体的流程应该是什么:

浏览器发出http请求 -> 服务器接收请求 -> 服务器找到可以处理该类的方法 -> 处理请求 -> 返回结果给浏览器

可能不全面,但是基本上就这个流程,那么在这个流程中,我们用到的 Tomcat 就充当了服务器这个角色,那么流程的第三阶段“服务器找到可以处理该类的方法”显得非常重要,服务器凭什么去找到这个方法,凭的就是web.xml 的配置,注意看在 web.xml 中有一对标签和标签。

TestServlet

com.webdemo.servlet.TestServlet

TestServlet

/TestServlet

注意在 和 标签中都定义了一个 , 并且他们的值都一样(这里均为 TestServlet), 像这样的拥有相同值的servlet 和 servlet-mapping 构成一对请求处理对应关系,怎么构成的呢。

首先, 在 标签中,有一个 标签,该标签中的值 /TestServlet 代表的意义就是uri path, 也就是我们实际通过浏览器访问的路径。

例如,在浏览器中输入: http://127.0.0.1:8080/MyWebapp/TestServlet, 那么 tomcat 解析出来的 uri 就是/TestServlet .

然后通过这个值找到对应的中的servlet-name的值, 也就是TestServlet:

TestServlet

/TestServlet

接着根据这个值找到对应的,也就是:

TestServlet

com.webdemo.servlet.TestServlet

然后在这个标签中找到中的值, 也就是 com.webdemo.servlet.TestServlet, 很明显,这是一个java类,然后Tomcat会去找到这个类来处理我们发出的请求。

接下来就是进入这个类,看具体怎么去处理,先看代码:

public class TestServlet extends HttpServlet {

@Override

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

resp.setContentType("text/html;charset=utf-8");

PrintWriter writer = resp.getWriter();

writer.println("hello");

writer.close();

}

}

这个类需要继承 HttpServlet 在里面, 该类里面有一堆函数,类似于 doGet, doPost这些, 对应与不同的请求类型,例如如果是get方法的请求,那么会自动调用doGet方法。那么只需要在这个基础上继续写你的逻辑就行了。

是不死很简单,只要整个流程及逻辑关系理清楚了,其实一点也不复杂,那么回过头来,开始的时候,提了一句那些很牛逼的的框架,像SpringMVC, 其实也是基于这个来完成的,那么现在我们就来看看SpringMVC这个框架怎么用,使用SpringMVC时的第一个配置如下:

springmvc

org.springframework.web.servlet.DispatcherServlet

1

contextConfigLocation

classpath*:springmvc-servlet.xml

springmvc

/

注意看,其实也是一对和 组合,这个配置的意思是,所有的请求都转发到org.springframework.web.servlet.DispatcherServlet这个配置去处理,实际上,这个所谓的org.springframework.web.servlet.DispatcherServlet类,其实实质上和我们上面写的servlet类是一样了,只不过它更加复杂,更加牛逼。

所以,只要你精力足够,自己写一套框架实际上也不难吧,SpringMVC不也是基于这些基础的东西做的嘛。

基于Java的webapp_第一个 JAVA WEB 应用相关推荐

  1. java使用socket实现一个多线程web服务器

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用socket实现一个多线程web服务器 除了服务器类,还包括请求类和响应类 请求类:获取客户的HTTP请求,分析客户所需要的文件 响应 ...

  2. (一)初识java ---我的第一个java程序

    初识java ---我的第一个java程序 课程目录 l  準備 l  開発環境的準備 l  環境変数Path設定 l  第一个程序 目标 «  实现自己的HelloWorld并运行看到结果 一.準備 ...

  3. java类库geotools_Geotools是一个java类库

    Geotools是一个java类库,它提供了很多的标准类和方法来处理空间数据,同时这个类库是构建在OGC标准之上的,是OGC思想的一种实现.而OGC是国际标准,所以geotools将来必定会成为开源空 ...

  4. java 脚手架_撸一个Java脚手架,一统团队项目结构风格

    虽然maven已经提供了maven-archetype-webapp.maven-archetype-quickstart等项目骨架帮助我们快速构建项目架构,但是默认提供的archetype初始化的项 ...

  5. java图片缩放工具类,一个JAVA图形缩放处置工具类

    一个JAVA图形缩放处理工具类 调用的例子 import java.io.FileOutputStream; import java.io.IOException; import javax.imag ...

  6. 一个java源文件允许_一个Java源文件中最多只能有一个class定义

    一个Java源文件中最多只能有一个class定义 答:× 确诊甲状腺功能紊乱的常规指标是 答:FT3和FT4 I will not let my children in that way. 答:be ...

  7. java gui 打开另一个,java – 从另一个JFrame Gui访问vars

    好的,我已根据您的说法对我的代码进行了一些更改.我有3个班: 第二类(和第一个GUI):我有4个JButton – Simulare,CazParticular,Start和HandSelection ...

  8. java多状态机_一个java状态机样例的代码

    在UML当中有状态机视图,这个状态机可以用于自动售货机,自动售票机等等场景,下面是用java代码模拟的一个状态机: 1.状态机接口 package stateMachine; /** * 状态机接口 ...

  9. java 级数_编写一个Java程序实现级数运算。

    编写一个Java程序实现级数运算.其中:定义级数求和类,以及级数求积(阶乘)类,在项目主类中声明一个级数求和对象和求阶乘对象,由键盘输入级数的n值,并打印出1+2+...+n的和,以及... 编写一个 ...

  10. 揭秘java虚拟机 kindle_Kindle有一个java虚拟机

    Kindle有一个java虚拟机 从网上已经出现的资料看,kindle严重依赖java.所有的应用都象是用java开发的.好象kindle是用的CDC和CVM.如果Amazon开放kindle,jav ...

最新文章

  1. java能不能修改文件大小信息,更改最大上传文件大小
  2. Chapter 5. Expressions
  3. MaxKey单点登录认证系统 v2.4.0 RC
  4. php mysql 框架_YCKIT-一个基于PHP+MYSQL架构下的敏捷开发框架
  5. 大数据-03-Spark入门
  6. ListT清除重复某一项
  7. treewidget怎么设置某一个item拖动的_如何零基础撸一个专车小程序?看这一文就够了!...
  8. linux查询文件存储格式,蜗牛哥:Linux中查看文件内容,5种常用查看方式
  9. rocketmq消息积压
  10. react-native升级到0.63ios图片不展示
  11. 大数据电影可视化系统
  12. 360浏览器打不开html5文件,电脑中360安全浏览器无法打开的解决方法
  13. 计算机进入启动死循环,Win10开机死循环重启解决方法
  14. 二维码在企业移动中的应用
  15. ubuntu服务器pdf文件大小,Ubuntu下的PDF阅读器okular安装使用介绍
  16. ★★★Win10切换本地账户(最全版本)
  17. Tio实现检测客户端是否在线发送钉钉群消息
  18. matlab 应用技术 在电气工程与自动化专业中的应用下载,《MATLAB应用技术-在电气工程与自动化专业中的应用》(王忠礼著).pdf...
  19. JSP九大内置对象和四个作用域
  20. 宋晓丽竟是地产富翁千金 与俊男刘涛地下情多年

热门文章

  1. mysql query cache_MySQL Query Cache开启与否的必要性分析
  2. html如何加入浮动客服,css如何实现客服悬浮效果
  3. 几点减几点怎么列算式_结婚邀请函怎么写样板 结婚邀请函有哪几点是必写的...
  4. mac 2k显示器字体发虚_亲身实践:Mac mini 搭配戴尔显示器体验
  5. java服务器必读_Java服务器端编程安全必读
  6. P3649 [APIO2014]回文串
  7. Linux FTP 服务器配置简单说明
  8. 割裂的前端工程师--- 2017年前端生态窥探
  9. iOS NSURLSession
  10. SCVMM 2012 部署测试之五向SCVMM中添加Hyper-V主机