javaweb 初学建议
基本要求: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 初学建议相关推荐
- java开发程序员_Java大牛给入门Java开发程序员的10个学习建议
Java的知识点其实非常多,并且有些知识点比较难以理解,有时候我们自以为理解了某些内容,其实可能只是停留在表面上,没有理解其底层实现原理. 纸上得来终觉浅,绝知此事要躬行. 学习Java基础的时候,应 ...
- 新手学编程前端好还是后端?
听说前端已经卷的没边了,但是不用怕,有一部分是内耗,像这种领导不走我不走,同事不走我也不走,内耗不能产生价值,大部分都是做给别人看的. 选择前端就要坚定信念,一直学,早晚前端后端都是你的.前端pk后端 ...
- Java培训四个月能学会吗?
我觉得,完全零基础学不太会-太难了. 你可以花8个月去自学,如果时间允许的话.我就是这样做,也找到了工作. 学习路线: 这篇文章是为了介绍自己自学用过的Java视频资料.全部来自传智播客旗下的黑马程序 ...
- python数据分析张俊红_关于数据分析我们来聊聊Python
因为自己大学的时候自学过Python,所以最近我大学的很多朋友,问我Python应该怎么学?在这里给大家一一解答.因为我太明白自学时抓耳挠腮 捶胸顿足的某些瞬间. 所以在这里向刚学习用Python来做 ...
- 菜鸟教程python3-Python数据分析,学习路径拆解及资源推荐
原标题:Python数据分析,学习路径拆解及资源推荐 关于Python数据分析,其实网上能够找到的学习资源很多,主要分为两类: 一类是提供各种资源的推荐,比如书单.教程.以及学习的先后顺序: 另一类是 ...
- poj2175费用流消圈算法
题意: 有n个建筑,每个建筑有ai个人,有m个避难所,每个避难所的容量是bi,ai到bi的费用是|x1-x2|+|y1-y2|+1,然后给你一个n*m的矩阵,表示当前方案,问当前避难方案是否 ...
- MVC框架浅析(基于PHP)
MVC框架浅析(基于PHP) MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数 ...
- 后端程序员必备的Linux基础知识
学习Linux之前,我们先来简单的认识一下操作系统. 一 从认识操作系统开始 1.1 操作系统简介 我通过以下四点介绍什么是操作系统: 操作系统(Operation System,简称OS)是管理计算 ...
- 机器学习(七)——tf.keras搭建神经网络固定模式
一.总纲(一般按照下面6步搭建) import--导入相关模块 train,test--指定训练集与测试集 model = tf.keras.models.Sequential--在Sequentia ...
最新文章
- java 模仿支付成功_Java工程师薪资为何这么高?60W年薪如何轻松拿到手
- Kubernetes面试题超详细总结
- html input submit 执行,HtmlInputSubmit 服务器控件声明性语法
- 并发基础篇(二):Thread类的API总结
- 关于类与对象操作的细节与注意事项(c++细节篇三)
- 解决python多版本环境下pip报错Fatal error in launcher: Unable to create process using问题
- docker php 多端口,docker使用之php-fpm+apache多容器的xdebug和phpstorm的配置
- 特征提取(Feature Detection)之——HOG (Histogram of Oriented Gradient)特征
- Java Java Java
- JAVA多线程之男朋友和女朋友之间的故事
- Java反射机制是否会影响性能
- 运维面试和笔试常见问题
- 根据CTP接口计算现手、增仓、开平、对手盘 (2)
- python爬取下厨房本周受欢迎菜谱
- 什么是BI、什么是ETL?一篇文章告诉你
- LogBack 日志压缩产生上百G的tmp文件问题
- java设置excel标题栏_Java EasyExcel写入Excel中复杂头(head)表中的标题的方法及示例代码...
- CentOS_anydesk
- 航班时间(第九届蓝桥杯省赛C++A组)
- FME高性能编程,让你的FME快起来
热门文章
- java 方法详解_Java方法详解
- 20200702:最长公共子序列(leetcode1143)
- caf格式 android,实例:Android Studio3+版本 获取存有ANR信息的traces.txt文件,解决ANR问题...
- 修改 连接层_Mybatis连接池_动态sql语句_多表查询实现
- 百度最全的LINUX和Redhat学习教程下载帖大全
- C# 解析Excel中的那些事儿
- 软银愿景叕10亿美元砸向无人车,Nuro投后估值27亿美元
- DeepMind作弊?被质疑干翻星际2顶尖高手全靠手速
- 思必驰十年创业,(现在)是一家怎样的公司?
- 独家 | 李飞飞亲口跟我们说:离职Google是假新闻