servlet一个简单的验证输入的用户名和密码是不是和数据库的一样(不用session)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了servlet一个简单的验证输入的用户名和密码是不是和数据库的一样(不用session)相关的知识,希望对你有一定的参考价值。

这个验证的过程是这样的
首先你会输入一个用户名和密码(正常情况下是你有一个form,里面有用户名和密码和一个提交按钮,在点击的时候会有一个action提交到对应的类里面就是你说的servlet),
在这里就可以用request的相关属性得到你的输入值,
接下来你有两种途径可以验证 第一种就是你在dao层(连接数据库层)查出所用的用户和密码。返回到servlet循环验证,这样用到equal方法进行比较
第二种方法就是你的方法里面是含参数的(用户名和密码)把值传到dao层进行确定值得查询,如果有这个数据返回true 没有返回false,返回到servlet,进行if语句,如果true就是用户和密码存在匹配,可以进行下一个页面跳转,如过false就让他去从新输入,或者用户注册,
这样就是现在用户的数据库验证
为了程序的优化建议选择第二种方法,
参考技术A 用form表单把用户名和密码提交给一个servlet处理,在servlet里面用request隐含对象获得form表单里面的数据(用户名和密码);再连数据库查询用户名和密码,与request隐含对象获得的用户名和密码进行比较。 参考技术B 那就用requst参数。用户名和密码文本框放在一个form里,form的action属性是跳转到servlet。这样servlet自然就接受到用户名和密码了。

使用Servlet制作简单登录验证,response下载文件与网页跳转


制作一个登录验证:

之前已经介绍过Servlet的开发,和HttpServletRequest、HttpServletResponse中的大部分常用方法。现在我们可以通过这几个知识点制作一个简单的登录验证,这个登录验证需要连接数据库,因为用户名和密码存储在数据库中。


使用到的工具和技术:

Tomcat、C3P0、JDBC、Servlet、mysql、html、css


大概思路:

首先在mysql数据库中创建一个库和用户数据表,在表格里先存储一个用户和密码(毕竟没有做注册功能)。

使用html、css编写一个登录页面,用户密码通过表单提交到服务端的Servlet上。

编写一个可以从c3p0连接池获得数据库连接对象的类,然后再编写一个Servlet类,在Servlet类中通过HttpServletRequest对象来获得表单数据,得到用户密码后需要验证一下合法性(服务端的二次验证),通过验证后连接mysql数据库进行查询,查询有这个数据后,就通过HttpServletResponse对象响应登录成功,否则响应登录失败。


实现代码示例:

Mysql数据库:

技术分享


表格中的数据:

技术分享

密码是使用password()函数加密过的。


页面代码:

技术分享

技术分享

技术分享


编写Servlet前需要下载两个jar包,一个是c3p0一个是jdbc的包,然后把这两个包放在WEB-INF里的lib目录(注意不要放错):

技术分享


然后编写一个可以从连接池中获得对象的类:

技术分享

技术分享



Servlet代码:

技术分享

技术分享


运行效果:

技术分享


输入用户名和密码:

技术分享


登录成功:

技术分享


登录失败:

技术分享


从以上的实现代码中,可以看到我在html的表单代码中,声明了required必填属性作为表单的验证,然后又在js代码里进行了判断验证,除此之外还在服务端的Servlet类上又用代码验证了一次,如此算来验证了三次数据的合法性。

可能会有人有疑问,为什么在前端中验证了数据的合法性,还要在服务端再验证多一次,这是因为他喵的网页源码是可以更改的,我可以把网页代码中的required属性去掉,而且在一些浏览器上还可以禁用js的解释器(手动滑稽)。不信的话,看一下就知道了:

技术分享


这时候我就可以跳过html的表单验证了:

技术分享

因为我在js里还写了一次验证,所以会显示账户密码为空,但是html中的验证就是跳过了。


然后我在浏览器设置中把js给禁用:

技术分享


这时候就只剩服务端那一层验证了:

技术分享

所以说服务端的验证是必不可少的,如果不在服务端写多一层验证就是在搞事情。





通过response实现简单的文件下载:

其实就算不通过response也可以让浏览器下载文件,只需要把要下载的文件放在WebContent目录下即可:

技术分享


然后通过浏览器访问这个文件的名称就可以下载了:

技术分享

技术分享

这是因为Tomcat可以自动响应对应的文件类型给浏览器,浏览器接收发现是不可以直接打开的文件后就会自动下载了。

但是在实际开发中不要这么做,因为不安全,如果是一些不重要的文件或者能够提供公共下载的文件还好说,但是重要的数据文件或者客户的资料被这样盗链下载的话,会造成客户的隐私泄露,所以这一类文件的下载必须要通过服务端的验证后才能下载。



例如我们可以做一个简单的实验,结合上面那个登录验证的例题,先登录成功后才能开始下载文件,在Servlet中通过HttpServletResponse对象我们可以响应出一个需要浏览器进行下载的文件类型,然后再通过I/O流将本地文件文件输出给浏览器下载。

代码示例:

技术分享

技术分享

技术分享


登录成功:

技术分享


登录失败:

技术分享

就这样我们,




网页跳转:

在Request和Response对象中各有一个方法,可以实现请求跳转的功能,这个跳转分为重定向跳转,和内部转发跳转,示意图:

技术分享

如图可以看到重定向与内部转发的区别,重定向是会访问AServlet,然后AServlet再告诉浏览器去访问BServlet,所以浏览器会访问两次Servlet。

而内部转发浏览器则是只需要访问一次Servlet,因为AServlet会在内部将请求转发给BServlet,所以HttpServletRequest和HttpServletResponse对象依然还是同一个,重定向则反之,因为访问了两次Servlet所以生成了两次对象。

重定向跳转代码示例:

重定向跳转需要使用HttpServletResponse对象来调用sendRedirect方法,这个方法需要传递一个参数,传递的是要跳转的Servlet的web访问名称。

AServlet:

技术分享


BServlet:

技术分享


浏览器访问AServlet的时候会跳转到BServlet上:

技术分享


控制台打印结果:

技术分享

从打印顺序可以看到是先访问了AServlet再访问的BServlet。


重定向的转发方式可以在转发的时候在URL中添加一些参数,代码示例:

AServlet:

技术分享


BServlet:

技术分享


浏览器访问AServlet跳转后会发现多了几个参数:

技术分享


控制台打印结果:

技术分享



内部转发代码示例:

内部转发需要使用HttpServletRequest对象来调用getRequestDispatcher方法,这个方法同样的需要传递一个参数,传递的是要跳转的Servlet的web访问名称。但是这个方法会返回一个RequestDispatcher对象,然后还需要通过这个对象调用forward方法将HttpServletRequest和HttpServletResponse对象一并传递过到目标Servlet上去,代码示例:

AServlet:

技术分享


BServlet:

技术分享


浏览器访问AServlet的时候URL不会显示跳转到了BServlet上,但是会接收到BServlet的响应结果,这是内部转发与重定向跳转不同的一点:

技术分享


控制台打印结果:

技术分享

从打印顺序可以看到是先访问了AServlet再访问的BServlet。


由于内部转发会将请求和响应对象一并传递到目标Servlet,所以我们可以在转发的时候往请求数据中添加一个属性什么的:

AServlet:

技术分享


BServlet:

技术分享


浏览器访问结果:

技术分享


控制台打印结果:

技术分享


以上的示例只是演示了简单的跳转,除了可以跳转自己工程下的页面,还可以通过重定向跳转到别人的页面,例如百度、Google 什么的,代码示例:

技术分享


运行结果:

技术分享


注意:只有重定向类型的跳转才能跳别人的网页,内部转发只能跳转自己工程下的网页,而且实现重定向的sendRedirect方法只能在一个Servlet中调用一次,如果调用两次就会报错。




本文出自 “zero” 博客,请务必保留此出处http://zero01.blog.51cto.com/12831981/1981476

以上是关于servlet一个简单的验证输入的用户名和密码是不是和数据库的一样(不用session)的主要内容,如果未能解决你的问题,请参考以下文章

servlet登录界面进行用户名和密码验证

servlet进入数据库验证用户名密码,用户名密码写错 怎么跳转到登录页面?/

使用Servlet制作简单登录验证,response下载文件与网页跳转

JSP/Servlet Web 学习笔记 DayThree —— 实现一个登陆小界面

Servlet:一个简单的注册页面

java【检测密码】一些网站设定了一些指定密码的规则。编写一个方法,检测一个字符串是不是是合法的密码