JavaWeb阶段总结

    • JavaWeb阶段总结
      • 浏览器部分
      • MySQL数据库部分
        • MySQL之单表
        • MySQL之多表
      • 数据库之JDBC
      • 服务器端技术

JavaWeb阶段总结

在学的web基础阶段的过程中,始终要放着三块内容.第一块是浏览器,第二是服务器,第三是数据库.

浏览器部分

在浏览器部分,已经学习了html,css,JavaScript和bootstrap

其中html提供页面的展示功能,给整个网站提供基础的架构.在学习html中最重要的部分是form表单

Css给页面提供渲染的功能,让网页能够更加的美观漂亮.

JavaScript提供了整个网站的灵魂,控制网站的特效展示.

之后在浏览器部分学习了bootstrap,bootstrap这个框架集成了前面提到的html,css,和JavaScript.bootstrap主要是用来做响应式页面的,能够根据当前访问的浏览器屏幕大小,来响应不同格式的页面.

MySQL数据库部分

MySQL之单表

学完了浏览器部分,就开始学习数据库部分,在学习mysql 的第一天,都是对单个表进行一些操作

主要是对数据库和数据库表以及表中的记录进行的增删改查.

其中,对数据库和数据库表的操作 用的是sql语句中的DDL数据定义语言. DDL数据定义语句的主要关键词是create , drop 和alter

删除数据库表中的记录,涉及到了 delete和truncate的区别. Detele删除表中所有的记录的语句是 detele from 表的名称, 在表的名称后面不写任何的条件代表删除表中的所有的数据,delete它是一条记录一条记录的删除,如果用delete来删除表中的所有数据之前开启了事务,那么在删除了数据之后,可以通过roll back 来回滚,把数据还原回来. Delete是属于DML数据操纵语句

truncate删除表的格式 truncate table 表名 它是直接把一张表给干掉,重新创建一个和之前表的结构一样的表. Truncate属于DDL数据定义语句,事务不能作用在DDL语句上.

sql语句的书写顺序,SFWGHO
select from where group having order 的缩写

提到sql语句的书写语句,就要说说sql语句的解析顺序 f…w…g…h…s…o

from 首先被解析是因为,首先要确定从哪些表中查询数据,先要把表找到

Where 第二个被解析是因为要筛选数据库表中哪些行的数据

Group by 是要对筛选的数据进行分组

Having 是对分组后的数再次进行筛选

select,要筛选数据库表中哪些列的数据

最后是order by 把筛选的数据进行排序

MySQL之多表

接着在学习mysql的第二天学了多表的设计原则和多表的查询

多表的设计原则,

如果是一对多的关系,先建立一表,再建立多表,多表中的外键为一表的主键

如果是多对多的关系,那么就要建立一张中间表,这个中间表至少要有两个字段,这两个字段分别为两个多表的主键.建立中间表的原因是,可以把多对多的表关系,变成两个一对多

如果一对一的关系,可以认为是一对多的特殊情况,可以把一对一的两个表,合并为一张表

接着是多表的查询

多表查询的使用场景是,想要查询的数据的结果,涉及到多张表中的时候

多表查询的基础是交叉查询,也叫笛卡尔积,它是多张表的无条件联合查询, 是多表查询的基础.

多表查询分为内连接查询,外连接查询和子查询

其中,内连接查询 相当于高中学的集合,取两个集合的交集

内连接查询分为隐式的连接查询和显示的内连接查询

接着是外连接查询,外连接查询的使用场景是当你无论如何都要显示其中一个表的所有数据以及两个表中满足条件的数据的时候,就会用到外连接查询.

例如一个应用场景是,员工表和部门表,有个部门没有员工,但是要统计所有部门员工的人数.

最后是子查询,子查询的本质就是sql语句的嵌套,一个表查询的结果作为了另外一个查询的条件.在实际的开发中,如果查询的结果能够用多表查询实现,就不推荐子查询,因为子查询的性能没有多表查询的性能好.

数据库之JDBC

学完了mysql之后,接着学习了jdbc,之所以要学习jdbc,是因为前面提到的三大块内容,浏览器,服务器和数据库. 前面讲的是浏览器和数据库部分 ,那么服务器就要作为中间的桥梁,来和浏览器和数据库进行数据的交互. 数据库和服务器进行连接的桥梁就是我们学的JDBC技术.通过Java语言来操作数据库.在学JDBC的第一天,主要是用JDBC原生的方式来操作数据库,首先需要加载mysql的驱动,获取与数据库的连接,再获取执行SQL语句的对象,接着编写sql语句,执行sql之后.获得了一个ResultSet结果集,需要遍历结果集才能看到查询的结果,最后是释放资源.

步骤非常的繁琐,因此学习了DBUtils这个工具类库.

使用这个工具类,实现了用两行代码就能完成对数据库的增删改查,DBUtils的本质是对JDBC的封装,hibernate框架和mybatis框架,他们的本质也是对JDBC的封装,这两个框架也是用来操作数据库,完成对数据的增删改查.

要使用DBUtils就需要获取数据源DataSource,因此学习了C3P0连接池.通过new 一个ComboPooledDataSource()对象来获取数据源.

服务器端技术

之后就是学的服务器端的技术.

服务器端的核心技术有servlet request response

前面提到服务器和数据库进行数据的交互用到的是JDBC技术. 那么浏览器和服务器进行数据的交互,就要用到request 和response对象.浏览器向服务器发送请求,请求的数据就都会封装到request对象中.服务器向浏览器响应,响应的数据就封装到了response对象中.

Request和response都是服务器端创建好的,传递给servlet程序.servlet是一种动态的web技术,动态的web技术是指访问同一个网站,在不同时间访问这个网站,或者不同的用户访问这个网站,网页所显示的内容是不一样的.

Request和response涉及到了请求转发和重定向这两个知识点

首先请求转发调用的是request.getRequestDispatcher(“/login.jsp”).forward(request, response);

后面的.forward容易忘记,如果没有写.forward,就无法跳转页面

重定向调用的是response.sendRedirect(“/login_web/success.jsp”);

请求转发的里面的路径是写给服务器用的,因此路径的第一个斜杠就代表的是当前的项目,在路径里面就不用写项目的名称了,如果在请求转发的路径里面写了项目的名称,就会导致在页面跳转的时候,浏览器的地址栏上,会出现两次项目的路径,会报404的错误

重定向里面的路径是写给浏览器用的, 路径的第一个斜杠就代表的是主机名,所以需要在路径里面写项目的名称.

之后学习了jsp,它的本质为servlet.但是在jsp上能够写Java代码和html代码,还有学习的EL表达式和JSTL让Java代码在jsp中写得更加简洁,可读性更强.

学了jsp技术之后,学了会话技术Cookie和Session.

会话技术,就是用户打开浏览器,访问不同的资源直到用户关闭浏览器,这整个过程,被认为是一次会话.会话技术的作用是保存用户在访问资源的时候产生的一些数据.

比如说记录用户上次访问时间,用的是Cookie,例如做的登录案例,记住用户名功能也是用Cookie

校验验证码的功能是把随机生成的验证码存储在Session 中.

登录成功的页面,获取用户的名称,用的也是Session.

Cookie的注意事项:

  • 第一是Cookie不能跨浏览器

  • 第二是Cookie不支持中文,在new Cookie的时候,在构造方法里面的name 和value不能写中文.

学了Cookie之后,学了session, session它是基于cookie的,服务器的response对象调用addCookie()方法,给浏览器回写了session的id.

Session和Servlet一样都是域对象,都有他们的生命周期.

生命周期指的是一个对象从创建到销毁的过程..

  • Servlet的生命周期: 当客户端第一次访问该Servlet的时候才会创建一个Servlet的对象,那么Servlet中的init方法就会执行(init只会执行一次).任何一次从客户端发送的请求,那么服务器创建一个新的线程执行Servlet中service方法为这次请求服务.service方法的内部根据请求的方式的不同调用不同doXXX的方法.当Servlet从服务器中移除或者关闭服务器的时候,Servlet对象就会被销毁.destroy的方法就会执行,垃圾回收就会将Servlet对象回收掉。

  • Session的生命周期: 当第一次调用request.getSession()的时候,创建session,或者 访问jsp页面的也会创建Session,因为jsp页面里面有9九大内置对象.包含了session

销毁session的三种情况:

  • 第一种是服务器的非正常关闭,比如说点击控制台的红色按钮强制关机.

  • 第二种是session超时了. 默认情况下是30分钟.

  • 第三种情况是手动的销毁session,也是我们在登录案例中用的方法调用Session.invalidate();

你可能感兴趣的:(Javaweb基础)