实验六 登录与注册(Servlet)
目 录
1.基本要求1-4 在前面实验都已实现,基本要求1查看实验五的基本要求1(点击跳转查看),基本要求2-4查看实验三的基本要求1、基本要求2、基本要求3,这里不再一一展示。
2.基本要求5 新建注册处理Servlet:treatZhuCe.java,右击项目,选择new,点击Servlet
3.基本要求6:新建注册处理Servlet:treatDengLu.java,创建方式与treatZhuCe.java相同。
一、实验目的
-
熟练掌握Servlet的编写和配置;
-
理解Servlet在MVC框架中所处的位置和作用。
二、实验要求
基本要求:
- 编写一个UserBean类,要求该类具有两个属性name和password,并给出两个属性对应的getter和setter方法。
- 编写主页面index.jsp,该页面提供两个超链接,分别链接到注册页面和登录页面;
- 编写一个注册页面zhuce.jsp,包括:用户名,密码,密码确认以及确认和重设按钮;
- 编写一个登录页面denglu.jsp,包括:用户名,密码以及确认和重设按钮;
- 注册处理Servlet:treatZhuCe.java。该Servlet判断用户名和密码是否为空、密码和密码确认是否相同。如果用户名和密码不为空且密码和密码确认相同,则认为注册成功,并将用户的姓名和密码生成UserBean类型对象存入application中。否则认为注册失败。处理结果交给zhuCeResult.jsp显示。
6.登录处理Servlet:treatDengLu.java。该Servlet判断判断用户名和密码是否为空,若不为空,则判断用户名和密码是否为application对象中的键值对。如果用户名和密码是application对象中的键值对,则认为登录成功,生成UserBean对象user,在session对象以“user”的名字存入。其它情况均认为登录失败。处理结果交给dengLuResult.jsp显示。
三、实验步骤
1.基本要求1-4 在前面实验都已实现,基本要求1查看实验五的基本要求1(点击跳转查看),基本要求2-4查看实验三的基本要求1、基本要求2、基本要求3,这里不再一一展示。
小tips:请把name改为username,PassWord改为password,PassCode改为confirmPassword不会报错,懂的都懂哈。
2.基本要求5 新建注册处理Servlet:treatZhuCe.java,右击项目,选择new,点击Servlet
填写相应的包名和类名,实验要求创建treatZhuCe.java,点击next。图中编译器出现了警告是因为一般类名首字母要大写,这里因实验要求忽略这里的警告。
这里注意这个URL mappings是Servlet指向的映射路径,点击next
选择service方法,因为service方法可以响应客户端所有请求,默认勾选doPost()方法和doGet()方法,点击finish。
treatZhuCe.java代码如下:
package com.helloworld.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.helloworld.bean.UserBean;
@WebServlet(name = "TreatZhuCe", urlPatterns = { "/treatZhuCe" })
public class treatZhuCe extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取用户输入的用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");
String confirmPassword = request.getParameter("confirmPassword");
// 检查用户名和密码是否为空
if (username != null && !username.isEmpty() && password != null && !password.isEmpty()) {
// 检查密码和确认密码是否相同
if (password.equals(confirmPassword)) {
// 注册成功,创建UserBean对象
UserBean user = new UserBean(username, password);
// 将UserBean对象存入application中
getServletContext().setAttribute("user", user);
// 设置注册成功的标志
request.setAttribute("registrationSuccess", true);
} else {
// 密码和确认密码不相同,注册失败
request.setAttribute("registrationSuccess", false);
}
} else {
// 用户名或密码为空,注册失败
request.setAttribute("registrationSuccess", false);
}
// 转发到zhuCeResult.jsp
request.getRequestDispatcher("/zhuCeResult.jsp").forward(request, response);
}
}
相应的zhuCeResult.jsp修改相关内容
<%@ page contentType="text/html;charset=GBK" language="java" %>
<html>
<head>
<title>注册结果</title>
</head>
<body>
<%
// 获取注册结果标志
Boolean registrationSuccess = (Boolean) request.getAttribute("registrationSuccess");
if (registrationSuccess != null && registrationSuccess) {
// 注册成功
%>
<h2>注册成功</h2>
<%
} else {
// 注册失败
%>
<h2>注册失败</h2>
<p>请确保用户名和密码不为空,并且确认密码与密码相同。</p>
<%
}
%>
</body>
</html>
如果不填写用户名和密码或者密码和确认密码不一致,则输出注册失败,出现如图所示的提示
如正确填写用户名和密码,则输出注册成功如图所示
3.基本要求6:新建注册处理Servlet:treatDengLu.java,创建方式与treatZhuCe.java相同。
(1)登陆处理Servlet:treatDengLu.java 判断用户名和密码是否为空,若不为空,Z则判断用户名和密码是否为application对象中的键值对。用getServletContext获取application对象,代码如下:
if(username == null || password == null || username.isEmpty() || password.isEmpty()) {
response.sendRedirect("dengLuResult.jsp ");
return;
}
javax.servlet.ServletContext application = request.getServletContext();
(2)如果登陆成功,在session对象以“user”的名字存入,调用set方法,代码如下:
if(username.equals(application.getAttribute("username")) && password.equals(application.getAttribute("password"))) {
UserBean user = new UserBean(username, password);
HttpSession session = request.getSession();
session.setAttribute("user", user);
(3)dengLuResult.jsp基本没做改变,还是输出登陆成功和登录失败及登录失败提示。当登陆成功时,调用get方法获取user中存储的值。
UserBean user=(UserBean)session.getAttribute("user");
(4)运行结果
①这里输入前面注册成功的用户名和密码可以登陆成功
②因为存储在application中,登陆成功的输出如下。
③用户名和密码填写不完整,或者密码输入不正确
用户名密码输入不完整
不是前面注册的用户名和密码
用户名和密码要与前面注册的用户名密码相同,这里输出结果如下。
用户名或密码未填写登陆结果
四、实验总结
这个实验并不难,但是做的时候花了很长时间,因为一直出现404错误,说源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。出现是因为URL特别是form表单中action的URL,一直报错,找了很多资料才改好。还有一个错误是URL不支持http的Post方法,这个是因为没有重写Post方法,这两个错误耽误了很久。