1、什么是JavaEE?
JavaEE最核心的组件就是基于Servlet标准的Web服务器,开发者编写的应用程序时基于 Servlet API并运行在Web服务器内部
用B/S架构时,总是通过HTTP协议实现通信;Web开发通常是指开发服务器端的Web应用程序
JDBC
概念:Java DataBase Connectivity java 数据库连接,Java语言操作数据库
JDBC的本质:sun公司定义的一套关于所有关系型数据库的规则,即接口,各个数据库厂商去实现这个接口,提供数据区驱动jar包。
我们可以使用这套接口(JDBC)编程,真正执行的代码时驱动jar包中的实现类
DriverManager:驱动管理对象
Connection:数据库连接对象
Statement:执行sql的对象(不推荐使用,存在sql注入问题)
prepareStatement:执行sql的对象(推荐)
ResultSet:结果集对象(执行查询sql返回)
setAutoCommit:设置事务,是否自动提交(默认自动)
常用数据库连接池:HikaryCP、Druid、Spring JDBC、C3P0
3、Servlet入门
- 一个Servlet总是继承自HttpServlet然后复写doGet()和doPost()方法。
- HttpServletRequest(以下简写request)
- HttpServletResponse (以下简写response)
- 分别代表,请求和响应
- 把要运行的 .war文件,放在Tomcat的webapps目录下,启动tomcat即可访问
- Servlet不能直接运行,必须由Servlet容器自动创建Servlet实例,所以,类似Tomcat这样的Web服务器也被称之为 Servlet容器
- Servlet容器只会个每个Servlet类创建唯一实例,使用多线程执行其内的方法,在Servlet中定义的实例变量会被多线程同时访问,要注意线程安全,当然request和response实例时Servlet容器传入的局部变量,只能被当前线程访问,不存在多线程问题
- 小结:
- 编写Web应用程序就是编写Servlet处理HTTP请求
- Servlet API提供了HttpServletRequest和HttpServletResponse两个高级接口来封装HTTP请求和响应
- Web应用程序必须按固定格式组织并打包为.war文件,需要启动Web服务器来加载我们的war包运行Servlet
4、Servlet开发
一个完整的Web应用程序的开发流程如下:
- 编写Servlet
- 打包为war文件
- 复制到Tomcat的webapps目录下
- 启动Tomcat
- 打包为war文件
很是繁琐,所以我们需要一个简单可靠,能直接在ide中启动并调用webapp的方法,那就是嵌入式tomcat,因为Tomcat实际上也是一个Java程序,我们看看Tomcat的启动流程
- 启动JVM并执行Tomcat的main()方法
- 加载war并初始化Servlet
- 正常服务
可以看出启动Tomcat为非就是设置好classpath并执行Tomcat某个jar包中main()方法,我们完全可以把Tomcat的jar包全部引进来,然后自己编写一个main()方法,先启动Tomcat,然后让它加载我们的webapp就行了,使用方式:地址
小结:开发Servlet时,可以使用嵌入式Tomcat服务器并加载当前工程的webapp,便于开发调试,且不影响打包部署,能极大地提升开发效率
5、Servlet进阶
- 一个Webapp中的多个Servlet依靠路径处理不同的请求
- 映射为 / 的Servlet可以处理所有"未匹配"的请求
- 如何处理请求取决于Servlet复写的对应方法
- Web服务器通过多线程处理HTTP请求一个Servlet的处理方法可以由多线程并发执行
6、重定向与转发
- 重定向(Redirect):地址栏会发生改变,使用方式其一
- response.sendRedirect("/hello");
- 转发(Forword):地址栏不会发生改变
- request.getRequestDispaticher("/hello")
- 小结:
- 使用重定向时,因为浏览器知道重定向规则,并且会自动发起新的HTTP请求
- 使用转发时,则浏览器并不知道服务器内部的转发逻辑
7、Cookie和Session
学习Cookie和Session之前,我们需要先了解一下什么时会话技术
- 会话:一次会话中回包含多个请求和响应
- 功能:在一次会话的范围内的多次请求间,共享数据
- 方式:
- 客户端会话技术:Cookie
- 服务器端会话技术:Session
- 方式:
Cookie
Cookie:cookie存储数据在客户端浏览器,浏览器对于单个cookie的大小有限制(4kb)以及对同一个域名下的总cookie数量也有限制(20个)
作用:
- cookie一般用于存储少量的不太敏感的数据
- 在不登录的情况下,完成服务器对客户端的身份识别
实现原理:基于响应头set-cookie和请求头cookie实现
快速入门:
使用步骤:
- 创建Cookie对象,绑定数据
new Cookie(String name,String value) - 发送Cooie对象
response.addCookie(Cookie cokkie) - 获取Cookie对象,拿到数据
Cookie[] request.getCookies()
Session
Session:基于唯一ID识别用户身份的机制称为Session。每个用户第一次访问服务器后,会自动后的一个Session ID。如果用户在 一段时间内没有访问服务器,那么Session会自动失效,下次即使带着上次分配的Session ID访问,服务器也认为这是一个新用户,会分配新的Session ID。
Session的特点
- session用于存储一次会话的多次请求的数据,村在服务器端
- session可以存储任意类型,任意大小的数据
Session适用于中小型Web应用程序,对于大型Web应用程序来说,通常需要避免使用Session机制
Cookie和Session的区别:
- session存储数据在服务器端,Cookie在客户端
- session没有数据大小限制,Cookie有
- session数据安全,Cookie相对不安全
JSP
JSP是一种在HTML中嵌入动态输出的文件,它和Servlet正好相反,Servlet时在Java代码中嵌入输出HTML
JSP可以引入并使用JSP Tag,但语法复杂不推荐使用
MVC开发
流程:
- 浏览器发送请求
- Controller(控制器)
- Model(模型)
- View(视图)
优点:Controller专注于业务处理,他的处理结果就是Model。Model可以是一个JavaBean,也可以是一个包含多个对象的Map,Controller只负责把Model转递给View,View之复杂把Model给“渲染”出来,这样三者职责明确,且开发更简单,因为开发Controller时无需关注页面,开发View时无需关心如何创建Model
一个MVC框架时基于Servlet基础抽象出更高级的接口,使得上层基于MVC框架的开发不涉及Servlet相关的HttpServletRequest等接口,处理多个请求更加灵活,并且可以使用任意模板引擎,不必使用 JSP
Filter(过滤器)
Filter:处理公共通用的业务,如更改字符集,拦截未登录用户等等…
基本介绍:
- 实现Filter接口
- 在doFilter()方法内部,处理请求,最后必须调用chain.doFilter()
- 最后使用@WebFilter注解标注该Filter需要过滤的URL。这里的 /* 表示所有路径
- 可以在web.xml中配置过滤器的执行顺序
修改请求:Filter可以对请求进行预处理,因此我们可以把很多公共的于处理的逻辑放在Filter中完成,借助HttpServletRequestWraper,我们可以在Filter中实现对原始HtppServletRequest的修改
修改响应:借助HttpServletResponseWrapper,我们可以在Filter中实现对原始HttpServletRequest的修改
小结:
- Filter是一种对HTTP请求进行预处理的组件,它可以构成一个处理链,使得公共代码能集中到一起
- Filter适用于日志、登陆检查、全局设置等
- 设计合理的URL映射可以让Filter链更清晰
Listenner(监听器)
通过Listenner我们可以监听Web应用程序的生命周期,获取HttpSession等创建和销毁的事件,ServletContext是一个WebApp运行期的全局唯一实例,可以设置和共享配置信息