实现网页注册和登录账号功能

真诚感谢wrr悉心指导

  在实现此功能前,需要先完成服务器环境搭载。

如有需要可以参考

eclipse使用jsp_无忧#的博客-CSDN博客_eclipse jsp

Java获取网页form提交的信息_无忧#的博客-CSDN博客

确保可以正常运行程序

目录

效果展示

 JSP部分

登录部分:

注册部分:

退出部分:

JAVA部分

验证登录

注册部分

注册成功部分

注册失败部分

登录成功部分

User

尝试运行


效果展示

 

 

 JSP部分

登录和注册部分类似,在JSP中写一些简单的HTML代码,form表单提交方法为post。方便演示将信息提交到后端处理。

登录部分:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>会员用户登录</title>
</head>
<body >
<div style="text-align: center;">
<span style="font-size: 26px">用户登录</span>
<hr>
<form action="<%=request.getContextPath() %>/login.htm" method="post"><%--目标jsp --%>
用户名称:<input type="text" name="username"><br>
用户密码:<input type="text" name="password"><br>
<input type="submit" value="提交">
<a href="register.jsp">没有帐户?点击注册</a>
</form>
</div>
</body>
</html>

注册部分:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>会员注册界面</title>
	</head>
	<body>
		<div style="text-align: center;">
			<form action="<%=request.getContextPath() %>/register.htm" method="post">
				<table border="1" cellspacing="0" cellpadding="0">
					<tr><td>登录名:</td><td><input type="text" name="username"  /></td></tr>
					<tr><td>密码:</td><td><input type="password" name="password" /></td></tr>
					<tr><td>确认密码:</td><td><input type="password" name="confirdpassword" /></td></tr>
					<tr><td>邮箱地址:</td><td><input type="email" name="email" /></td></tr>
					<tr align="center"><td colspan="2"><input type="submit" value="提交" /></td></tr>
				</table>
			</form>
		</div>
	</body>
</html>

退出部分:

session对象可以判断会话是否为同一会话,session通过删除绑定的对象,可以使session失效。

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
    <%
    String username=(String)session.getAttribute("username");//将session保存的信息删除
    session.removeAttribute(username);
    session.invalidate();
    response.sendRedirect("login.jsp");
    %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>退出</title>
</head>
<body>
</body>
</html>

JAVA部分

@WebServlet(name = "loginServlet" ,urlPatterns = "/login.htm")是什么意思?

Servlet3.0提供了注解(annotation),我们可以不用再web.xml里面配置servlet,只需要加上@WebServlet注解就可以修改该servlet的属性了。web.xml可以配置的servlet属性,在@WebServlet中都可以配置。

jsp页面 通过action提交到RegistServlet 类:

如<form action="RegistServlet " method="post" >

创建RegistServlet类来处理jsp页面发出的请求

用法形如:

@WebServlet("/RegistServlet")

其中/RegistServlet表示访问servlet的 url 映射(地址)(此处为相对路径,即 “项目名称/RegistServlet” )。

HttpServlet中的doGet()和doPost()方法

一般来说我们是用不到doGet方法的,doGet方法提交表单的时候会在url后边显示提交的内容,所以不安全。而且doGet方法只能提交256个字符(1024字节),而doPost没有限制,因为get方式数据的传输载体是URL(提交方式能form,也能任意的URL链接),而POST是HTTP头键值对(只能以form方式提交)。通常我们使用的都是doPost方法,你只要在servlet中让这两个方法互相调用就行了

验证登录

request.getParameter()方法:

1.获取通过http协议提交过来的数据 通过容器的实现来取得通过get或者post方式提交过来的数据

2.request.getParameter()方法传递的数据,会从web客户端传到web服务器端,代表HTTP请求数据,该方法返回String类型的数据

request.setAttribute()和getAttribute()只是在web容器内部流转,仅仅是请求处理阶段
request.getAttribute()方法返回request范围内存在的对象
request.setAttribute() 和 getAttribute() 方法传递的数据只会存在于Web容器内部

HttpServletRequest 类有 setAttribute() 方法,而没有setParameter() 方法
一般通过表单和链接传递的参数使用getParameter

getRequestDispatcher()包含两个重要方法,分别是请求转发和请求包含。一个请求跨多个Servlet时,需要使用请求转发和请求包含。

首先需要获得一个RequestDispatcher 对象:RequestDispatcher rd = request.getRequestDispatcher("/MyServlet");

请求转发: rd.forward( request , response );
请求包含: rd.include( request , response);
需注意的是,无论是请求转发还是请求包含,都在一个请求范围内!使用同一个request和response!

这里用到了forward()

response.sendRedirect()与request.getRequestDispatcher().forward(request,response)
两者都可以使页面跳转

response.sendRedirect(url)-----是在客户端跳转
request.getRequestDispatcher(url).forward(request,response) -----是在服务器端跳转
response.sendRedirect(url)跳转到指定的URL地址后,上个页面(跳转之前的原来页面)中的请求全部结束,原request对象将会消亡,数据将会消失。紧接着,当前新页面会新建request对象,即产生新的request对象。

使用response.sendRedirect()地址栏中的网址将改变
使用request.getRequestDispatcher().forward(request,response)地址栏中的网址保持不变。

import java.io.IOException;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "loginServlet" ,urlPatterns = "/login.htm")
public class LoginServlet extends HttpServlet{
	private static final long serialVersionUID=1L;
	public void doGet(HttpServletRequest request,HttpServletResponse response)
			throws IOException,ServletException{
				doPost(request, response);
			}
			public void doPost(HttpServletRequest request,HttpServletResponse response)
			throws IOException,ServletException{
				String userName=request.getParameter("username");
				String password=request.getParameter("password");
				if(checkLogin(userName, password)) request.getRequestDispatcher("/member.htm").forward(request, response);
				else response.sendRedirect("login.jsp");		
			}
			public boolean checkLogin(String username,String password) {
				User user=User.getInstance();
				Map<String, String> map=user.getUserMap();
				if(username!=null&&!username.equals("")&&password!=null&&!password.equals("")&&map.containsKey(username)) {
					String []arr=map.get(username).split("##");
					if(arr[0].equals(password)) {
						return true;
					}else {
						return false;
					}
				}else {
					return false;
				}
			}
}

注册部分

再注册过程中,如果出现注册行为不规范,将会将错误记录到list中,在注册失败界面遍历显示。

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name="registeServlet",urlPatterns = {"/register.htm"})
public class RegisterServlet extends HttpServlet {
	private static final long serialVersionUID=1L;
	public void doGet(HttpServletRequest request,HttpServletResponse response)
	throws IOException,ServletException{
		doPost(request, response);
	}
public void doPost(HttpServletRequest request,HttpServletResponse response) 
throws IOException,ServletException{
	String username=request.getParameter("username");
	String password=request.getParameter("password");
	String confirdpassword=request.getParameter("confirdpassword");
	String email=request.getParameter("email");
	List<String> errors=new ArrayList<String>();
	if(!isValidUserName(username))errors.add("用户名为空或者已经存在");
	if(!isValidPassWord(password, confirdpassword))errors.add("密码为空或者密码不一致");
	if(errors.isEmpty()) {
		User user=User.getInstance();
		Map<String, String> map=user.getUserMap();
		map.put(username, password+"##"+email);
		request.getRequestDispatcher("/success.htm").forward(request, response);
	}else {
		request.setAttribute("errors", errors);
		request.getRequestDispatcher("/error.htm").forward(request, response);
	}
}
public boolean isValidUserName(String userName) {
	User user =User.getInstance();
	Map<String, String> map=user.getUserMap();
		if(userName==null||userName.equals(""))return false;
		else return !map.containsKey(userName);
}
public boolean isValidPassWord(String password,String confirdpassword) {
if(password==null||password.equals("")||confirdpassword==null||confirdpassword.equals("")) {
	return false;
}else {
	return password.equals(confirdpassword);
}
}
}

注册成功部分

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name="successServlet",urlPatterns = {"/success.htm"})
public class SuccessServlet extends HttpServlet{
	private static final long serialVersionUID=1L;
	public void doGet(HttpServletRequest request,HttpServletResponse response)
			throws IOException,ServletException{
				doPost(request, response);
			}
			public void doPost(HttpServletRequest request,HttpServletResponse response)
			throws IOException,ServletException{
				response.setContentType("text/html;charset=UTF-8");
				PrintWriter out=response.getWriter();
				out.println("<!DOCTYPE HTML>");
				out.println("<HTML>");
				out.println("<HEAD><TITLE>新增会员成功</TITLE></HEAD>");
				out.println("<BODY>");
				out.println("<h2>会员,"+request.getParameter("username")+"注册成功</h2>");
				List<String> list=(List<String>) request.getAttribute("errors");
				out.println("<a href=\""+request.getContextPath()+"/login.jsp\">返回首页登录</a>");
				out.println("</BODY>");
				out.println("</HTML>");
				out.flush();
				out.close();
			}
}

注册失败部分

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name="errorServlet",urlPatterns = {"/error.htm"})
public class ErrorServlet extends HttpServlet{
	private static final long serialVersionUID=1L;
	public void doGet(HttpServletRequest request,HttpServletResponse response)
	throws IOException,ServletException{
		doPost(request, response);
	}
	public void doPost(HttpServletRequest request,HttpServletResponse response)
	throws IOException,ServletException{
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out=response.getWriter();
		out.println("<!DOCTYPE HTML>");
		out.println("<HTML>");
		out.println("<HEAD><TITLE>新增会员失败</TITLE></HEAD>");
		out.println("<BODY>");
		out.println("<h2>新增会员失败</h2>");
		List<String> list= (List<String>) request.getAttribute("errors");
		for (String string : list) {
			out.println(string+"<br>");
		}
		out.println("<a href=\""+request.getContextPath()+"/register.jsp\">返回注册首页</a>");
		out.println("</BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();
	}
}

登录成功部分

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "memberServlet" ,urlPatterns = "/member.htm")
public class MemberServlet extends HttpServlet{
	private static final long serialVersionUID=1L;
	public void doGet(HttpServletRequest request,HttpServletResponse response)
	throws IOException,ServletException{
		doPost(request, response);
	}
	public void doPost(HttpServletRequest request,HttpServletResponse response)
	throws IOException,ServletException{
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out=response.getWriter();
		out.println("<!DOCTYPE HTML>");
		out.println("<HTML>");
		out.println("<HEAD><TITLE>会员登录成功</TITLE></HEAD>");
		out.println("<BODY>");
		out.println("<h2>会员,"+request.getParameter("username")+"你好</h2>");
		out.println("<a href=\""+request.getContextPath()+"/logout.jsp\">退出登录</a>");
		out.println("</BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();
	}
}

User

此处User采用单例模式

可以参考 Java单例模式(类和对象)_无忧#的博客-CSDN博客_java 单例对象
import java.util.HashMap;
import java.util.Map;

public class User {
public Map<String, String> usermap=new HashMap<String, String>();
private static User user=null;

private User() {
	usermap.put("zyy", "123##[email protected]");
	usermap.put("wrr", "123##[email protected]");
}
public static User getInstance() {
	if(user==null) {
		user=new User();
	}
	return user;
}
public Map<String, String> getUserMap(){
	return usermap;
}
}

尝试运行

将java代码放到java目录下,jsp代码放到webapp下。

将全部代码复制后运行login.jsp。

猜你喜欢

转载自blog.csdn.net/weixin_52473454/article/details/124415558