JavaWeb实现基础登陆注册(二)-RequestDispatcher&&sendRedirect()实现重定向

实验任务
Weibo系统的注册和登陆已经有了V1版本,现在在此基础之上,迭代开发,

使用forward()实现:先LoginServlet进行登陆判断,如果用户名和密码正确,转到另一个MemberServlet实现登陆成功页面显示(因为登陆成功,需要把参数给携带过去,以便进行页面显示用户名);如果登陆失败,Redirect()回登陆页面index.html。(登陆失败,不需要携带参数)。

使用forward()实现:先RegisterServlet进行注册,如果注册成功,转到另一个SuccessServlet实现注册成功页面显示;注册失败,转到另一个ErrorServlet实现注册失败页面。

RequestDispatcher的使用:
利用RequestDispatcher对象可以将请求转发给其他的Servlet或JSP页面
RequestDispatcher rd = request.getRequestDispatcher(“path”);
rd.forward(request,response);
e.g.
RequestDispatcher rd = request.getRequestDispatcher("/Member");
rd.forward(request, response);
sendRedirect()的使用:
HttpServletResponse的sendRedirect()要求浏览器重新请求另一个URL,又称重定向(Redirect)
response.sendRedirect(url);
e.g.
response.sendRedirect(“http://localhost:8080/WeiboSystem/index.html”);

实验步骤:
创建view包,新建三个Servlet,它们的功能是专门绘制页面:注册失败(Error)、登陆成功(Member)、注册成功(Success)这三个页面。src目录结构如下图所示:
在这里插入图片描述
修改Login:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		//把users从servletcontext中取出来
		ServletContext context = this.getServletContext();
		HashMap<String,String> users = (HashMap)context.getAttribute("data");
		//进行判断users中是否存在匹配的username和password
		//如果存在,绘制成功界面
		if(users.get(username).equals(password)){
		//如果存在匹配的讲servlet转向MemberServlet
			RequestDispatcher rd = request.getRequestDispatcher("/Member");
			rd.forward(request, response);
		}else{
		//如果不存在那么重定向为index.html界面
			**response.sendRedirect("http://localhost:8080/WeiboSystem/index.html");**
		}
	}

修改Register:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String email = request.getParameter("email");
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		String confirmedPasswd = request.getParameter("confirmedPasswd");
		//数据存放在users中
		HashMap<String,String> users = new HashMap<>();
		users.put(username, password);
		//把users存放在ServletContext中,为以后其他的Servlet共享
		ServletContext context = this.getServletContext();
		context.setAttribute("data", users);
		//判断两次密码是否相等
		if(password.equals(confirmedPasswd)) {
		//servletRegister将请求发给servletSuccess
		RequestDispatcher rd = context.getRequestDispatcher("/Success");
		rd.forward(request, response);
		}else {
			RequestDispatcher rd = context.getRequestDispatcher("/Error");
			rd.forward(request, response);
		}
	}

Success:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//绘制注册成功界面
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Translation//EN'>");
out.println("<html>");
out.println("<head>");
out.println("<meta content='text/html;charset=UTF-8' http-equiv='content-type'>");
out.println("<title>会员注册成功</ title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>会员"+request.getParameter("username")+"注册成功</h1>");
out.println("<a href='index.html'>回首页登陆</ a>");
out.println("</body>");
out.println("</html>");
out.close();
	}

Error:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'");
		out.println("<html>");
		out.println("<head>");
		out.println("<meta content='text/html; charset=UTF-8' http-equiv='content-type'>");
		out.println("<title>会员注册失败</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<h1>对不起您注册失败</h1>");
		out.println("</body>");
		out.println("</html>");
		out.close();
	}

Member:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'");
		out.println("<html>");
		out.println("<head>");
		out.println("<meta content='text/html; charset=UTF-8' http-equiv='content-type'>");
		out.println("<title>会员登入成功</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<h1>会员"+ request.getParameter("username") + "你好</h1>");
		out.println("<a href='index.html'>回首页登入</a>");
		out.println("</body>");
		out.println("</html>");
		out.close();
	}

web.xml:

<servlet>
	<servlet-name>Register</ servlet-name>
	<servlet-class>controller.Register</ servlet-class>
</servlet>
<servlet>
	<servlet-name>Login</ servlet-name>
	<servlet-class>controller.Login</ servlet-class>
</servlet>
<servlet>
	<servlet-name>Success</servlet-name>
	<servlet-class>view.Success</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>Register</servlet-name>
	<url-pattern>/register.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
	<servlet-name>Login</servlet-name>
	<url-pattern>/login.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
	<servlet-name>Success</servlet-name>
	<url-pattern>/success.view</url-pattern>
</servlet-mapping>
### 回答1: 要实现简易的注册登录功能,需要以下步骤: 1. 创建一个数据库,包含用户表,其中包括用户名和密码字段。 2. 在Java中创建一个Web应用程序,并使用JDBC连接到MySQL数据库。 3. 创建注册页面和登录页面,分别包括用户名和密码输入框以及提交按钮。 4. 在注册页面中,将用户输入的用户名和密码插入到MySQL数据库中。可以使用PreparedStatement对象来执行插入操作。 5. 在登录页面中,将用户输入的用户名和密码与数据库中的记录进行比较。如果用户名和密码匹配,则将用户重定向到主页或其他受保护的页面。 下面是一个简单的示例代码来实现这个功能: 1. 创建一个名为“users”的表,其中包含“username”和“password”字段。 ``` CREATE TABLE users ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, username VARCHAR(30) NOT NULL, password VARCHAR(30) NOT NULL ); ``` 2. 在Java中连接到MySQL数据库,可以使用以下代码: ``` String url = "jdbc:mysql://localhost:3306/mydatabase"; String user = "root"; String password = "mypassword"; Connection conn = DriverManager.getConnection(url, user, password); ``` 3. 创建注册页面和登录页面,可以使用HTML和JSP来实现。 4. 在注册页面中,将用户输入的用户名和密码插入到MySQL数据库中。可以使用以下代码: ``` String username = request.getParameter("username"); String password = request.getParameter("password"); PreparedStatement stmt = conn.prepareStatement("INSERT INTO users (username, password) VALUES (?, ?)"); stmt.setString(1, username); stmt.setString(2, password); stmt.executeUpdate(); ``` 5. 在登录页面中,将用户输入的用户名和密码与数据库中的记录进行比较。如果用户名和密码匹配,则将用户重定向到主页或其他受保护的页面。可以使用以下代码: ``` String username = request.getParameter("username"); String password = request.getParameter("password"); PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users WHERE username=? AND password=?"); stmt.setString(1, username); stmt.setString(2, password); ResultSet rs = stmt.executeQuery(); if (rs.next()) { // 登录成功,将用户重定向到主页或其他受保护的页面 response.sendRedirect("home.jsp"); } else { // 登录失败,显示错误消息 request.setAttribute("errorMessage", "Incorrect username or password."); RequestDispatcher dispatcher = request.getRequestDispatcher("login.jsp"); dispatcher.forward(request, response); } ``` ### 回答2: 实现简易的注册登录功能,我们可以使用JavaWeb和MySQL来完成。 首先,我们需要创建一个数据库,并创建两张表:用户表和登录表。用户表用于存储用户的基本信息,包括用户名、密码、电子邮箱等字段;登录表用于存储用户的登录记录,包括用户名、登录时间等字段。 接下来,我们可以使用JavaWeb实现注册和登录的功能。对于注册功能,用户输入用户名、密码、电子邮箱等信息,然后将这些信息插入到用户表中即可。在插入前,需要先判断用户名是否已经存在,如果存在则提示用户重新选择用户名;如果不存在,则将用户信息插入到用户表中。 对于登录功能,用户输入用户名和密码,然后根据输入的用户名在用户表中查找对应的记录。如果用户名不存在,则提示用户重新输入;如果存在该用户名,则判断密码是否匹配,如果匹配则登录成功,否则提示用户密码错误。 在实现过程中,我们可以使用JDBC来连接Java和MySQL数据库,使用SQL语句来操作数据库表。可以使用PreparedStatement来预编译SQL语句,以提高执行效率和防止SQL注入攻击。可以使用Cookie来记录用户登录状态,实现自动登录功能。 总之,通过JavaWeb和MySQL的结合,我们可以实现简易的注册登录功能,提供用户注册和登录的基本操作,以满足基本的用户认证需求。 ### 回答3: 要实现简易的注册登录功能,可以使用JavaWeb和MySQL进行开发。 首先,在MySQL数据库中创建一个用户表,表中包含用户名和密码两个字段。可以使用以下SQL语句创建表: ```sql CREATE TABLE user( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL, password VARCHAR(50) NOT NULL ); ``` 接下来,在JavaWeb中,通过编写Java代码实现注册和登录的功能。可以使用JDBC连接MySQL数据库,实现与数据库的交互。 对于注册功能,用户在注册页面中输入用户名和密码,通过Java代码将用户输入的数据插入到MySQL数据库的用户表中。可以使用以下代码示例: ```java import java.sql.*; public class Register { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/db_name"; // 数据库连接地址 String username = "root"; // 数据库用户名 String password = "password"; // 数据库密码 Connection conn = null; PreparedStatement stmt = null; try { Class.forName("com.mysql.cj.jdbc.Driver"); // 加载MySQL驱动程序 conn = DriverManager.getConnection(url, username, password); // 建立数据库连接 String sql = "INSERT INTO user (username, password) VALUES (?, ?)"; // SQL插入语句 stmt = conn.prepareStatement(sql); // 创建PreparedStatement对象 String newUsername = "newUser"; // 用户输入的用户名 String newPassword = "newPassword"; // 用户输入的密码 stmt.setString(1, newUsername); // 设置用户名参数 stmt.setString(2, newPassword); // 设置密码参数 int rows = stmt.executeUpdate(); // 执行插入操作 if (rows > 0) { System.out.println("注册成功"); } else { System.out.println("注册失败"); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (stmt != null) stmt.close(); if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } ``` 对于登录功能,用户在登录页面中输入用户名和密码,通过Java代码查询数据库中是否存在与用户输入匹配的用户记录。可以使用以下代码示例: ```java import java.sql.*; public class Login { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/db_name"; // 数据库连接地址 String username = "root"; // 数据库用户名 String password = "password"; // 数据库密码 Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { Class.forName("com.mysql.cj.jdbc.Driver"); // 加载MySQL驱动程序 conn = DriverManager.getConnection(url, username, password); // 建立数据库连接 String sql = "SELECT * FROM user WHERE username = ? AND password = ?"; // SQL查询语句 stmt = conn.prepareStatement(sql); // 创建PreparedStatement对象 String inputUsername = "inputUser"; // 用户输入的用户名 String inputPassword = "inputPassword"; // 用户输入的密码 stmt.setString(1, inputUsername); // 设置用户名参数 stmt.setString(2, inputPassword); // 设置密码参数 rs = stmt.executeQuery(); // 执行查询操作 if (rs.next()) { System.out.println("登录成功"); } else { System.out.println("登录失败"); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } ``` 通过以上代码可以实现简易的注册登录功能,用户可以在注册页面中输入用户名和密码进行注册,然后在登录页面中输入对应的用户名和密码来进行登录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值