一.HTML
1)html语言是解释型语言,不是编译型,浏览器是容错的
2)html页面中由一对标签组成:<html></html>
<html>称之为 开始标签
</html>称之为 结束标签
3)title表示网页的标题
4)可以在meta标签中设置编码方式
5)<br/>表示换行,br标签是一个单标签
单标签:开始标签和结束标签是同一个,斜杠放在单词后面
6)p表示段落标签
7)img标签,图片标签
- src属性表示图片文件的路径
- width和HEIGHT表示图片的大小
- alt表示图片的提示
8)路径的问题:相对路径和绝对路径
9)h1~h6:标题标签
10)列表标签:
- -ol 有序列表 start 表示从*开始,type显示的类型是:A a I i 1
- -ul无序列表 type:disc(default),circle,square
11)u 下划线 b 粗体 i 斜体
12)上标 sup 下标 sub
13)HTML中的实体(需要的时候可以百度):小于号<;大于等于号 &ge;版权 ©
14)span 不换行的块标记
15)a 表示超链接
- href 连接的地址
- target:
- _self 在本窗口打开
- _blank 在一个新窗口打开
- _parent 在父窗口打开
- _top 在顶层窗口打开
16)div 层
17)表格 table
行 tr
列 tb
表头列 th
table有如下属性(虽然已经淘汰,但还是要了解一下)
-border:表格边框的粗细
-width:表格的宽度
-cellspacing:单元格间距
-cellpadding:单元格tianchong
tr中有一个属性:align-->center,left,right
rowspan:行合并
colspan:列合并
18)表单 form
19)input type="text" 表示文本框,其中name属性必须要指定,否则这个文本框的数据将来是不会发送给服务器的
input type="password"表示密码框
input type="radio"表示单选按钮。需要注意的是,name属性值保持一致,这样才会有互斥的效果;可以通过checked属性设置默认选中的项
input type="checkbox"表示复选框。name属性值建议保持一致,这样将来我们服务器端取值的时候获取的是一个数组
select表示下拉列表。每一个选项是option,其中value属性是发送给服务器的值,selected表示默认选中的项
textarea表示多行文本框(或者称之为文本域),它的value值就是开始结束标签之间的内容
input type="submit"表示提交按钮
input type="reset"表示重置按钮
input type="button"表示普通按钮
总结:
二.CSS
1.css的最基本分类:标签样式表,类样式表,ID样式表
2.css从位置上的分类:嵌入式样式表,内部样式表,外部样式表
3.IE浏览器:实际尺寸 = width
chrome浏览器:实际尺寸 = width+左右borderwidth+padding
4.CSS盒子模型
1)border 边框
2)margin 间距
3)padding 填充
三.CS和BS
CS:客户端服务器架构模式
优点:充分利用客户端机器的资源,减轻服务器的负荷
(一部分安全要求不高的计算任务存储任务放在客户端执行,不需要把所有的计算和存储都在服务器端执行,从而能够减轻服务器的压力,也能够减轻网络负荷)
缺点:需要安装;升级维护成本较高
BS:浏览器服务器架构模式(优缺点基本同CS相反)
四.Servlet入门
1.用户发请求:action=add
2.项目中,web.xml中找到url-pattern = /add
3. 找到servlet-name = AddServlet
4.找和servlet-mapping中servlet-name一致的servlet
5.找到servlet-class
6.用户发送的是post请求(method=post)
1.1post方式下,设置编码,防止中文乱码。
request.setCharacterEncoding("UTF-8");
这一句代码,必须在所有获取参数动作之前
1.2Servlet的继承关系----重点查看的是服务方法
1)继承关系
javax.servlet.Servlet窗口
javax.servlet.http.HttpServlet抽象类
javax.servlet.http.HttpServlet抽象子类
2)相关方法
javax.servlet.Sevlet接口:
void init(config)---初始化方法
void service(request,response)---服务方法
void destory---销毁方法
javax.servlet.GenericServlet抽象类:
void service(request,response)---仍然是抽象的
javax.servlet.http.HttpServlet 抽象子类:
void servlet(request,response)--不是抽象的
1.String mathod=req.getMethod();获取请求的方法
2.各种if判断,根据请求方式不同,决定调用不同的do方法
if(method.equals("GET")){
this.doGet(req,resp);
}else if(method.equals("HEAD")){
this.doHead(req,resp);
}else if(method.equals("POST")){
this.doPost(req,resp);
}else if(method.equals("PUT")){
this.doPut(req,resp);
}
3)在HttpServlet这个抽象类中,do方法都差不多:
1.3Servlet生命周期
1)生命周期:从出生到死亡的过程。对应Servlet中的三个方法:init(),service(),destroy()
2)默认情况下:
第一次接受请求时,这个Servlet会进行实例化(调用构造方法)、初始化(调用init())、 然后服务(调用service())
从第二次请求开始,每一次都是服务
当容器关闭时,其中的所有的sevlet实例会被销毁,调用销毁方法
3)通过案例我们发现:
--Servlet实例tomcat只会创建一个,所有的请求都是这个实例去响应
--默认情况下,第一次请求时,tomcat才会实例化,初始化,然后再服务---提高系统启动速度
--因此得出结论:如果需要提高系统的启动速度,当前默认情况就是这样。如果需要提高响应 速度,我们应该设置Servlet的初始化时机
4)Servlet的初始化时机
--默认是第一次接受请求时,实例化,初始化
--我们可以通过<load-on-startup>来设置servlet启动的先后顺序,数字越小,启动越靠前,最 小值为0
5)Servlet在容器中是单例的,线程不安全的
1.4HTTP协议
1.5会话
1)Http是无状态的
---Http无状态:服务器无法判断这两次请求是同一个客户端发来的,还是不同的客户端发来的
---无状态带来的现实问题:第一次请求是添加商品到购物车,第二次请求是结账;不能确定是 不是一个客户端发来的
---常用的API:
request.getSession() ->获取当前的会话,没有则创建一个新的会话
request.getSession(true) ->效果和不带参数相同
request.getSession(false) ->获取当前会话,没有则返回null,不会创建新的会话
request.getId() ->获取sessionID
request.isNew() ->判断当前session是否是新的
request.getMaxInactiveInterval() ->session的非激活间隔时常,默认1800秒
request.setMaxInactiveInterval() ->
request.invalidate() ->强制性让会话立即失效
2)session保存作用域
---session保存作用域是和具体的某一个session对应的
---常用的API:
void session.setAttribute(k,v)
Object session.getAttribute(k)
void removeAttribute(k)
1.6服务器内部转发以及客户端重定向
1)服务器内部转发:request.getRequestDispatcher("...").forward(request,response);
--一次请求响应的过程,对于客户端而言,内部经过了多少次转发,客户端是不知道的
--地址栏没有变化
2)客户端重定向:response.sendRedirect("...")
--两次请求响应的过程,客户端肯定知道请求url有变化
--地址栏有变化
1.7保存作用域
1)request:一次请求响应范围
2)session:一次会话范围有效
3)application:一次应用程序范围有效
1.8路径问题
1)相对路径
2)绝对路径
2.1Servlet的初始化方法
1)Servlet生命周期:实例化、初始化、服务、销毁
2)Servlet中的初始化方法有两个:init(),init(config)
其中带参数的方法代码如下:
piblic void init(ServletConfig config) throws ServletException{
this.config=config;
init();
}
另外一个无参的init方法如下:
public void init() throws ServletException{
}
如果我们想要在Servlet初始化时做一些准备工作,那么我们可以重写init方法
我们可以通过如下步骤去获取初始化设置的数据
----获取config对象:ServletConfig config=getServletConfig();
----获取初始化参数值:config.getInitParameter(key);
2.2学习Servlet中的ServletContext和<context-param>
1)获取ServletContext,有很多方法
在初始化方法中:ServletContext servletcontext = getServletContext();
在服务方法中也可以通过request对象获取,也可以通过session获取;
request.getServletContext(); session.getServletContext();
2)获取初始化值:
servletContext.getInitParameter();
2.3什么是业务层
1)Model1和Model2
MVC:Model(模型)、View(视图)、Controller(控制器)
视图层:用于做数据展示以及和用户交互的一个界面
控制层:能够接收客户端的请求,具体的业务功能还是需要借助于模型组件来完成
模型层:模型分为很多种:有比较简单的pojo/vo(value object),有业务模型组件,有数据访问层组件
1)pojo/vo:值对象
2)DAO:数据访问对象
3)BO:业务对象
区分业务对象和数据访问对象:
1)DAO中的方法都是单精度方法或者称之为细粒度方法。什么叫单精度:一个方法只考虑一个操作,比如添加,那就是insert方法,比如查询,那就是select方法
2)BO中的方法属于业务方法,实际的业务是比较复杂的,因此业务方法的粒度是比较粗的
注册这个功能属于业务功能,也就是说注册这个方法属于业务方法。
那么这个业务方法中包含了多个DAO方法。也就是说注册这个业务功能需要通过多个DAO方法的组合调用,从而完成注册功能的实现
注册:
1.检查用户名是否已经被注册 ---- DAO中的select操作
2.向用户表新增一条新用户记录 ---- DAO中的insert操作
3.向用户积分表新增一条记录(新用户默认初始化积分100分) ---- DAO中的insert操作
4.向系统消息表新增一条记录(某某某新用户注册了,需要根据通讯录信息向他的联系人推送消息) ---- DAO中的insert操作
5.向系统日志新增一条记录(某用户在某IP在某年某月某日某时某分某秒某毫秒注册) ---- DAO中的insert操作
3)在库存系统中添加业务层组件
2.4IOC
1)耦合/依赖
依赖指的是某某某离不开某某某
在软件系统中,层与层之间是存在依赖的。我们也称之为耦合
我们系统架构或者是设计的一个原则是:高内聚低耦合。
层内部的组成应该是高度聚合的,而层与层之间的关系应该是低耦合的,最理想的状态是0耦合
2)IOC -- 控制反转/DI -- 依赖注入
2.5过滤器Filter
1)Filter也属于Servlet规范
2)Filter开发步骤:新建类实现Filter接口,然后实现其中三个方法:init,doFilter,destroy
配置Filter,可以用注解@WebFilter,yekeyishiyongxml文件<filter><filter-mapping>
3)Filter在配置时,和servlet一样,也可以配置通配符,例如:@WebFilter("*.do")
4)过滤器链
1)执行的顺序依次是:A B C demo03 C2 B2 A2
2)如果采取的是注解的方式进行配置,那么过滤器的拦截顺序是按照全类名的先后顺序排序的
3)如果采取的是xml的方式进行配置,那么按照配置的先后顺序进行排序
笔记:https://heavy_code_industry.gitee.io/code_heavy_industry/pro001-javaweb/lecture/