黑马旅游网java web各种问题及知识
文章目录
- 黑马旅游网java web各种问题及知识
- 一、问题
- 3.Could not get JDBC Connection; nested exception is com.alibaba.druid.pool.GetConnectionTimeoutExcept
- 4.出现the server time zone value ...
- 5.无法连接数据库,出现validateConnection false报错
- 6.发送邮件时乱码
- 7.2021版idea创建servlet不出现
- 8.跳转到servlet但是发现页面空白
- 9.提个醒,一定在前端出错比如登陆姓名不显示的时候,清除浏览器缓存,很可能是这个原因
- 10.tab_favorite中间表数据不能重复,最好再加一个自增id用作主键
- 二、知识
- 2. 常用正则表达式
- 3. HTML 标签的 name 属性
- 4. writeValueAsString的作用
- 5. response.getWriter().write()和 response.getWriter().print()的区别
- 6.request和response的介绍
- 7.BeanUtils的copyProperties,populate区别分析
- 8.Servlet的三大域对象是什么你知道吗
- 9.重定向与请求转发的区别
- 10.request.getRequestURI()与request.getRequestURL()的区别
- 11.JdbcTemplate 中的query,queryForObje,queryForList,queryForMap方法
一、问题
1. java中extends ,implements的顺序问题
一定记住extends要放在implement前面!!!!!!!!!!!!!!!!
2. Property ‘dataSource’ is required
去掉JDBCUtils里druid.properties前面的/
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
3.Could not get JDBC Connection; nested exception is com.alibaba.druid.pool.GetConnectionTimeoutExcept
是数据库mysql版本不一致导致的
把pom文件里mysql版本由5改为8即可
4.出现the server time zone value …
添加?serverTimezone=UTC
5.无法连接数据库,出现validateConnection false报错
druid更换更高的版本如1.1.10
6.发送邮件时乱码
观察idea编码是否是GBK,如果为utf-8就改为GBK
7.2021版idea创建servlet不出现
(53条消息) 2021版IDEA解决新建没有servlet菜单选项办法_是个 小白的博客-CSDN博客_没有新建servlet
8.跳转到servlet但是发现页面空白
你为什么不试试**doPost(request, response);**呢?你这个大聪明
servlet跳到get方法了你都不知道吗?!!!
9.提个醒,一定在前端出错比如登陆姓名不显示的时候,清除浏览器缓存,很可能是这个原因
10.tab_favorite中间表数据不能重复,最好再加一个自增id用作主键
二、知识
1. 关于function() js函数名后什么时候加括号,什么时候不加括号
加括号——调用函数
只要是要调用函数执行的,都必须加括号。
此时,function()实际上等于函数的返回值。(没有返回值也已经执行了函数体内的行为)。就是说,只要加括号的,就代表将会执行函数体代码。
不加括号——指定函数引用
把函数名作为函数指针,用于传参,此时不是得到函数结果,因为不会运行函数体代码。它只是传递了函数体所在地址,在需要时找到函数体去执行。
例如request.onreadystatechange = doSomething;是将函数doSomething自身的引用(而不是函数结果)赋值给onreadystatechange属性。
函数调用必须加括号,即使无参数,不然怎么叫做函数调用呢。但是当用到return语句时,要注意function()和function的区别,前者返回的是函数执行完的值, 后者直接返回的是函数【这个通常用于把函数当做参数传递另一个函数中去】
2. 常用正则表达式
1.基础
(53条消息) 正则表达式基础入门看这一篇就够了_mossGao的博客-CSDN博客_正则表达式入门
2.验证邮箱:
^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
\w任意大小写英文字母 0-9数字 下划线 +为至少出现1个以上字符
[-+.]\w+ 任意包含 - + . 及 \w字符的组合出现0次或多次,主要包括例如jb51.net@vip.163.com这样的邮箱中的jb51.net
@ 固定符号
\w+ 出现至少1次以上 \w的字符
[-.]\w+ 出现零次或多次这种组合的字符,
例如:jb51.net@vip.163.com 中的 vip.163
. 固定符号 必须包括一个这个
反正\w+([-.]\w+)* 这种组合是规定要以 \w类型字符开头,然后后面跟上\w以及 - 中划线 .点号 的组合吧
整句的意思就是说
邮箱地址 必须由 大小写字母 或 数字 或下划线开头,其后可以跟上任意的 \w字符 和 中划线 加号 英文句号 @ 跟上任意的 \w字符 和 中划线 加号 英文句号 . 跟上任意的 \w字符 和 中划线 加号 英文句号
3. HTML 标签的 name 属性
<form action="form_action.asp" method="get">
<p>Name: <input type="text" name="fullname" /></p>
<p>Email: <input type="text" name="email" /></p>
<input type="submit" value="Submit" />
</form>
name 属性规定 input 元素的名称。
name 属性用于对提交到服务器后的表单数据进行标识,或者在客户端通过 JavaScript 引用表单数据。
**注释:**只有设置了 name 属性的表单元素才能在提交表单时传递它们的值。
4. writeValueAsString的作用
如何把java对象转化成json字符串并打印出来呢?
这里就用到了jackon的jar包,使用writeValuesAsString的方法就可以把对象转化成json字符串。
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(info);
5. response.getWriter().write()和 response.getWriter().print()的区别
response.getWriter().print()
不仅可以打印输出文本格式的(包括html标签),还可以将一个对象以默认的编码方式转换为二进制字节输出
response.getWriter().writer()
只能打印输出文本格式的(包括html标签),不可以打印对象
resp.setContentType("application/json;charset=utf-8");
resp.getWriter().write(json);
6.request和response的介绍
request是代表HTTP请求信息的对象,response是代表HTTP响应信息的对象。
当浏览器发请求访问服务器中的某一个Servlet时,服务器将会调用Servlet中的service方法来处理请求。在调用service方法之前会创建出request和response对象。
其中request对象中封装了浏览器发送给服务器的请求信息(请求行、请求头、请求实体等),response对象中将会封装服务器要发送给浏览器的响应信息(状态行、响应头、响应实体),在service方法执行完后,服务器再将response中的数据取出,按照HTTP协议的格式发送给浏览器。
每次浏览器访问服务器,服务器在调用service方法处理请求之前都会创建request和response对象。(即,服务器每次处理请求都会创建request和response对象)
在请求处理完,响应结束时,服务器会销毁request和response对象。
(53条消息) request和response的区别!!!_经理,天台风好大的博客-CSDN博客_request和response的区别
7.BeanUtils的copyProperties,populate区别分析
import org.apache.commons.beanutils.BeanUtils;//populate
org.springframework.beans.BeanUtils;//copyProperties
BeanUtils的copyProperties方法用来将orig中的成员变量的值复制给dest,即将已经存在的dest变为orig的副本。
public void copyProperties(Object dest, Object orig) {
.......
}
BeanUtils的populate方法用来将Map<Key,value>中的值(String或String[])转换到目标bean对应的属性中,Map中的Key是目标bean的属性名。
public static void populate(Object bean, Map properties){
……
}
8.Servlet的三大域对象是什么你知道吗
Servlet的三大域对象
-
request域对象
在一次请求中有效。请求转发有效,重定向失效。
-
session域对象
在一次会话中有效。请求转发和重定向都有效,session销毁后失效。
-
servletContext域对象
在整个应用程序中有效。服务器关闭后失效。
9.重定向与请求转发的区别
- request.getRequestDispatcher()是请求转发,前后页面共享一个request ; 这个是在服务端运行的,对浏览器来说是透明的。
- response.sendRedirect()是重新定向,前后页面不是一个request。而这个是在浏览器端运行的。
- request.getContextPath()得到的是项目的虚拟路径:例如
- 访问路径为:http://localhost:8080/blue/response.jsp
- request.getContextPath()得到的就是 /blue
重定向和请求转发的区别
1、重定向是两次请求,转发是一次请求,因此转发的速度要快于重定向
2、重定向之后地址栏上的地址会发生变化,变化成第二次请求的地址,转发之后地址栏上的地址不会变化,还是第一次请求的地址
3、转发是服务器行为,重定向是客户端行为。重定向时浏览器上的网址改变 ,转发是浏览器上的网址不变
4、重定向是两次request,转发只有一次请求
5、重定向时的网址可以是任何网址,转发的网址必须是本站点的网址
10.request.getRequestURI()与request.getRequestURL()的区别
request.getRequestURL():返回全路径
request.getRequestURI():返回除去host(域名或者ip)部分的路径
request.getContextPath():返回工程名部分,如果工程映射为/,此处返回则为空
request.getServletPath():返回除去host和工程名部分的路径
例如:
request.getRequestURL():http://localhost:8080/jqueryLearn/resources/request.jsp
request.getRequestURI():/jqueryLearn/resources/request.jsp
request.getContextPath():/jqueryLearn
11.JdbcTemplate 中的query,queryForObje,queryForList,queryForMap方法
【query方法】返回结果是list,且list中元素必须是自定义bean
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
@Override
public List<Category> findAll() {
String sql = "select * from tab_category";
return template.query(sql,new BeanPropertyRowMapper<Category>(Category.class));
}
【queryForObject】查询出一条记录并封装到一个对象中。可以返回的是String、Integer、Double或者自定义bean。但是如果查询的记录为0条或者大于1条,抛出异常。
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
@Override
public int findTotalCount(int cid) {
String sql = "select count(*) from tab_route where cid = ?";
return template.queryForObject(sql, Integer.class,cid);
}
【queryForList】这个方法返回一个list,这个方法比较特殊,可以返回List,还可以返回list<Map<String,Objec>>.
【queryForMap】查询一行数据封装到Map中。如果查询多行记录抛出异常。
sql = “select count(*) from tab_route where cid = ?”;
return template.queryForObject(sql, Integer.class,cid);
}
【queryForList】这个方法返回一个list,这个方法比较特殊,可以返回List<String>,还可以返回list<Map<String,Objec>>.
【queryForMap】查询一行数据封装到Map中。如果查询多行记录抛出异常。