Tomcat
- 启动:双击bin目录下的startup.bat文件
- 停止:双击bin目录下的shutdown.bat 文件
- 访问 :http://localhost:8080(默认是8080,可以修改)
git的使用
打开git bash
- git config --global user.name "名称" 提交时的名称
- git config --global user.email "you@example.com" 提交时的邮箱
- git add (文件路径) 加入缓存 小句点号是改文件路径下所有的文件
- git commit -m(注释) 生成版本
- git li-files 当前的已经存在的文件
- git status -s 查看文件状态
- git restore 目标文件 从缓存里面覆盖当前文件
- git rm --cached 目标文件 从暂存区移除文件
Servlet
Servlet是Server与Applet的缩写,是服务器小程序的意思。主要运行在服务端。
当请求到达Servlet容器时,Servlet容器会判断该Servlet对象是否存在,如果不存在,则会创建实例并且初始化,这个方法只会执行一次
HttpServletRequest对象
主要是用来接收客户端发送过来的请求信息,其中service方法中形参接收的是HttpServletRequest接口的实例化对象,表示该对象主要应用在HTTP协议上,该对象是由Tomcat封装好传递过来
常用方法
Tomcat8.0以上版本,get请求不会乱码,post请求会乱码
请求转发
是一种服务器的行为,当客户端请求到达后,服务器进行转发,此时会将请求对象进行保存,地址栏中的url地址不会发生改变,得到响应后,服务器端会将响应发生给客户端,从始至终只有一个请求发出去。
request作用域
通过该对象可以在一个请求中传递数据,只在一次请求中有效,即服务器跳转有效。
HttpServletResponse对象
当服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象和代表响应的response对象。想要向客户端输出数据,需要通过response对象。这个对象中封装了向客户端发送数据,发送响应头,发送响应状态码的方法。
响应数据
接收到客户端请求后,可以通过HttpServletResponse对象之间进行响应,响应时需要获取输出流。
- getWriter()获取字符流(只能响应回字符)
- getOutputStream()获取字节流(能响应一切数据)
响应的数据会到客户端被浏览器进行解析 俩者不能同时被使用
响应乱码问题
getWriter()获取到的字符流,如果出现中文会乱码,写下面这句话就可以解决乱码问题。
重定向
重定向是一种服务器指导,客户端的行为。客户端发出第一个请求,被服务器接收处理后,进行响应的同时会给客户端一个新的地址,当客户端接收到响应之前,会马上根据服务器给的新地址发起第二次请求,服务器就会接收请求并且作出响应。
注意重定向是不会共享数据的 重定向可以跳转到域外,但是请求转发是不会的,请求转发只能在该项目内
Cookie对象
这个是浏览器提供的一种技术,通过服务器的程序能将一些只需要保存在客户端,或者在客户端进行处理的数据,不需要通过网络传输,来提高网页的效率。安全性较差,常见的记住密码就是通过Cookie来实现的
想要获取Cookie,只能获取到一个数组,不能单个获取
Cookie的到期时间
我们可以手动设定cookie的有效时间(通过到期时间来计算),cookie的时间是以秒来设定的,用setMaxAge(int time)方法设定
- 如果时间为负数,表示不存储该cookie,只在浏览器内存中存活,一旦关闭浏览器窗口,那么cookie就会消失。默认是-1.
- 如果时间为正整数,表示存储的秒数,当数值大于0时,浏览器会把cookie存储到硬盘上,即使关闭浏览器,cookie也会存活。
- 如果为0,表示需要删除该cookie,表示cookie作废。
Cookie是不能存储中文的。
Cookie的路径
HttpSession对象
该对象不像HttpServletRequest或者HttpServletResponse一样,存在一个父接口,该接口只是一个纯粹的接口。对于服务器而言,每一个连接到它的客户端都是一个Session,servlet容器使用此接口创建HTTP客户端和HTTP服务器之间的会话,会话会保留指定的时间段,一个会话通常只会对于一个用户,该用户可能多次访问一个站点,可以通过该接口查看和操作有关某个会话的信息。
session无论是客户端还是服务器端都可以获得,且只存在于当前的浏览器当中。
它的作用就是在于标识一次会话,并且在一次会话期间共享数据。
当请求到达服务器,如果开启了会话,服务器会查看是否从客户端传一个名为JSESSIONID的cookie,如果没有则认为是一个新的会话,会创建一个新的session对象,用一个唯一的sessionid为此次会话做一个标志。它是依赖于cookie对象存储的。
session域对象
在一次会话当中,数据是可以共享的。
Session默认在tomcat中它的时间到期为30分钟。
销毁Session:(立即销毁)
ServletContext对象
每一个web应用都有切记有一个ServletContext对象,又称为Application对象,该对象在WEB容器启动的时候,会为每一个WEB应用程序创建一个对应的ServletContext对象。
该对象使得整个应用程序共享某些数据,一旦存储进去,如果没有手动删除会一直保存,
主要作用为:作为域对象用来共享数据,此时数据在整个应用程序中共享,该对象保存了当前应用程序相关信息。
在Servlet中如果想要支持文件上传表单,需要加@MultipartConfig注解
文件下载
当我们在HTML页面使用a标签时,如果浏览器能够识别的内容就会显示出来,如果时浏览器不能识别的内容,浏览器就会执行下载。此时如果我们想要能够识别的内容进行下载,就需要设置download属性规定浏览器进行下载,但是有些浏览器并不支持。
MVC分层
- M-> model 数据访问层
- V-> view 视图层
- C-> controller 控制层
Mybatis
ORM 对象关系映射
指的是持久化数据和实体对象的映射方式,为了解决面向对象于关系型数据库存在的互不匹配的现象的技术
映射规则
- 数据表 -> 类
- 表字段 -> 类属性
- 表数据 -> 对象
mybatis 是一个持久层框架,内部封装了JDBC,开发者只需要关注到SQL语句本身,而不需要花费精力去处理加载驱动,创建连接、创建执行者等复杂的操作
它通过xml或者注解的方式将要执行的各种Statement配置起来,并且通过java对象和Statement中SQL的动态参数进行映射生成最终要执行的SQL语句。 最后执行完SQL会将结果映射为java对象并且返回,对JDBC进行了封装,屏蔽了JDBC API的底层访问细节。
相关API
-
Resources
getResourcesAsStream(String fileName) 通过类加载器返回指定资源的字节输入流
-
SqlSessionFactoryBuilder
获取SqlSessionFactory工厂对象的功能类
build(InputStream is) 通过指定资源字节输入流获取SqlSession工厂对象
-
SqlSessionFactory
获取SqlSession构建对象的工厂接口
openSession() 获取SqlSession构建者对象,并且开启手动提交事务
openSession(boolean autoCommit) 获取SqlSession构建者对象,true开启,false关闭
-
SqlSession
构建者对象接口,用于执行SQL、管理事务,接口代理
- selectList(String statement,Object paramter) 执行查询语句,返回List
- selectOne(String statement,Object paramter) 执行查询语句,返回一个结果对象
- insert(String statement,Object paramter) 执行新增语句 返回影响行数
- update(String statement,Object paramter) 执行修改语句,返回影响行数
- delete(String statement,Object parmater) 执行删除语句,返回影响行数
- commit() 提交事务
- rollback() 回滚事务
- getMapper(Class <T> cls) 获取指定接口的代理实现类对象
- close() 释放资源
下面是一个案例:
起别名
然后在对应的映射文件,就可以只写User了
下面是一些系统已经给我们起好的名字
Mybatis接口代理方式--实现规则
利用接口代理方式,我们可以只用编写接口,又Mybatis框架根据接口的定义来创建该接口的动态代理对象。
实现规则的要求:
- 映射配置文件中的名称空间必须和Dao层接口的全类名相同
- 映射配置文件中的增删查改标签的id属性必须和Dao层接口的方法名称相同
- 映射配置文件中的增删改查标签的parameterType属性必须和Dao层接口方法的参数相同
- 映射配置文件中的增删查改标签的resultType属性必须和Dao层接口方法的返回值相同
具体实现:
然后调用这个对象的相应的方法就可以了
动态sql
也就是多条件查询,有时候我们需要变换查询条件,如果参数不同,需要写很多sql语句,为了解决这个问题,所以出现了多条件查询
if 标签
foreach标签
SQL片段抽取
我们在写sql语句的时候,通常会写一些重复的语句,为了简化,所以出现了SQL片段抽取。
多表操作:
- 一对一
- 一对多
- 多对多