java web黑马旅游网 问题及知识

黑马旅游网java web各种问题及知识

一、问题

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

image-20220606152657376

6.发送邮件时乱码

观察idea编码是否是GBK,如果为utf-8就改为GBK

image-20220607115246577

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的三大域对象

  1. request域对象

    在一次请求中有效。请求转发有效,重定向失效。

  2. session域对象

    在一次会话中有效。请求转发和重定向都有效,session销毁后失效。

  3. 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、重定向时的网址可以是任何网址,转发的网址必须是本站点的网址

image-20220607145319967

image-20220607145305548

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中。如果查询多行记录抛出异常。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值