Unit_1 -- Java 应用程序开发
#Part_4
First:Servlet 编程
01:Servlet 概念
Java Servlet 是运行在 web 服务器或者应用服务器上的程序,它是作为 HTTP 客户端请求和 HTTP 服务器上的数据库或应用程序之间的中间层;
1.1:Servlet 相关的接口和类
接口:
Servlet、ServletConfig、ServletRequest、ServletResponse、HttpServletRequest、HttpServletResponse、ServletContext
类:
HttpServlet(抽象类)、GenericServlet(抽象类)
02:Servlet 使用
2.1:Servlet 的开发方式
①:实现 Servlet 接口 (可以看出 Servlet 生命周期);
②:通过继承 GenericServlet;
③:通过继承 HttpServlet (常用)
2.2:实现 Servlet 接口方式
主要方法 | |
---|---|
viod init(ServletConfig sc) | 注意事项:初始化方法就是把该 Servlet 装载到内存中,该函数只会被调用一次 |
ServletConfig getServletConfig() | 得到 ServletConfig 对象 |
String getServletInfo(); | 该函数时得到 Servlet 配置信息 |
void service(ServletRequest req, ServletResponse resp) | 注意事项:该函数时服务函数,业务逻辑代码就是写在这里,每次都会执行 |
void destory() | 销毁 Servlet 从内存中删除 注意事项:该函数被调用一次(1:reload 该 Servlet ;2:关闭 Tomcat;3:关机情况实现) |
useUnicode=true&characterEncoding=UTF8 | 添加这个时为了防止乱码,指定使用 Unicode 字符集,且使用 UTF-8 来编辑 |
配置 web.xml ,相当于初始化配置,比如访问 Servlet ,配置一个 Servlet 路径、配置监听器、配置拦截器、配置项目发生错误的默认找的页面,配置编码格式等等,很关键
2.3:Servlet 的使用 --- 继承 HttpServlet 方式
@WebServlet(name="MyHttpServlet")
public class MyHttpServlet extends HttpServlet {
//在 HttpServlet 中,设计者对 post 提交和 get 提交分别做了处理
//<form action ="提交给?" method="post|get"/>,默认是get
protected void doGet(HttpServletRequest req,HttpServletRespose resp)
throws SetvletException,IOException{
resp.getWriter().println("i am httpservlet doGet()");
}
protected void doPost(HttpServletRequest req,HttpServletRespose resp) {
}
}
ServletRequest 和 ServletRespose 接口
当用户请求到来时,Servlet 容器会创建一个 ServletRequest 对象封装请求数据,同时创建ServletRequest对象封装响应数据,HttpServletRequest 和 HttpServletRespose 分别实现这两个接口
ServletRequest 主要方法 | |
---|---|
Object getAttribute(String name) | 返回属性名为 name 的属性值 |
Enumeration getAttributeNames() | 返回请求中所有的属性 |
void removeAttribute(String name) void setAttribute(String name, Object obj) | 设置属性 |
String getCharacterEncoding(); String getParameter(String name) | 返回请求 name 参数的值 |
Enumeration getParameterNames() | 获取所有参数名称 |
ServletOutputStream getOutputStream() | 用来发送对客户端的响应 |
PrintWriter getWrite() | 用来将字符文本发送到客户端 |
Servlet 域对象:在指定区域中实现数据共享的对象
域对象统一方法:
①:在设置作用域中共享数据:作用域对象.setAttribute(String name, Object value);
②:获取作用域中的共享数据:Object value = 作用域对象.getAttribute(String name);
③:删除作用域中指定的共享数据:作用域对象.removeAttribute(String name)
Servlet 有三大作用域对象:request、 session、 application
ServletRequest 主要方法 | ||
---|---|---|
request | request 表示一个请求,只要发出一个请求就会创建一个 request ,它的作用域仅在当前请求中有效 | ①:用于服务器间同一请求不同页面之间的参数传递; ②:用于表单的控件值传递 |
session | ①:session 中的数据可供当前会话中的所有 Servlet 共享 ②:从用户打开浏览器开始,一直到关闭浏览器才结束,一次会话期间只会创建一个 session 对象 | ①:用于 web 开发中的登录验证; ②:用于电商网站中的购物车功能; ③:销毁的场景 ④:session 超时;浏览器关闭后,session 会在超时之后被销毁; ⑤:调用 session.invalidate() 方法 |
application | 表示一个应用,作用域整个 web 应用,可以实现多次会话之间的数据共享 | 在整个上下文中生效,可使用统计当前页面被访问了多少次 |
03:Servlet 生命周期
3.1:生命周期
1. web服务器首先会检查是否已经装载并创建了该 Servlet 实例对象。如果是直接进行第 “4” 步,否则执行第 “2” 步;
2. 装载并创建该 Servlet 的一个实例对象;
3. 调用 Servlet 实例对象的 init() 方法;
4. 创建一个用于封装 HTTP 请求消息的 HttpServletRequest 对象和一个代表 HTTP 响应消息的 HttpServletResponse 对象,然后调用 serviceI() 方法并将请求和响应作为参数传递进去;
5. web 应用被停止或重启之前,Servlet 引擎将 卸载 Servlet ,在卸载之前调用 Servlet 的 destroy() 方法。
web 服务器收到客户端的 HTTP 请求,会针对每一次请求,分别创建一个用于代表请求的 request 对象、和代表响应的 response 对象。 request 和 response 对象既然代表请求和响应,那我们要获取客户机提交过来的数据只需要找 request 对象就行了;要向客户机输出数据,只需要找 response 对象就行了;
HttpServletRequest
①:公共接口类 HttpServletRequest 继承自 ServletRequest。客户端浏览器发出的请求被封装成为一个 HttpServletRequest 对象;
②:对象包含了所有的信息包括请求的地址、请求的参数、提交的数据、上传的文件客户端的 IP ,甚至客户端操作系统都包含在其内;
HttpServletResponse
HttpServletRequest 对象代表服务器的响应。这个对象中封装了向客户端发送数据,发送响应头,发送状态码的方法;
04:转发和重定向的使用
4.1:区别
①:转发使用request ,而重定向使用 response;
②:转发 URL 不会发生变化,重定向 URL 会发生变化;
③:转发可以携带参数,重定向一般不携带参数;
④:转发的是同一次请求,重定向是两次不同的请求;
⑤:转发的速度快,重定向的速度慢;
⑥:转发是服务端的行为,重定向是客户端的行为;
⑦:转发只能在同一路径下,重定向可以到任意地址;
⑧:转发中的路径前面可以加上 “/” ,表示从项目的根目录下去寻找,而重定向的时候路径前面绝对不可以加上“/”,因为重定向的路径前面加上“/” 表示从服务器的根目录下去寻找,即在 Tomcat 的根目录下寻找,就会丢失项目名称,发送 404 错误。
05:Tomcat 的介绍和使用
Tomcat 服务器是一个免费开源的 web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选;
Tomcat 下载和安装
安装地址: http://tomcat.apache.org/download-80.cgi ,前提在本地 JDK 安装没问题的情况。
Tomcat 使用
Tomcat 使用--目录结构
bin | 启动和关闭 Tomcat 的 bat 文件 |
---|---|
conf | 配置文件 |
sever.xml | 该文件用于配置和 server 相关的信息,比如 Tomcat 启动端口后,配置 Host ,配置 Context 即 web 应用 |
web.xml | 该文件配置与 web 应用(web 应用就相当于是一个 web 站点) |
tomcat-users.xml | 该文件用于用户配置 Tomcat 的用户密码和权限 |
lib 目录 | 该目录放置运行 Tomcat 运行时需要的 Jar 包 |
logs 目录 | 存放日志,当启动 Tomcat 错误的时候,可以查询信息(Linux 系统用 tail -f catalina.out 命令查看) |
webapps 目录 | 该目录下,放置我们的 web 应用 |
work:工作目录 | 该目录用于存放 JSP 被访问后,生成的对应的 .java 文件和 .class 文件 |
Second:Mybatis 编程
01:Mybatis 框架的使用
1.1:Mybatis 概述
软件框架是为了实现组件特定规范,并提供规范所要求的基础功能的软件;
使用软件框架的好处有哪些?
①:不用再考虑公共问题;
②:专心在业务实现上;
③:结构统一,易于学习 和 维护;
④:新手也可以写出好程序;
SSM 是由 Spring、SpringMVC、Mybatis 三个开源框架整合而成,适用于 web 项目的框架集;
1.1.1:Mybatis 简介
Mybatis 框架是一个支持自定义 SQL 、存储过程 和 高级映射的持久层框架。
Ⅰ:Mybatis 前身是 iBatis ,是 Apache 的一个开源的项目,它是一种 ORM(Object Relational Mapping)框架;
Ⅱ:ORM 是将程序中的对象与关系数据库中的数据建立映射关系的编程技术;
1.1.2:特点
①:基于 SQL 语法,简单易学;
②:能了解底层封装过程;
③:SQL 语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度;
④:方便程序代码调试。
1.2:如何使用 Mybatis 框架
1.2.1:第一步:GitHub 官网下载 MySQL 版本,导入 MyBatis 框架的Jar 包、MySQL 包
1.2.2:编写 MyBatis 核心配置文件(mybatis-config.xml)
注意事项:
MyBatis 和 Spring 框架整合后,数据源信息会在 Spring 框架中进行配置,MyBatis很少单独使用
1.2.3:创建实体类 -- POJO
public class Meeting {
private Integer id;
private String meetingName;
private String startTime;
private String endTime;
private Integer provinceId;
private Integer cityId;
private Integer countyId;
private String address;
private String contact;
private String telephone;
private String mobilephone;
private String introduce;
private String image;
private Integer state;
}
1.2.4:Dao 层 --- SQL 映射文件(mapper.xml)
1.2.5:创建测试类
02:Mapper 接口的使用
2.1:如何使用 Mapper 接口
①:导入 MyBatis 框架的 Jar 包、MySQL 驱动包(同上);
②:编写 MyBatis 核心配置文件(mybatis-config.xml)(同上);
③:创建实体类 - POJO(同上);
④:Dao 层 -- SQL 映射文件(mapper.xml)
⑤:Dao 层 - Mapper 接口文件(MeetingDao.java)
⑥:创建测试类
03:Mybatis配置文件
3.1:properties 配置数据库信息
3.2:settings:MyBatis 的一些全局配置属性的设置
设置项 | 描述 | 允许值 | 默认值 |
---|---|---|---|
cacheEnabled | 对在此配置文件下的所有 cache 进行全局性开/关设置 | true / false | true |
lazyLoadingEnabled | 全局性设置懒加载; 如果设置为 false ,则所有相关联的都会被初始化加载 | true / false | true |
autoMappingBehavior | MyBatis 对于 resultMap自动映射匹配级别 | NONE PARTIAL FULL | PARTIAL |
mapUnderscoreToCamelCase | 设置启用数据库字段下划线映射到 Java 对象的驼峰式命名属性 | true / false | false |
...... | ...... | ...... | ...... |
3.3:typeAliases:别名处理
---typeAliases 别名处理
---类型别名是为Java 类型设置一个短的名字,可以方便引用某个类
<typeAliases>
<typeAliases alias="Meeting"type="com.test.pojo.Meeting"/>
</typeAliases>
---默认名称:指定包下 JavaBean 的非限定类名
<typeAliases>
<package name="com.test.pojo"/>
</typeAliases>
3.4:优化查询语句的返回值
--- 优化查询语句返回值
<typeAliases>
<package name="com.test.pojo"/>
</typeAliases>
3.5:environments 表示配置 MyBatis 的多套运行环境,将 SQL 映射到多个不同的数据库上
mappers:
--- mappers
---引入项目中的 Mapper接口,要求 Mapper接口与 SQL 映射文件同名同位置
<mappers>
<mapper class="com.test.dao.MeetingMapper"/>
</mappers>
---批量引入项目中的 Mapper 接口
<mappers>
<mapper class="com.test.dao"/>
</mappers>
注意事项:
要求 Mapper 接口与 SQL 映射文件同名同位置