基本要求:Java 编程基础

有良好的 Java 语言编程基础,这是必须的,在讨论 Web 开发技术时提了一个 Java 编程基础的问题会被鄙视的。

了解 Servlet 和 Filter

一个最基本的 Java Web 项目所需的 jar 包只需要一个 servlet-api.jar ,这个 jar 包中的类大部分都是接口,还有一些工具类,共有 2 个包,分别是 javax.servlet 和 javax.servlet.http。所有的 Servlet 容器都带有这个包.

Java Web 项目还需要一个非常重要的配置文件 web.xml 。 每个 servlet 都必须在 web.xml 中定义并进行 URL 映射配置,早期 Java 开发 Web 在没有框架满天飞的时候,这个文件会定义了大量的 servlet,或者有人为了省事干脆来一个 /servlet/* 来通过类名直接调用 Servlet。

Servlet 规范里还有另外一个非常重要而且非常有用的接口那就是 Filter 过滤器。

下面是一个最简单的 Filter 类以及相应的定义方法:

在 web.xml 中Filter  的配置必须放在 Servlet 的前面

Servlet 和 HTTP 的对应关系

Servlet 是 J2EE 最重要的一部分,有了 Servlet 你就是 J2EE 了。而 Servlet 规范你需要掌握的就是 servlet 和 filter 这两项技术。绝大多数框架不是基于 servlet 就是基于 filter,如果它要在 Servlet 容器上运行,就永远也脱离不开这个模型。

为什么 Servlet 规范会有两个包,javax.servlet 和 javax.servlet.http ,早先设计该规范的人认为 Servlet 是一种服务模型,不一定是依赖某种网络协议之上,因此就抽象出了一个 javax.servlet ,同时再提供一个基于 HTTP 协议上的接口扩展。但是从实际运行这么多年来看,似乎没有发现在其他协议上实现的 Servlet 技术。

javax.servlet 和 javax.servlet.http 这两个包总共加起来也不过是三四十个接口和类。你需要通过J2EE 的 JavaDoc 文档 熟知每个类和接口的具体意思。特别是下面几个接口必须熟知每个方法的意思和用途:

  • Filter
  • FilterChain
  • FilterConfig
  • HttpServlet
  • HttpServletRequest
  • HttpServletResponse
  • HttpSession
  • RequestDispatcher
  • ServetConfig
  • ServletContext
  • 一些 Listenser 类

再次强调 HttpServletRequest 和 HttpServletResponse 这两个接口更应该是烂熟于心。

为什么我这么强调 HttpServletRequest 和 HttpServletResponse 这两个接口,因为 Web 开发是离不开 HTTP 协议的,而 Servlet 规范其实就是对 HTTP 协议做面向对象的封装,HTTP协议中的请求和响应就是对应了 HttpServletRequest 和 HttpServletResponse 这两个接口。

你可以通过 HttpServletRequest 来获取所有请求相关的信息,包括 URI、Cookie、Header、请求参数等等,别无它路。因此当你使用某个框架时,你想获取HTTP请求的相关信息,只要拿到 HttpServletRequest 实例即可。

而 HttpServletResponse接口是用来生产 HTTP 回应,包含 Cookie、Header 以及回应的内容等等。

再谈谈 Session

HTTP 协议里是没有关于 Session 会话的定义,Session 是各种编程语言根据 HTTP 协议的无状态这种特点而产生的。其实现无非就是服务器端的一个哈希表,哈希表的Key就是传递给浏览器的名为 jsessionid 的 Cookie 值。

当需要将某个值保存到 session 时,容器会执行如下几步:

a. 获取 jsessionid 值,没有的话就生成一个,也就是 request.getSession() 这个方法
b. 拿到的 HttpSession 对象实例就相当于一个哈希表,你可以往哈希表里存放数据(setAttribute)
c. 你也可以通过 getAttribute 来获取某个值

而这个名为 jsessionid 的 Cookie 在浏览器关闭时会自动删除。把 Cookie 的 MaxAge 值设为 -1 就能达到浏览器关闭自动删除的效果。

关于 JSP

首先我已经不用 JSP 很多年了,现在一直是使用 Velocity 模板引擎。

任何一个 JSP 页面在执行的时候都会编译成一个 Servlet 类文件,如果是 Tomcat 的话,这些生成的 java 文件会放置在 {TOMCAT}/work 目录下对应项目的子目录中

在 servlet 中有一个包 javax.servlet.jsp 是跟 JSP 相关的一些接口规范定义。JSP 比 Servlet 方便的地方在于可直接修改立即生效,不像 Servlet 修改后必须重启容器才能生效。

因此 JSP 适合用来做视图,而 Servlet 则适合做控制层。

总结

罗哩罗嗦一大堆,归纳一下就是下面几点:

  • 熟知 Servlet 规范之前,请不要学习任何框架
  • 使用最简单的工具,不要任何向导和可视化
  • 熟知 HTTP 协议

等你真的掌握了 Servlet 规范再去看框架,便会觉得一些都小菜。总之一点:不要被框架牵着鼻子走,框架是你的工具,它应该听你的!

转载于:https://blog.51cto.com/2301703/1040934

javaweb 初学建议相关推荐

  1. java开发程序员_Java大牛给入门Java开发程序员的10个学习建议

    Java的知识点其实非常多,并且有些知识点比较难以理解,有时候我们自以为理解了某些内容,其实可能只是停留在表面上,没有理解其底层实现原理. 纸上得来终觉浅,绝知此事要躬行. 学习Java基础的时候,应 ...

  2. 新手学编程前端好还是后端?

    听说前端已经卷的没边了,但是不用怕,有一部分是内耗,像这种领导不走我不走,同事不走我也不走,内耗不能产生价值,大部分都是做给别人看的. 选择前端就要坚定信念,一直学,早晚前端后端都是你的.前端pk后端 ...

  3. Java培训四个月能学会吗?

    我觉得,完全零基础学不太会-太难了. 你可以花8个月去自学,如果时间允许的话.我就是这样做,也找到了工作. 学习路线: 这篇文章是为了介绍自己自学用过的Java视频资料.全部来自传智播客旗下的黑马程序 ...

  4. python数据分析张俊红_关于数据分析我们来聊聊Python

    因为自己大学的时候自学过Python,所以最近我大学的很多朋友,问我Python应该怎么学?在这里给大家一一解答.因为我太明白自学时抓耳挠腮 捶胸顿足的某些瞬间. 所以在这里向刚学习用Python来做 ...

  5. 菜鸟教程python3-Python数据分析,学习路径拆解及资源推荐

    原标题:Python数据分析,学习路径拆解及资源推荐 关于Python数据分析,其实网上能够找到的学习资源很多,主要分为两类: 一类是提供各种资源的推荐,比如书单.教程.以及学习的先后顺序: 另一类是 ...

  6. poj2175费用流消圈算法

    题意:      有n个建筑,每个建筑有ai个人,有m个避难所,每个避难所的容量是bi,ai到bi的费用是|x1-x2|+|y1-y2|+1,然后给你一个n*m的矩阵,表示当前方案,问当前避难方案是否 ...

  7. MVC框架浅析(基于PHP)

    MVC框架浅析(基于PHP) MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数 ...

  8. 后端程序员必备的Linux基础知识

    学习Linux之前,我们先来简单的认识一下操作系统. 一 从认识操作系统开始 1.1 操作系统简介 我通过以下四点介绍什么是操作系统: 操作系统(Operation System,简称OS)是管理计算 ...

  9. 机器学习(七)——tf.keras搭建神经网络固定模式

    一.总纲(一般按照下面6步搭建) import--导入相关模块 train,test--指定训练集与测试集 model = tf.keras.models.Sequential--在Sequentia ...

最新文章

  1. java 模仿支付成功_Java工程师薪资为何这么高?60W年薪如何轻松拿到手
  2. Kubernetes面试题超详细总结
  3. html input submit 执行,HtmlInputSubmit 服务器控件声明性语法
  4. 并发基础篇(二):Thread类的API总结
  5. 关于类与对象操作的细节与注意事项(c++细节篇三)
  6. 解决python多版本环境下pip报错Fatal error in launcher: Unable to create process using问题
  7. docker php 多端口,docker使用之php-fpm+apache多容器的xdebug和phpstorm的配置
  8. 特征提取(Feature Detection)之——HOG (Histogram of Oriented Gradient)特征
  9. Java Java Java
  10. JAVA多线程之男朋友和女朋友之间的故事
  11. Java反射机制是否会影响性能
  12. 运维面试和笔试常见问题
  13. 根据CTP接口计算现手、增仓、开平、对手盘 (2)
  14. python爬取下厨房本周受欢迎菜谱
  15. 什么是BI、什么是ETL?一篇文章告诉你
  16. LogBack 日志压缩产生上百G的tmp文件问题
  17. java设置excel标题栏_Java EasyExcel写入Excel中复杂头(head)表中的标题的方法及示例代码...
  18. CentOS_anydesk
  19. 航班时间(第九届蓝桥杯省赛C++A组)
  20. FME高性能编程,让你的FME快起来

热门文章

  1. java 方法详解_Java方法详解
  2. 20200702:最长公共子序列(leetcode1143)
  3. caf格式 android,实例:Android Studio3+版本 获取存有ANR信息的traces.txt文件,解决ANR问题...
  4. 修改 连接层_Mybatis连接池_动态sql语句_多表查询实现
  5. 百度最全的LINUX和Redhat学习教程下载帖大全
  6. C# 解析Excel中的那些事儿
  7. 软银愿景叕10亿美元砸向无人车,Nuro投后估值27亿美元
  8. DeepMind作弊?被质疑干翻星际2顶尖高手全靠手速
  9. 思必驰十年创业,(现在)是一家怎样的公司?
  10. 独家 | 李飞飞亲口跟我们说:离职Google是假新闻