VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Java教程 >
  • Web全段重点整理

1.  HTML+CSS

1.1. HTML+CssDay01

1.1.1. 常用普通标签

  1. 常用标签如下

div

span

a

p

ul+li

h1-h6

img

  1. 代码示例:

 

 

 

<img src=”1.jpg”>

  1. 效果:

 

 

 

 


4. 注意:

ul+li的应用场景,如果界面上有一堆非常类似的标签,这时候就会用ul+li来布局。

1.1.2. 常用表单标签

  1. 常用表单标签如下:

form

input:text

button:submit

  1. 代码示例:

 

 

 

  1. 效果如下:

 

 

 

  1. 注意:

如果是get方式提交:

 1. 点击表单的submit按钮之后,会对表单进行提交,跳转到action对应的url

       如果url不确定,先写#

 

 2. 提交的url,后边会拼接form中带有name属性的标签的数据

 

        规律:action的url?name的值=value的值&name2的值=value2的值

 

        例子:action的url?username=123&age=18

如果是post提交方式:数据会拼接到请求体,请求体后续介绍

1.1.3. 常用表单项标签

1. 常用表单项标签:

input-type:text,type:password,type:number,type:radio,type:checkbox,type:file,type:hidden

button-type:submit,type:button,type:reset

select+option

 

2. 代码示例:

 

 

 

 

 

 

3. 效果如下:

 

 

 

4. 注意:

l  radio,checkbox,select的option都需要程序员添加上value属性

l  其他的表单项标签,用户输入的内容就是value

l  hidden:隐藏域也需要程序员添加value

n  普通用户看不到隐藏域

n  隐藏域是为了携带额外的数据到服务器

 

1.2. HTML+CssDay02

1.2.1. Css常用知识点

1. 基础选择器

l  元素选择器:元素名{},例如:div{}

l  类选择器:.类名{},例如:.div01{}

l  id选择器:#id值{},例如:#id01{}

2. 元素显示与隐藏

l  隐藏元素:display:none

l  显示元素:display:block

1.2.2. 表格标签

1. 常用表格标签

table

thead,tr,th

tbody,tr,td

2. 代码示例:

 

 

 

 

3. 效果如下:

 

 

 

 

2.  Web核心

2.1. Web核心Day01

2.1.1. Tomcat相关

2.1.1.1.  localhost

tomcat启动之后,可以通过http://localhost:8080/访问tomcat默认欢迎界面

也可以通过http://真实IP:8080访问

localhost:意为“本地主机”,等同于127.0.0.1

2.1.1.2.  idea发布项目须知

 

 

 

项目发布之后,启动tomcat,访问如下:(项目的根路径配置的是/)

 

 

 

访问根路径/,相当于访问发布之后的路径:out\artifacts\web_demo_war_exploded。

而访问某个目录,会直接默认访问此目录下的index.jsp或index.html或index.htm,

所以将out\artifacts\web_demo_war_exploded目录下的index.jsp打开了

 

2.1.2. Http协议相关

1. http协议:超文本传输协议,浏览器与服务器之间传递数据遵循的协议

2. http协议组成:请求和响应

 

 

 

浏览器给服务器传递数据,是通过请求

服务器给浏览器返回数据,是通过响应

3. 请求与响应

请求与响应要携带的数据比较多,所以进行了分类:

请求:请求行,请求头,请求体

响应:响应行,响应头,响应体

4. 具体图示:(请求头与响应头不需要记)

 

 

 

 

 

 

 

 

5. 总结

浏览器中输入地址,敲回车,这种请求方式为get

form根据method的值,来确定请求方式

get请求,会将form数据拼接到url后,没有请求体

post请求,会将form数据放入请求体

2.1.3. 案例中的路径问题

项目配置如下:

 

 

 

 

 

 

最终路径分析如下:

 

 

 

解决:

1. 去掉welcome-file-list

2. 或者,去掉Application Context

注意:

其实正常情况下news.html中的图片路径,应该写绝对路径,例如:/test1/img/logo.png。

并且虚拟路径/test1在后期我们可以通过api来动态获取

绝对路径:以/开头的

相对路径:不以/开头的

2.2. Web核心Day02

2.2.1. ServletContext解释

l  context:上下文,理解为环境

l  百度解释:

 

 

 

n  在语文中:上下文指的是这一篇文章的中心思想,概括。

 

l  知乎解释:

 

 

 

n  在生活中:上下文指的是环境

n  林冲说这句话的环境如果是,碰见了猛虎,那么“啊也”就是惊吓的意思

n  林冲说这句话的环境如果是,中了大奖,那么“啊也”就是惊喜的意思

l  总结:

n  上下文:环境,不同环境给我们带来的信息是不一样的。所以环境中有很多信息,数据,也就是环境是用于存储数据的。

n  所以ServletContext就是一个用于存储共享数据的对象,存储的数据在整个应用中的Servlet都可以使用,又称之为应用域

2.2.2. 请求对象封装过程

l  分析图如下:

 

 

 

l  说明:这里大家需要明白Servlet内部的方法,都是由tomcat来调用的,所以方法的参数也是由Tomcat创建好传递进来的

l  上图分析的是request对象,其实response对象也是由Tomcat创建好传递进来的,我们通过这个对象给浏览器返回数据

2.2.3. getRealPath方法分析

l  getRealPath:将项目发布之后的真实路径与传递的路径进行拼接

l  例子如下:

 

 

 

l  注意:如果传递的路径不存在,也不会报错,比如d.txt

l  应用场景:一般是在流操作文件时,需要通过getRealPath来获取文件真实路径,然后才能流操作

 

2.3. Web核心Day03

2.3.1. 转发与重定向

2.3.1.1.  转发

  1. 转发:一次请求需要多个Servlet协作完成(一个请求)
  2. 示例代码:ServletDemo09转发ServletDemo10

 

 

 

 

 

 

3.应用场景:如果在Servlet中要跳转本项目内的其他Servlet或界面,可以使用转发或重定向

2.3.1.2.  重定向

1. 重定向:一次请求需要多个Servlet协作完成(两个请求)

2. 示例代码:ServletDemo06重定向到ServletDemo07

 

 

 

 

 

 

 

3. 应用场景:如果在Servlet中要跳转其他项目的Servlet/界面,可以使用重定向

2.3.1.3.  区别(完全相反)

l  重定向:

n  两次请求

n  地址栏发生变化

n  不可以使用request域共享数据 (既然是两次请求,那肯定不能使用请求域中共享的数据)

n  可以重定向到其他服务器的url

l  转发:

n  一次请求

n  地址栏不发生变化

n  可以使用request域共享数据

n  只能转发到自己服务器内部的url

 

2.3.2. 路径分析

2.3.2.1.  跳转使用的url

2.3.2.1.1.     servlet中的转发(特殊)

如:Day03的request_demo的ServletDemo09

 

 

 

这里的url是以斜杠开头的,但是其实他不是一个完整的绝对路径。

转发比较特殊,由ServletDemo09转发到ServletDemo10,ServletDemo10的路径必须是相对于ServletDemo09进行转发的。

例如:http://localhost:8080/request/servletDemo09,转发的url为“/servletDemo10”,那么最终的url其实是http://localhost:8080/request/servletDemo10

所以说,这个url可以写成:“servletDemo10”不加斜杠,写成相对路径,这样更加合理,更加好理解

2.3.2.1.2.     servlet中的重定向

如:Day03的response_demo的ServletDemo06

 

 

 

这里的url是也斜杠开头:“/response/servletDemo07”,项目虚拟路径+servlet路径,这是标准的绝对路径写法

2.3.2.1.3.     servlet中的定时跳转

如:Day03的response_demo的ServletDemo05

 

 

 

这里的url也是斜杠开头:“/response/login.html”,项目虚拟路径+文件路径,这是标准的绝对路径写法

2.3.2.1.4.     html中的超链接

如:Day03的reqresp_test案例中的index.html

 

 

 

这里的url:”/stu/addStudent.html”,项目虚拟路径+文件路径,这是标准的绝对url写法

2.3.2.1.5.     html中的表单的action

如:Day03的reqresp_test案例中的addStudent.html

 

 

 

这里的url:“/stu/addStudentServlet”,项目虚拟路径+servlet路径,这是标准的绝对url写法

2.3.2.1.6.     总结

除了转发,其余的跳转到某个资源的url,都是使用绝对路径

2.3.2.2.  配置文件中的url

2.3.2.2.1.     welcome-file(特殊)

如:Day02中的servlet_test的web.xml

 

 

 

这里welcome-file的路径为:“/addStudent.html”,是以斜杠开头,但是并不是完整的绝对路径

welcome-file是配置默认的欢迎界面,那界面html文件,肯定是在web目录下,所以他固定就是去web目录下查找,所以这里不需要添加项目虚拟路径写成:“/虚拟路径/addStudent.html”

既然welcome-file固定是去web目录下查找,所以我们可以认为他参照的目录就是web,所以可以写成相对路径“addStudent.html”

大家可以试一下,也是可以的,其实这一点跟转发有点类似,都有固定的参照目录

2.3.2.2.2.     servlet路径配置

 

 

 

这里的路径“/studentServlet”是给StudentServlet配置的他自己的url,所以肯定不需要带项目虚拟路径。

配置好之后,我们通过“项目虚拟路径+servlet路径”来访问servlet

那么注解方式给servlet添加的url,也是如此:@WebServlet(“/studentServlet”)

2.3.2.3.  流操作项目中的文件

如:Day03的response_demo中的ServletDemo03

 

 

 

这里的getRealPath(“/img/hm.png”),最终拼接出来的路径是:项目发布之后的真实路径+/img/hm.png

问题:

为啥这里不能直接使用项目虚拟路径+/img/hm.png,为啥非得用getRealPath来拼接发布之后的路径呢?

为啥之前的跳转的url,都可以使用虚拟路径+资源路径,来进行访问,而这里的io流操作文件则非得使用getRealPath呢?

答:

因为跳转的url,其实都是通过浏览器来向tomcat发起的请求,tomcat收到这些请求之后,会根据项目虚拟路径,来找到项目真是发布之后的路径

而IO流操作文件,并没有通过浏览器,而是直接自己去查找的本地文件,所以需要查找我们的项目最终发布路径中的文件

 

 

 

2.4. Web核心Day04

2.4.1. Cookie

1. Cookie介绍

(1)       客户端(浏览器)会话管理技术

(2)       把要共享的数据保存到客户端(浏览器)

(3)       每次请求时,浏览器会把会话信息带到服务器端,从而实现多次请求的数据共享

2. Cookie作用:一般用于存储用户的登陆状态,避免在一次会话的多次请求中多次登陆

3. Cookie操作

 

 

 

4. 案例分析:

 

 

 

 

2.4.2. Session

1. Session介绍

(1)       服务器端会话技术

(2)       共享数据保存在服务器端

(3)       session依赖于cookie,需要cookie保存Jsessionid

2. Session作用:一般用于存储用户的登陆状态,避免在一次会话的多次请求中多次登陆

3. Cookie与Session作用一样,但是常用Session保存用户登录状态,因为数据保存在服务器端更加安全

4. 示例代码:Day04中的session_demo的ServletDemo01

 

 

 

 

 

 

5. Session原理分析

 

 

 

注意:

第二步,是tomcat自动处理的,一旦咱们在Servlet中有操作session的相关代码,tomcat就会将此session对象对应的Jsessionid放入cookie中

第四步,从cookie中取出jsessionid,也是tomcat自动处理的,一旦咱们在Servlet中有getSession的代码,tomcat就会先取出jsessionid,然后判断有没有此id对应的session对象,有就直接返回

 

 

2.5. Web核心Day05

2.5.1. EL表达式基本点

1. EL:Expression Language,表达式语言

2. 作用:在 JSP 页面中获取数据,让我们的 JSP 脱离 java 代码块和 JSP 表达式

3. el表达式,会获取四大域中的共享数据,语法: ${共享数据的key名字}

4. 如果共享数据是key,value形式,这时候想获取这个共享数据内的value的值分两种情况

1. 如果key不是索引:${共享数据的key名字.key }: ${stu.name}

2. 如果key是索引: ${共享数据key名字[key]} : ${arr[0]}

5. 补充:

1. 数组,集合,map,javabean,都是key,value形式

2. 只不过,数组和集合他的key是系统自动添加的 , 是一个索引

6. 示例代码

 

 

 

 

 

 

 

2.5.2. EL三元表达式

1. el三元表达式,常用于单选,多选,与下拉列表的选中

2. 示例代码:

 

 

 

 

2.5.3. EL隐式对象

 

 

 

总结:

1. 获取四大域中的数据:${key}

2. 获取项目虚拟路径:${pageContext.request.contextPath}

EL表达式中有pageContext隐式对象,但是没有request隐式对象

正好pageContext可以获取其他的jsp的八大隐式对象

 

3.  Mybatis

3.1. Mybatis-Day01

3.1.1. mybatis介绍

1. 介绍

 

 

 

2. orm

 

 

 

3.1.2. mybatis入门

1. 入门分析图

 

 

 

 

l  问题:sqlSession.selectList(“StudentMapper.selectAll”),这里的参数是映射文件的namespa.id组成的,但是为啥sqlSession可以找到这个映射文件呢?

n  sqlSession是由sqlSessionFactory创建的,而sqlSessionFactory是SQLSessionFactoryBuilder创建的,然后我们是将读取了MyBatisConfig.xml的流传递给了SQLSessionFactoryBuilder,所以呢sqlSession是知道MyBatisConfig.xml的存在的。而在MyBatisConfig.xml中引入了映射文件StudentMapper.xml。

3.1.3. mybatis核心类

1. 与jdbc对比

 

 

 

 

由上图可知,sqlSession是综合了jdbc的Connection与statement的功能。

l  Statement的executeUpdate对应insert,update,delete

l  Statement的executeQuery对应selectList,selectOne

l  Connection的commit与rollback对应commit与rollback(一样)

l  Connection的setAutoCommit对应sqlSessionFactory的openSession方法中的参数autoCommit

n  Connection的setAutoCommit默认是true,就是默认是自动提交事务

n  sqlSessionFactory的openSession方法中的参数autoCommit默认是false,默认手动提交事务,需要自己commit提交事务

n   

 

3.1.4. 关键点分析

3.1.4.1.  映射分析

1. 分析图如下

 

 

 

 

(1)       数据库中有student表,程序中就会有一个Student类

(2)       表中的字段/列名,必须与Student类的属性名保持一致

①     数据库的列名不区分大小写

(3)       表中的一条数据,读取到程序中,就代表一个Student对象

(4)       selectList方法直接返回封装好的数据,内部的逻辑类似于右下角的遍历

3.1.4.2.  映射文件参数分析

1. 图示如下

 

 

 

(1)       selectById只需要一个参数,所以parameterType直接写此参数的数据类型即可

(2)       insert需要多个参数,而且参数类型不同,所以需要将参数封装为一个javabean然后进行传递

 

3.2. Mybatis-Day02

3.2.1. 接口代理

1. 接口代码分析如下:

 

 

 

 

 

3.2.2. 分页查询

1. 分页查询分析如下:

 

 

 

 

3.2.3. 多表查询

3.2.3.1.  一对一

1. 一对一分析如下:

 

 

 

 

 

(1)       这次查询的需求是:查询所有身份证,并且顺便查询身份证所属的人的信息。所以是在Card类中添加了Person对象。

(2)       Javabean中谁包含谁,跟表关系没有关系,跟需求有关系

(3)       多表映射配置规律:

①     resultMap标签中的type属性指定的是主表类(包含对象的类:Card)

②     association标签中的javaType属性指定的是次表类(被包含对象的类:Person)

③     通过id和result标签中的column属性与property属性就来建立对应列与属性的关系

④     映射文件主要就是解决数据库表的列与Javabean的属性之间的对应关系的

3.2.3.2.  一对多

1. 一对多分析如下:

 

 

 

 

(1)       此图的需求是:查询所有的班级,并且顺便查询班级下所有的学生

(2)       一对多在配置被包含对象时用的是collection标签和ofType属性

 

3.2.3.3.  多对多

1. 多对多分析如下

 

 

 

(1)       多对多其实是由两个一对多组成的

(2)       从学生角度看,一个学生可以选择多个课程

(3)       从课程角度看,一个课程可以被多个学生选择

 

 

3.3. Mybatis-Day03

3.3.1. 注解一对一

1. 一对一分析

 

 

 

 

(1)       注解方式添加sql,与映射文件添加sql的区别

①     映射文件的多表查询是用一个sql

②     注解方式的多表查询是用两个sql,先查询主表,然后遍历查询次表,最终再拼接结果

3.3.2. 注解一对多

1. 一对多分析

 

 

 

 

(1)       注解一对多在配置被包含对象的时候,javaType是配置List.class,而不是List内的具体类型

(2)       映射文件一对多在配置被包含对象的时候,ofType配置的是List内的具体类型

3.3.3. 注解多对多

1. 多对多分析

 

 

 

 

2. 多对多sql语句分析

 

 

 

 

起初是查询所有的student,但是发现没有选择课程的王五赵六也出来了,这不是我们的需要希望的

所以后来进行了关联去重查询

如果这里用映射文件配置sql,其实一个sql就可以搞定:

 

 

 

 

 

4.  JavaScript

4.1. Day01

4.1.1. 变量和常量

 

 

 

4.1.2. 基本数据类型

 

 

 

注意:

l  null属于基本数据类型的一种,但是通过typeof检测之后发现是复杂数据类型object,这是矛盾的。(js的一个错误,后来想纠正,但是太麻烦,就不了了之了)

l  undefined未定义是一种数据类型(变量定义了,但是值没定义)

l  not defined是一种错误(变量没定义)

4.1.3. 运算符

 

 

 

4.1.4. 数组

 

 

 

l  数组arr拆包:...arr,结果为10,20,30

l  字符串又称之为字符数组

4.1.5. 可变参数

 

 

 

l  ...在数组前是拆包

l  ...在函数的参数前是打包,将多个实参打包到形参,将形参变为一个数组

4.1.6. 属性操作

属性操作分为两种方式:

  1. 元素对象.xxxAttribute("属性名"):可以操作固有属性,和自定义属性

     此种方式,操作属性,与标签内操作属性一样

  2. 元素对象.属性名  ,只能操作固有属性

此中方式,有一些特殊的属性:style(对象),class(className)

 

4.1.7. 事件

1. 通过标签添加事件

<button id="up" onclick="up()">上一张</button>

 

2. 通过元素对象添加事件

let upBtn = document.getElementById("up");
upBtn.onclick = function () {
let img = document.getElementById("img");
img.setAttribute("src", "img/01.png");
}

 

 

3. 超链接添加事件

<a href="JavaScript:void(0);" onclick="drop(this)">删除</a>

 

 

超链接添加点击事件,需要先给默认的跳转行为给屏蔽掉:href=”javascript:void(0)”

 

4.2. Day02

4.2.1. json

1. JSON(JavaScript Object Notation):是一种轻量级的数据交换格式

2. 分析图

 

 

 

 

(1)       注意:程序中都是使用对象(因为使用对象比字符串方便),而在传输过程中都是json字符串,所以前后端都需要来回的转换

3. 代码

 

 

 

4.2.2. 表单提交事件

1. html代码

 

 

 

2. js代码

 

 

 

4.2.3. 定时器

1. 代码

 

 

 

 

4.2.4. 页面加载完成事件

1. 代码

 

 

 

2. 如果将js获取界面元素的代码放到onload中,那么这段js的代码位置就可以放在body上边

4.2.5. js跳转界面

1. 代码

location.href = "路径";

 

 

5.  Jquery

5.1. $函数使用总结

1. 当做函数使用

 

(1). 如果传递的是一个匿名函数,当做界面加载完成函数使用

 

(2). 如果传递的是一个DOM对象,当做类型转换使用,将DOM对象转换为jq对象

 

(3). 如果传递的是一个css选择器(字符串),当做获取元素使用

 

(4). 如果是html内容的字符串,当做创建元素对象使用

 

2. $ 是一个函数,也是一个对象,可以直接调用方法

(1). each函数

 

 

 

(2). ajax/get/post函数

 

 

 

5.2. jq对象转换为js对象

1. jq封装了大部分的js的功能,但是有个别的功能并没有封装,所以有时候我们需要将jq对象转换为js对象

2. 代码

 

3. 为什么jQuery是一个数组,为啥他将找到的js对象放入到一个数组中了呢?因为隐式迭代。

5.3. jquery的隐式迭代

1. 隐式迭代,悄悄的遍历,内部自动做了遍历循环的操作

2. jquery中大部分的方法都有隐式迭代的特性

(1)       添加事件的方法:click(),focus(),等等

(2)       操作属性的方法:attr(),prop()

(3)       操作样式的方法:css(),addClass(),removeClass(),toggleClass()

(4)       操作文本的方法:html()

3. 注意:以上方法的隐式迭代只在设置的时候生效,获取只能获取第一个js对象的数据

 

6.  Ajax

6.1. Ajax通用方法

1. 代码

 

 

 

l  async:true可以省略,默认是异步

l  data:是前端向后端传递的数据,可以是字符串(key=value),也可以是对象{key:value}

l  dataType:是前端告知后端,前端希望后端返回的数据的类型

l  success的function中的参数data,是后端响应回来的数据

 

6.2. Java中的json转换

1. 对象转json

 

 

 

2. Map转json

 

 

 

3. Map包含user,转json

 

 

 

4. list转json

 

 

 

5. list包含user,转json

 

 

 

6.3. 案例

6.3.1. 联想搜索

1. 分析图

 

 

 

 

2. 注意

(1)       此案例中的keydown事件,可以换为change事件更加合理

①     change事件:文本内容改变就会触发的事件

(2)       ajax收到后端返回的json数据之后,直接将json转换为对应的对象,然后传递给success的function的参数data

 

6.3.2. 分页-瀑布流

1. 分析图

 

 

 

 

 

(1)       send标记,是一个开关,避免重复加载下一页数据。当下一页数据还没有回来的时候,是不能再次触发获取下一页数据的逻辑的

(2)       只有下一页数据显示到界面上之后,才会将send标记打开

(3)       后端分页代码是第二种写法

 

 

 

这里的page与list其实是一样的,都代表当前页数据集合

page其实是继承了ArrayList,是一个集合

2. 界面滚动到底部的判断公式分析

 

 

 

(1)       滚动条距离底部的距离其实可以不要

(2)       公式改为:滚动条滚动距离+窗口高度>=页面文档高度

 

7.  Vue

7.1. Day01

7.1.1. Vue的作用

 

 

 

7.1.2. Vue的数据绑定

 

 

 

v-bind:value=”username”

7.1.3. element-ui的表单

7.1.3.1.       表单数据双向绑定

 

 

 

在这里进行双向数据绑定的时候,我们是将要绑定的data属性放到了ruleForm对象中,然后再进行的绑定,这样做方便后续数据的提交,等到提交数据的时候,直接将ruleForm对象转换为json提交到后台即可

7.1.3.2.       表单校验规则

 

 

 

rules是一个对象,在对象中可以指定多个字段的校验规则

name是其中一个校验规则,而这个校验规则是有必填和长度这两个校验规则组成的

每一个校验规则都是一个对象,对象中有三项信息

1. 校验规则:required必填,min-max长度

2. 校验失败时的提示信息:message

3. 何时触发校验:trigger(触发器):blur(失去焦点),意味失去焦点触发此校验规则

 

7.1.3.3.       表单提交

 

 

 

 

l  失去焦点需要校验表单,但是最后表单提交的时候,也需要再次校验表单

n  因为程序员可以通过程序,让表单数据自动填充,所以界面的失去焦点方法校验表单并不完全可靠

n  其实最后表单提交的时候再次校验,程序员也是可以跳过的,比如通过postman发起请求,不通过界面发起请求,所以前端所有的校验都不靠谱,后端servlet收到数据之后,也还是会重新校验的

l  注意:这里的validate是el-form的方法,我们需要获取el-form对象之后才能调用,如何获取呢?因为Vue不再通过原始方式获取DOM元素对象,所以采用ref引用名的方式:

  1. 只要标签添加ref属性,就会给当前标签创建对象,并且将对象存储到$refs中
  2. vue实例有一个属性 $refs , 存储当前界面中所有带有ref属性的标签的对象
  3. 比如此界面中有俩标签添加有ref:

(1)       <el-form  ref="ruleForm" >    <el-form-item ref="item1">

  1. 那么$refs对象就长这样:  {"ruleForm":el-form,"item1":el-form-item} 
  2. 所以可以通过如下方式获取:

(1)       this.$refs.ruleForm      this.$refs.item1

(2)       this.$refs["ruleForm"]     this.$refs["item1"](这个$refs比较特殊,可以通过中括号方式获取属性)

l  validate方法的参数是一个回调函数,函数的参数是校验结果

n  校验通过,valid=true

n  校验失败,valid=false

l  最后需要注意,validate方法内部用到了el-form的model属性,所以如果没有写如下属性:

 

 

 

l  会报错:

 

 

 

model是校验工作必须的属性

7.1.3.4.       表单数据重置

 

 

 

el-form还有一个方法resetFields,重置字段,会将用户输入的信息以及校验信息都清空

7.1.4. 表格

 

 

 

7.2. Day02

7.2.1. axios

1. 发送请求代码如下:

 

 

 

注意:这里是通过resp.data来获取后端返回的数据

2. api介绍

 

 

 

 

 

7.2.2. 封装前端传递的数据

1. 代码如下

 

 

 

如果前端传递的数据中有特殊类型的数据,比如日期字符串,这时候populate是搞不定的,而populate在进行转换数据的时候,会根据注册的转换器来处理特殊类型的数据,所以我们只需要注册日期转换器即可

 

 

 

populate方法在对数据进行转换的时候,会调用转换器的convert方法,将字符串日期传递进去,按照固定格式转换为Date类型的日期,然后返回

 

 

8.  Maven基础

8.1. maven的安装与配置

1. 将“16-Maven基础(双元)\day01\资料\安装程序\apache-maven-3.6.1-bin.zip”的压缩包复制到D盘下,进行解压缩

2. 接下来进行环境配置

 

 

 

3. 确定JAVA_HOME环境变量没问题(注意:建议使用jdk1.8,高版本会出问题)

4. 检查环境

(1)       打开cmd,执行:mvn -v

(2)       能看到如下结果即可

 

 

 

5. 确保idea是2018.2版本,目前发现有问题的版本有2018.3以及2020.x版本都会出现maven工程编译问题

8.2. 创建maven工程

8.2.1. 创建Java-maven工程

创建maven项目的时候选择使用原型骨架

 

 

 

输入坐标信息

 

 

 

创建完成后发现通过这种方式缺少一些目录,如下图

 

 

 

我们需要手动去补全目录,并且要对补全的目录进行标记,切记

 

 

 

 

8.2.2. 创建JavaWeb-maven工程

1. 选择web对应的原型骨架

 

 

 

2. 坐标

 

 

 

3. 和前面创建普通项目一样,通过原型创建web项目得到的目录结构是不全的,因此需要我们自行补全,同时要标记正确,最终需要得到如下结构

 

 

 

4. 清空web.xml

 

 

 

5. 清空pom.xml

 

 

 

6. 在pom.xml中project节点下添加tomcat插件的坐标:

复制代码
<build>
  <plugins>
    <!--tomcat插件-->
    <plugin>
      <groupId>org.apache.tomcat.maven</groupId>
      <artifactId>tomcat7-maven-plugin</artifactId>
      <version>2.1</version>
      <configuration>
        <port>80</port>
        <path>/</path>
      </configuration>
    </plugin>
  </plugins>
</build>
复制代码

 

 

7. 右侧就会出现tomcat7的命令

 

 

 

8. 双击tonmcat7:run运行,然后访问

 

 

 

9. 新建运行方式

 

 

 

8.3. pom文件说明

 

 

 

 

 

 

9.  综合案例

9.1. Day02

9.1.1. 文件上传

1. 页面提供文件上传的表单元素

 

 

 

2. form表单enctype属性的值为multipart/form-data

 

 

 

3. 表单的提交方式必须是POST,get方式无法提交大量的数据

 

 

 

4. 后台核心代码(这里用到的是commons-fileupload

复制代码
private void testUpload(HttpServletRequest request,HttpServletResponse response) throws Exception {

    //1.确认该操作是否支持文件上传操作,enctype="multipart/form-data"

    if(ServletFileUpload.isMultipartContent(request)){

        //2.创建磁盘工厂对象

        DiskFileItemFactory factory = new DiskFileItemFactory();

        //3.Servlet文件上传核心对象

        ServletFileUpload fileUpload = new ServletFileUpload(factory);

        //4.从request中读取数据

        List<FileItem> fileItems = fileUpload.parseRequest(request);



        for(FileItem item : fileItems){

            //5.当前标签是否是文件表单标签

            if(!item.isFormField()){

                //6.从临时存储文件的地方将内容写入到指定位置

                item.write(new File(this.getServletContext().getRealPath("upload"),item.getName()));

            }

        }

    }



}
复制代码

 

 

5. 图示分析

 

 

 

 

9.1.2. 添加题目时加入文件上传

 

 

 

 

 

 

9.1.3. 更新题目时上传图片分析

 

 

 

 

另:添加题目的时候也需要添加flag标记,如果不添加,会出现不管有没有上传图片,都设置picture字段,那么如果没有上传还设置picture字段的话,在编辑界面里就会出现如下情况:

 

 

 

另:附上save的优化后的代码

 

 

 

9.1.4. 题目选项删除

1. 分析图如下

 

 

 

 

2. 注意点:

(1)       如果从delete转到list,用的是list方法调用:list(request,response)这种方式,是可以传递请求参数的数据的,转发,重定向均不可以

(2)       而在这里,我们在请求delete方法的时候,传递了请求参数questionId,现在需要delete方法将这个请求参数传递到list中,所以只能直接调用list方法

9.1.5. 题目选项新增-更新

1. 分析图如下

 

 

 

 

 

9.2. Day03

9.2.1. 角色授权树形数据

1. sql分析图

 

 

 

2. sql

 

 

 

 

9.3. Day04

9.3.1. 菜单动态显示

1. 分析图如下

 

 

 

 

(1)       外层循环循环一级菜单

①     一级菜单需要满足条件ctype=0

(2)       内层循环循环二级菜单

①     二级菜单需要满足条件ctype=1

②     并且满足是否是当前循环的一级菜单的下级菜单:item2.parentId=item.id
原文:https://www.cnblogs.com/859630097com/p/14521648.html


相关教程