jsp+servlet实现简单登录页面功能(附demo)

 更新时间:2021年7月7日 15:00  点击:1928

实现功能:

模拟简单登录功能,登录成功跳转新页面,登录失败在原登录界面提示登录失败信息

开发环境:

  • eclipse
  • Tomcat-8.0

预备知识:

HTML标签,Servlet相关知识——请求的转发与重定向,jsp相关知识,EL表达式

思路实现:共2个jsp,一个servlet

 1.登录界面login.jsp:

采用jsp,不采用html的原因是因为要进行登录失败信息回显(当然如果用html结合ajax也可以实现,这里采用jsp更方便)

如图:

2.登录成功界面hello.jsp:

欢迎信息+登录的用户名

如图:

3.登录失败信息回显Login.jsp:

如图:

思路简述:

    问题1:jsp页面如何与一个java类进行连接绑定起来?

                简单的说,一个jsp页面要跟一个servlet进行连接,需要有一个桥梁,这个桥梁就是web.xml文件,可以通过下面代码观察到,登录页面的表单的提交的action属性值,填写的就是在web.xml文件里对应的servlet-mapping中的url-pattern的值,而这个值又对应了一个servlet-name,servlet-name则对应到一个servlet-class,这样就把jsp和java类(servlet类)进行了关联。
其实我觉得最明显的就是提交表单后,url地址变化了,通过这个url地址将表单信息传给了对应的java类。

    问题2:实现的整体的思路是怎么样的?

                一个jsp页面通过表单元素,将用户信息通过url的形式提交给一个已经在web.xml配置映射好的servlet类,servlet类接收到传来的表单信息,进行值校验(为了方便起见则直接定义用户名密码了,正常情况下是要采用jdbc进行从数据库中取出值进行校验的),然后对校验结果进行判断,如果账户密码正确,则跳转到登录成功的页面(采用重定向),如果失败,则将登录失败的提示信息存到request域对象中并返回登录界面显示出来(采用请求的转发)

简单的联系:

jsp页面<---------->web.xml<--------->servlet类

    问题3:在servlet中要如何获取jsp中提交过来的表单信息呢?

                request.getParameter("userName");//userName是表单中,input标签中name属性的值,接收到的是string类型

    问题4:登录页面如何在登录失败的时候给出提示信息呢?

                实现思路是如果登录失败,则往request域对象中存入登录失败的提示信息,然后通过请求的转发的方式跳转回登录页面并显示,所以登录界面要嵌入一段脚本代码,用来判断当前是否有登录失败提示信息的对象,如果有则将该对象保存的信息打印出来,如果没有则什么都不显示。

1)如果账密不匹配,则往request域中存入message对象,该message中保存了提示信息:request.setAttribute("message", "账密错误,请重新登录<br>");

并转发到登录页面:request.getRequestDispatcher("/loginDemo/login.jsp").forward(request, response);

2)在登录页面获取该对象:(因为登录失败的时候才有该对象,疑问:那如果我登录失败后再访问登录页面,那不应该会显示错误信息吗?答案是否定的。可了解request域对象生命周期相关知识

               <%
                       if(request.getAttribute("message")!= null){
        out.print(request.getAttribute("message")); 
               }
                %>

     问题5:request.getAttribute()和request.getParameter()区别是:

                前者获取的是一个object对象,后者获取的是一个string字符串,所以前者使用的时候可能会碰到需要做一些类型转换的情况。

     问题6:表单访问路径填写问题

                在ation属性,或者请求的转发,重定向,一般采用绝对路径,可以避免路径访问出错,访问资源不存在等问题。

                jsp表达式:<%=request.getContextPath()%>或者用EL表达式:${ pageContext.request.contextPath }可以获取当前web应用根目录路径,不妨试试输出打印下,就可以观察值是多少了。

具体代码Code:

1.login.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>标题</title>
<style type="text/css">
	*{margin: 0;padding: 0;}
	form{margin: 0 auto;padding:15px; width: 300px;height:300px;text-align: center;}
	#submit{padding: 10px}
	#submit input{width: 50px;height: 24px;}
</style>
</head>
<body>
	<div class="wrapper">
		<form action="<%=request.getContextPath()%>/loginDemo" method="post">
			<label>用户名:</label>
				<input type="text" name="userName" value="${param.userName}"/><br><br>
			<label>密码:</label>
				<input type="password" name="password"/><br>
				
			<font color="red">
				<%
					if(request.getAttribute("message")!= null){
						out.print(request.getAttribute("message"));
					}
				%>
			</font>
			
			<div id="submit">
				<input type="submit" value="登录"/>
			</div>
		</form>
	</div>
</body>
</html>

2.hello.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>标题</title>
</head>
<body>
	Hello:<br>
	<font color="green" size="22">
		<%
			out.print(request.getParameter("userName")+"<br>");
		%>
	</font>
	<a href="<%=request.getContextPath()%>/loginDemo/login.jsp">重新登录</a>
</body>
</html>

3.对应的LoginServlet.java

package loginDemo;
 
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class LoginServlet extends HttpServlet {
	
	private static final long serialVersionUID = 1L;
 
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String userName = request.getParameter("userName");
		String password = request.getParameter("password");
		System.err.println(userName+";"+password);
		String myUser = "Dong";
		String myPwd = "5432100";
		if(userName.equals(myUser)&&password.equals(myPwd)) {
			response.sendRedirect(request.getContextPath()+"/loginDemo/hello.jsp?userName="+userName);
		}else {
			request.setAttribute("message", "账密错误,请重新登录<br>");
			request.getRequestDispatcher("/loginDemo/login.jsp").forward(request, response);
		}
		
	}
}

4.对应的web.xml的配置(注册)与映射

  <servlet>
      <servlet-name>logindemo</servlet-name>
      <servlet-class>loginDemo.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>logindemo</servlet-name>
      <url-pattern>/loginDemo</url-pattern>
  </servlet-mapping>

到此这篇关于jsp+servlet实现简单登录页面功能(附demo)的文章就介绍到这了,更多相关jsp+servlet登录页面内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

[!--infotagslink--]

相关文章

  • php中登录后跳转回原来要访问的页面实例

    在很多网站用户先访问一个要登录的页面,但当时没有登录后来登录了,等待用户登录成功之后肯定希望返回到上次访问的页面,下面我就来给大家介绍登录后跳转回原来要访问的页...2016-11-25
  • php中用curl模拟登录discuz以及模拟发帖

    本文章完美的利用了php的curl功能实现模拟登录discuz以及模拟发帖,本教程供参考学习哦。 代码如下 复制代码 <?php $discuz_url = &lsquo;ht...2016-11-25
  • Ruby on Rails实现最基本的用户注册和登录功能的教程

    这里我们主要以has_secure_password的用户密码验证功能为中心,来讲解Ruby on Rails实现最基本的用户注册和登录功能的教程,需要的朋友可以参考下...2020-06-30
  • PHP中SSO Cookie登录分析和实现

    什么是SSO?单点登录SSO(Single Sign-On)是身份管理中的一部分。SSO的一种较为通俗的定义是:SSO是指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护...2015-11-08
  • PHP中SSO Cookie登录分析和实现

    什么是SSO?单点登录SSO(Single Sign-On)是身份管理中的一部分。SSO的一种较为通俗的定义是:SSO是指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护...2015-11-08
  • php有效防止同一用户多次登录

    【问题描述】:同一用户在同一时间多次登录如果不能检测出来,是危险的。因为,你无法知道是否有其他用户在登录你的账户。如何禁止同一用户多次登录呢? 【解决方案】 (1) 每次登录,身份认证成功后,重新产生一个session_id。 s...2015-11-24
  • vue实现用户登录切换

    这篇文章主要为大家详细介绍了vue实现用户登录切换,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-04-22
  • 修改mysql密码phpmyadmin不能登录

    出现phpmyadmin不能登录是我在修改我mysql服务器密码之后导致的,后来百度了相关的原因,原来是修改了mysql密码之后我们还需要在phpmyadmin目录中去修改config.inc.php中...2016-11-25
  • Vue-Element-Admin集成自己的接口实现登录跳转

    关于这个Vue-element-admin中的流程可能对于新的同学不是很友好,所以本文将结合实例代码,介绍Vue-Element-Admin集成自己的接口实现登录跳转,感兴趣的小伙伴们可以参考一下...2021-06-23
  • 浅谈js二维码扫码登录是什么原理

    这篇文章主要介绍了浅谈js二维码扫码登录是什么原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-13
  • phpmyadmin不能登录,无任何提示的问题解决

    昨天有一朋友说自己的phpmyadmin不能登录并且无任何提示了,问我怎么解决,下面我来分享一下关于phpmyadmin不能登录问题总结. phpmyadmin不能登录没有提示 解决方法:...2016-11-25
  • PHP中如何使用session实现保存用户登录信息

    session在php中是一个非常重要的东西,像我们用户登录一般都使用到session这个东西,相对于cookie来说session 要安全很多,同时我们购物车经常使用session来做临时的记录保存哦。使用session保存页面登录信息1、数据库连接...2015-10-21
  • 简单php cookie用户登录实例

    cookie 的用途之一是存储用户在特定网站上的密码和 id。另外,也用于存储起始页的首选项。在提供个人化查看的网站上,将要求阁下的网络浏览器利用阁下计算机硬驱上的少量...2016-11-25
  • SpringBoot登录拦截配置详解(实测可用)

    这篇文章主要介绍了SpringBoot登录拦截配置详解(实测可用),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-07-22
  • jsp 自动编译机制详细介绍

    这篇文章主要介绍了 Jasper的自动检测实现的机制比较简单,依靠某后台线程不断检测JSP文件与编译后的class文件的最后修改时间是否相同,若相同则认为没有改动,但倘若不同则需要重新编译,需要的朋友可以参考下...2016-12-02
  • JS+JSP通过img标签调用实现静态页面访问次数统计的方法

    这篇文章主要介绍了JS+JSP通过img标签调用实现静态页面访问次数统计的方法,基于JavaScript动态调用jsp页面通过对TXT文本文件的读写实现统计访问次数的功能,需要的朋友可以参考下...2015-12-16
  • 解决无法解析javax.servlet的方法

    最近在创建一个servlet时,自动生成的代码中出现servlet无法解析的提示,令我无法正常使用servlet里的方法,在对各个步骤进行查看后,发现了问题所在,需要的朋友可以参考下...2021-05-15
  • Eclipse编辑jsp、js文件时卡死现象的解决办法汇总

    使用Eclipse编辑jsp、js文件时,经常出现卡死现象,在网上百度了N次,经过N次优化调整后,卡死现象逐步好转,下面通过脚本之家平台给大家分享几种解决办法,需要的朋友参考下...2016-02-05
  • 详解Servlet入门级设置(超详细 IDEA2020版)

    这篇文章主要介绍了详解Servlet入门级设置(超详细 IDEA2020版),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-04
  • Win2012服务器 远程桌面帐户允许多用户同时登录的配置方法

    这篇文章主要介绍了Win2012服务器 远程桌面帐户允许多用户同时登录的配置方法,需要的朋友可以参考下...2016-11-01