jsp+servlet+mysql笔记

问题1:Access denied for user 'root'@'localhost'

出现的原因:一开始用的是Navicat for MySQL来做的这个作业,网上说是权限问题,所以我在Navicat上按步骤做了对应的权限修改,不过还是无效,干脆就换成了MySQL Server 5.5,用cmd界面走了一趟一下流程:

cd C:\Program Files\MySQL\MySQL Server 5.5\bin

mysql -u root -p

(系统提示Enter password:)输入你的密码

(系统提示Welcome)

grant all privileges on *.* to 'root'@'localhost' identified by '(你的密码)';

(系统提示Query OK)

flush privileges;(如不刷新可能无法立即生效)

exit;(退出)

问题解决

https://blog.csdn.net/qq_36735409/article/details/78032144

 问题2:Before start of result set

 出现的原因:直接rs.getString()而没有在之前使用rs.next()

ResultSet返回的是一个列表,列表的指针默认是指向第一条记录前的位置,想要获取第一条(及以后)记录的内容就必须要使用rs.next()方法把指针往后移。基于当时的情况,ResultSet里只有一条记录,所以没有使用while(rs.next())和if(rs.next()),直接如下

rs.next();
if(rs.getString("adminname").isEmpty()){
    //......
}

https://blog.csdn.net/killua_hzl/article/details/6073618

 问题3:Unknown column 'admin' in 'where clause'

出现的原因:sql语句的格式存在问题

sql语句是"select * from admin where adminname= "+adminname;(String adminname)

就出现了此问题

将sql语句改为select * from admin where adminname= ' "+adminname+" ' "; 

如果直接按红字写的话,假如adminname变量是个整形还好说,但如果是字符串的话则需要框在引号内

https://blog.csdn.net/fastkeeper/article/details/47783739

问题4:ResultSet是否为空的判断语句写法有误

做了一个登录方法,账号密码正确,返回true跳转成功页面,反之则返回false跳转失败页面。如果执行sql查找后resultset是空就直接返回false,不需要做后续密码判断

//先判断是否存在此账号再进行密码判断
		sql = "select * from admin where adminname ='"+adminname+"'";
		try {
			state = conn.createStatement();
			rs = state.executeQuery(sql);
			if(rs == null){
				//判断成功意味着不存在此adminname对应的数据
				return false;
			}
			else{
				//存在对应用户名的数据,则只需进行密码核对
				rs.next();
				if((rs.getString("password")).equalsIgnoreCase(password)){
					//密码正确,返回true
					return true;
				}
			}
        return false;

出现原因:判断rs为空的写法有误,导致无论账号密码是否正确返回都是false

判断ResultSet的方法有很多,但rs == null这个绝对是大忌!

rs不管执行有没有记录的sql语句都不会是null,除非是以下情况

ResultSet rs = null;
//后续没有任何的例如rs = state.executeQuery(sql);之类的操作

对于解决,我用了一种方法

if(rs.first()==false){
    //返回false意味着不存在此adminname对应的数据
    return false;
}

rs.first()方法如图

jsp+servlet+mysql笔记_第1张图片

注意:当用这种方法后光标已经在第一条记录上了,所以如果后续需要读取记录的效果是“从第一行到最后一行”,请单独把第一行给读取一遍再进行while(rs.next())遍历读取

问题5:不知道如何达到跳转页面后显示提示消息

出现原因:这个问题描述的有点抽象 ,大概意思就是想让页面跳转后在当前页面上再显示一段文字“XXXXX”,思路是先sendRedirect后再response.write("XXXXX")的一个思路,但是只能做到页面的跳转,却不会显示文字

解决办法:尚未解决,待编辑

https://www.cnblogs.com/dlexia/p/4653431.html

问题6:导入的js文件乱码

出现情况:把js在dreamweaver上写好后import进scripts文件夹后中文全部乱码

解决办法:把js的内容复制到txt文件中再在另存为内选择编码为utf8,把后缀名改为js后再导入进项目中 

问题7:通过js判断输入框的内容是否为空时,应该注意的一点 

出现情况:无,仅作提醒

解决办法:https://blog.csdn.net/zjdwhd/article/details/52904905

问题8:JS实现表单内容验证、阻止表单提交(onsubmit)

出现情况:没有使用onsubmit来阻止,导致非法数据还是提交了上去

https://blog.csdn.net/u010591939/article/details/46739177 

问题9:el表达式如何获取url的参数?

出现情况:${sid }表达式没有获取到url内sid='...' 的参数

解决办法:https://blog.csdn.net/zoujian1993/article/details/75087553

首先要了解el表达式获取值的原理以及范围。

  1. el表达式会从小到大去找寻相应的key,如果找到了就取相应的value

  2. 这个范围从小到大依次是pageContext、request、session、Application
  3. 取值的原理,这几个作用域都有一个相同的属性:attribute。都拥有setAttribute()和getAttribute()方法,el表达式取值就是从这里面取的
  4. 我们要取的数据是携带在url中的,而获取url中参数的方法是getParameter()。所以url中的参数并不能直接通过${name}的方式获取。
  5. 最后,el表示式获取url中参数的方法是:${param.name}

问题10:为什么在引入外部文件时js文件要放在最下面?

js文件放在底部原因很简单,因为浏览器在解析dom和渲染的时候是单线程,如果遇到js下载缓慢的情况,会造成页面阻塞,用户看不到页面的东西,造成不好的体验,一但js加载失败,那浏览器就会一直不停地加载,页面就一直显示不出来,放在底部的话,就算js加载缓慢或者加载不出来,但是因为css和其他html文档都加在完毕了,至少可以让用户看到完整的界面从而提高用户体验和性能。

问题11:execute(sql)三种执行方法的返回值表示的含义 

  • boolean execute(String sql)

返回:如果第一个结果为 ResultSet 对象,则返回 true;如果其为更新计数或者不存在任何结果,则返回false

  •  int executeUpdate(String sql)

返回:受(增删改)影响的行数

  •  ResultSet executeQuery(String sql)

返回:执行SQL查询,并返回ResultSet 对象

问题12: MVC设计模式的概述

jsp+servlet+mysql笔记_第2张图片 

jsp+servlet+mysql笔记_第3张图片

问题13:MVC设计模式与SSH框架的爱恨情仇(?)

 SSH是三个框架共用的缩写,是Struct+Spring+Hibernate的组合,所以SSH和MVC的关联要从三个点看

Struct框架

 MVC三个部分互相有关联,耦合度高,Struct框架解耦了M层和V层,并且选择视图只需要返回视图的名称就可以了。

jsp+servlet+mysql笔记_第4张图片

Spring框架

Spring的主要目的是为我们创建对象,我们无需再用new来创建对象,而是用spring来创建,它管理对象的整个生命周期,无需我们关心对象的创建和销毁。我们需要使用哪个类的对象,只需在配置文件中导入,并提供该对象的set方法。

Hibernate框架

在MVC模式中,人们把与数据库相关的操作从M层中分离出来,单独形成了Dao层,这样别的Model可以复用Dao。

Hibernate的目的不像struts一样是解耦,它的目的是在M层和Dao层之间的数据建立对应关系,我们不用再把实体对象拆开来放到数据表中,也不用把数据表中查询到的数据组装成实体对象,Hibernate替我们对数据表和实体对象建立了映射。
 

详细的SSH细节在这个文章有讲

https://www.cnblogs.com/laibin/p/5847111.html

 

你可能感兴趣的:(Java,Jsp,jdbc)