jsp+servlet实现简单登录页面功能Demo

jsp+servlet实现简单登录页面功能Demo小白新路历程-1[转载请联系本人]实现功能:模拟简单登录功能,登录成功跳转新页面,登录失败在原登录界面提示登录失败信息开发环境:eclipseTomcat-8.0预备知识:HTML标签,Servlet相关知识——请求的转发与重定向,jsp相关知识,EL表达式思路实现:共2个jsp,一个servlet1.登录界面login.jsp:采用jsp,不采用html的原因是因为要进行登录…

大家好,又见面了,我是你们的朋友全栈君。

小白新路历程-1          

实现功能:

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

开发环境:

eclipse

Tomcat-8.0

预备知识:

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

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

1.登录界面login.jsp:

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

如图:

jsp+servlet实现简单登录页面功能Demo

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

欢迎信息+登录的用户名

如图:

jsp+servlet实现简单登录页面功能Demo

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

如图:

jsp+servlet实现简单登录页面功能Demo

思路简述:

    问题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>

留言Message:本人小白,以上仅个人学习心得,欢迎评论区dd,有错误欢迎指出,互相学习,感谢~
 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/150190.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • loadrunner12使用手册_loadrunner脚本编写教程

    loadrunner12使用手册_loadrunner脚本编写教程首先我们安装好loadrunner12之后,出现这三个图标,然后开始操作。操作:1.打开VirtualUserGenerator,新建脚本2.选择脚本协议,对脚本名称位置可以进行编辑。此处以web-http/html为例。3.点击创建后,选择录制脚本,填写好录制的地址,应用程序,然后选择开始录制,此处以测试登录为例4.结束录制后,点击关联回放,确保脚本无误5.对代码进行进一步完善,插入事务或集合点6.对脚本进行执行回放,确保脚本无误,对脚本进行参数化可以直

    2022年10月14日
  • Linux基础语法

    Linux基础语法LInuxlinux一切皆文件读写(权限)入门概述我们为什么要学习Linuxlinux诞生了这么多年,以前还喊着如何能取代windows系统,现在这个口号已经小多了,任何事物发展都有其局限性都有其天花板。就如同在国内再搞一个社交软件取代腾讯一样,想想而已基本不可能,因为用户已经习惯于使用微信交流,不是说技术上实现不了解而是老百姓已经习惯了,想让他们不用,即使他们自己不用亲戚朋友还是要用,没有办法的事情。用习惯了windows操作系统,再让大家切换到别的操作系统基本上是不可能的事情,改变一

  • C51浮点数显示、浮点数表示方法

    C51浮点数显示、浮点数表示方法C51中的浮点数存储方式–n年前曾在c51bbs论坛中发布过Float浮点形,它是符合IEEE-754标准的单精度浮点形数据,在十进制中具有7位有效数字。FLOAT型据占用四个字节(32位二进制数),在内存中的存放格式如下:字节地址(由低到高)0123浮点数内容MMMMMMMMMMMMMMMMEMMMMMMMSEEEEEEE其中,S为符号位,存放在最高字节

  • Java工程师书单(初级、中级、高级)

    Java工程师书单(初级、中级、高级)简介怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序员经常会问到的问题笔者完全从自身的自学经历出发,以初学者的视角挑选出如下的这些图书。初级书单《编写高质量代码——改善Java程序的151个建议》这是一本值得入门java的人

  • 《Storm企业级应用:实战、运维和调优》——1.3 Storm核心组件[通俗易懂]

    《Storm企业级应用:实战、运维和调优》——1.3 Storm核心组件

  • 掌上生活app下载安装_浏览器下载

    掌上生活app下载安装_浏览器下载环境要求HttpRunner是一个基于Python开发的测试框架,可以运行在macOS、Linux、Windows系统平台上。这里使用macOS系统进行演示对于python版本要求:py

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号