JavaWeb_使用Servlet + HttpSession实现简单用户登陆


学习Servlet之后,觉得HttpSession的作用还是比较大的,可以通过HttpSession机制往页面传值,以下是一个简单的例子

1.新建登陆页


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登陆页</title>
</head>
<body>

<center>

   <div style="margin-top:100px">
   <h2>请登陆</h2>
      <form action="login.do" method="post">
           <input type="text" name="username" id="username"/><br>
           <input type="password" name="pwd" id="pwd"/><br>
           <input type="submit" value="登陆"/>
          
      
      </form>
   
   </div>

</center>
</body>
</html>


2.登陆成功后跳转至首页

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>欢迎页</title>
</head>
<body>
<h1>登陆成功,当前用户:${userName}</h1>
<h2>登陆时间:${logindate }</h2>
</body>
</html>


3.登陆失败信息提示页面,可以通过超链接跳转至登陆页

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
 <p>${msg }</p><br>
 <a href="../pages/login.jsp"><p>点此重新登陆</p></a>
 
</body>
</html>


4.创建用户模型

package com.evian.model;

public class User {
	
	private String uname;
	private String password;
	private String sex;

	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}


	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public User(String uname, String password, String sex) {
		super();
		this.uname = uname;
		this.password = password;
		this.sex = sex;
		
	}
	public User() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	
	

}

5.用户Service,我只是做个小例子,所以没有链接数据库,只是通过Java数组存储几个用户

package com.evian.util;

import com.evian.model.User;

public class UserService {

	User user1 = new User("张三", "123123", "男");
	User user2 = new User("李白", "110110", "女");
	User user3 = new User("王名", "123456", "男");
	User[] users = { user1, user2, user3 }; //创建数组用于保存user
    
	/**
	 * 根据用户名匹配user对象并返回给servlet
	 * @param username
	 * @return
	 */
	public User userlogin(String username) {
		User u = null;
		for (User user : users) {
			if (username.equals(user.getUname())) {
				u = user;
			}
		}
		return u;
	}

}
6.登陆Action

package com.evian.controller;


import java.io.IOException;
import java.util.Date;


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.evian.model.User;
import com.evian.util.UserService;


@SuppressWarnings("serial")
@WebServlet("/UserServlet")
public class UserServlet extends HttpServlet {


	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");// 设置请求信息字符编码
		response.setCharacterEncoding("utf-8");// 设置响应信息字符编码
		String userName = request.getParameter("username");// 获取登陆页用户名信息
		String password = request.getParameter("pwd");// 获取登陆页用户密码信息
		UserService us = new UserService();
		User user = us.userlogin(userName);// 调用UserService方法,返回用户名等于登陆页用户名的User对象
		HttpSession session = request.getSession();// 创建Session对象


		/**
		 * 判断密码是否正确
		 */
		if (user != null) {


			if (user.getPassword().equals(password)) {


				session.setAttribute("userName", userName);
				session.setAttribute("logindate", new Date());
				response.sendRedirect("/TestSession/pages/index.jsp");// 密码正确跳转至index页面
			} else {
				session.setAttribute("msg", "密码错误");
				response.sendRedirect("/TestSession/pages/error.jsp");// 密码错误停留在login页面
			}
		} else {
			session.setAttribute("msg", "用户名不存在");
			response.sendRedirect("/TestSession/pages/error.jsp");// 用户名错误停留在login页面
		}
	}


}
7.web.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
id="WebApp_ID" version="3.0">
  <display-name>TestSession</display-name>
  <welcome-file-list>
    <welcome-file>/pages/login.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>userLogin</servlet-name>
    <servlet-class>com.evian.controller.UserServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>userLogin</servlet-name>
    <url-pattern>/login.do</url-pattern>
  </servlet-mapping>
</web-app>

8.运行效果图

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现登录的servlet一般需要处理用户提交的表单数据并验证用户身份,下面是一个简单的Java Web实现登录的servlet的示例代码: ```java import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String username = request.getParameter("username"); String password = request.getParameter("password"); if(username != null && username.trim().length() > 0 && password != null && password.trim().length() > 0) { if(username.equals("admin") && password.equals("admin123")) { HttpSession session = request.getSession(); session.setAttribute("username", username); response.sendRedirect("welcome.jsp"); } else { out.println("<script>alert('用户名或密码错误,请重新输入!');history.back();</script>"); } } else { out.println("<script>alert('请输入用户名和密码!');history.back();</script>"); } } } ``` 在上面的示例代码中,`doPost` 方法处理 POST 请求,首先获取用户提交的表单数据(用户名和密码),然后进行身份验证,如果用户名和密码都正确,则将用户名存储到会话中,并重定向到欢迎页面(`welcome.jsp`);如果用户名或密码不正确,则显示错误提示并返回到登录页面。如果用户名或密码为空,则也显示错误提示并返回到登录页面。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值