javaWeb 比较完整简单的mvc 注册登录Demo

这里选择在f盘建一个xml文件当作数据库.最后再把这个数据库换成真实的mysql







实体类

package cn.itcast.user.domain;

/**
 * 实体类
 * @author Administrator
 *
 */
public class User {
	private String username;
	private String password;
	private String verifyCode;
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getVerifyCode() {
		return verifyCode;
	}
	public void setVerifyCode(String verifyCode) {
		this.verifyCode = verifyCode;
	}
	@Override
	public String toString() {
		return "User [username=" + username + ", password=" + password
				+ ", verifyCode=" + verifyCode + "]";
	}
	public User(String username, String password, String verifyCode) {
		super();
		this.username = username;
		this.password = password;
		this.verifyCode = verifyCode;
	}
	public User() {
		super();
		// TODO Auto-generated constructor stub
	}
	
}

Dao类

package cn.itcast.user.dao;

import java.io.FileOutputStream;
import java.io.OutputStreamWriter;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import cn.itcast.user.domain.User;

/**
 * 数据类
 * 
 * @author Administrator
 *
 */
public class UserDao {
	private String path = "F:/users.xml"; // 依赖数据文件

	/**
	 * 按用户名查询
	 * 
	 * @param username
	 * @return
	 */
	public User findByUsername(String username) {
		/**
		 * 1.得到Document 2.xpath查询 3.校验查寻结果是否为null 如果为null 返回null
		 * 4.不为空就把Element封装到User对象中.
		 */
		// 得到Document
		SAXReader reader = new SAXReader();
		try {
			Document document = reader.read(path);
			// 通过xpath查询的到ELement
			Element element = (Element) document
					.selectSingleNode("//user[@username='" + username + "']");
			// 校验
			if (element == null)
				return null;
			// 把element的数据封装到User对象中
			User user = new User();
			String attrUsername = element.attributeValue("username"); // 获取该元素的名为username的值
			String attrPassword = element.attributeValue("password"); // 获取该元素的名为password的值
			user.setUsername(attrUsername);
			user.setPassword(attrPassword);
			return user;
		} catch (DocumentException e) {
			throw new RuntimeException(e);
		}

	}

	/**
	 * 添加用户
	 * 
	 * @param user
	 */
	public void add(User user) {
		/*
		 * 1.得到Document 2.通过Document得到root元素即<users> 3.使用参数user 转换成Element对象
		 * 4.把Element添加到root元素中 5.保存Document
		 */
		SAXReader reader = new SAXReader();
		try {
			Document document = reader.read(path);
			// 得到根元素
			Element root = document.getRootElement();
			// 通过跟元素创建新元素
			Element userElement = root.addElement("user");
			userElement.addAttribute("username", user.getUsername());
			userElement.addAttribute("password", user.getPassword());

			// 保存文档
			// 创建输出格式化器
			OutputFormat format = new OutputFormat("\t", true); // 缩进使用\t
																// 是否换行ture
			format.setTrimText(true); // 清空原有的换行和缩进
			try {
				// 创建XMLWriter
				XMLWriter writer = new XMLWriter(new OutputStreamWriter(
						new FileOutputStream(path), "utf-8"), format);
				writer.write(document); // 保存document对象
				writer.close();

			} catch (Exception e) {
				throw new RuntimeException();
			}

		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

Dao的测试类

package test.dao;

import org.junit.Test;

import cn.itcast.user.dao.UserDao;
import cn.itcast.user.domain.User;

/**
 * UserDao的测试
 * 
 * @author Administrator
 *
 */
public class UserDaoTest {
	@Test
	public void testFindByUsername() {
		UserDao userDao = new UserDao();
		User user = userDao.findByUsername("赵四");
		System.out.println(user);
	}

	@Test
	public void testAdd() {
		UserDao userDao = new UserDao();
		User user = new User();
		user.setUsername("王五");
		user.setPassword("wangwu");
		userDao.add(user);
	}
}

Service类

1.自定义User的异常类

package cn.itcast.user.service;

/**
 * 自定义一个异常类 只是给出父类的构造器即可 方便用来创建对象
 * Alt+Shift+S 然后superClass 再把跟1.7相关的异常类删掉
 * @author Administrator
 *
 */
public class UserException extends Exception {

	public UserException() {
		super();
		// TODO Auto-generated constructor stub
	}

	/*这个删掉
	 * public UserException(String message, Throwable cause,
			boolean enableSuppression, boolean writableStackTrace) {
		super(message, cause, enableSuppression, writableStackTrace);
		// TODO Auto-generated constructor stub
	}*/

	public UserException(String message, Throwable cause) {
		super(message, cause);
		// TODO Auto-generated constructor stub
	}

	public UserException(String message) {
		super(message);
		// TODO Auto-generated constructor stub
	}

	public UserException(Throwable cause) {
		super(cause);
		// TODO Auto-generated constructor stub
	}
	
}

2.

package cn.itcast.user.service;

import static org.hamcrest.CoreMatchers.nullValue;

import javax.enterprise.inject.New;

import cn.itcast.user.dao.UserDao;
import cn.itcast.user.domain.User;

/**
 * User的业务逻辑层
 * @author Administrator
 *
 */
public class UserService {
	private UserDao  userDao = new UserDao();
	
	/**
	 * 注册功能
	 * @param user
	 * @throws UserException
	 */
	public void regist(User user) throws UserException {
		/*
		 * 使用用户名去查询 如果返回null 完成添加
		 * 如果返回的不是null 抛出异常
		 */
		User _user = userDao.findByUsername(user.getUsername());
		if(_user!=null) throw new UserException("用户名"+ user.getUsername() +",已被注册!");
		
		userDao.add(user);
	
	}

	/**
	 * @param user
	 * @throws UserException 
	 * 
	 */
	public User login(User form) throws UserException{
		/*
		 * 使用form中的username进行查询 得到User user
		 */
		User user = userDao.findByUsername(form.getUsername());
		//如果返回null 说明用户名不存在 抛出异常 异常信息为"用户名不存在"
		if(user == null)throw new UserException("用户名不存在!");
		
		//比较user的password和form的password 如果不同 跑出异常 异常信息为"密码错误"
		if(!form.getPassword().equals(user.getPassword())){
			throw new UserException("密码错误!");
		}
		//返回数据库中查询出来的user 而不是form 因为form只有用户名密码 而user有全部信息
		return user;
	}
}

然后是Servlet类

1.VerifyCodeServlet

package cn.itcast.user.web.servlet;

import java.awt.image.BufferedImage;
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 cn.itcast.vcode.utils.VerifyCode;

@WebServlet("/VerifyCodeServlet")
public class VerifyCodeServlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		/*
		 * 1.创建验证码类
		 */
		VerifyCode vc = new VerifyCode();
		//得到验证码图片
		BufferedImage image = vc.getImage();
		//把图片上的文本保存到session中
		request.getSession().setAttribute("session_vcode",vc.getText());
		//把图片响应给客户端
		VerifyCode.output(image, response.getOutputStream());
	}

}

2.RegistServlet

package cn.itcast.user.web.servlet;

import static org.hamcrest.CoreMatchers.nullValue;

import java.io.IOException;
import java.util.HashMap;
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;

import cn.itcast.commons.CommonUtils;
import cn.itcast.user.domain.User;
import cn.itcast.user.service.UserException;
import cn.itcast.user.service.UserService;

@WebServlet("/RegistServlet")
public class RegistServlet extends HttpServlet {

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");

		// 依赖USerService
		UserService userService = new UserService();
		/*
		 * 1封装表单数据(封装到User对象中)
		 */
		User form = CommonUtils.toBean(request.getParameterMap(), User.class);

		// 用来装载所有错误信息
		Map<String, String> errors = new HashMap<String, String>();
		
		// 用户名校验
		String username = form.getUsername(); // 获取表单的username
		if (username == null || username.trim().isEmpty()) {
			errors.put("username", "用户名不能为空");
		} else if (username.length() < 3 || username.length() > 15) {
			errors.put("username", "用户名长度必须在3-15之间!");
		}
		// 密码校验
		String password = form.getUsername(); // 获取表单的username
		if (password == null || password.trim().isEmpty()) {
			errors.put("password", "密码不能为空");
		} else if (password.length() < 3 || password.length() > 15) {
			errors.put("password", "密码长度必须在3-15之间!");
		}
		
		//验证码校验
		String sessionVerifyCode = (String) request.getSession()
				.getAttribute("session_vcode");
		String verifyCode = form.getVerifyCode();
		if (verifyCode == null || verifyCode.trim().isEmpty()) {
			errors.put("verifyCode", "验证码不能为空");
		} else if (verifyCode.length()!=4) {
			errors.put("verifyCode", "验证码长度必须为4位");
		}else if (!verifyCode.equalsIgnoreCase(sessionVerifyCode)) {
			errors.put("verifyCode", "验证码错误");
		}
		/*
		 * 判断map是否为空 不为空 则存在错误信息
		 */
		if(errors != null && errors.size()>0){
			/*
			 * 保存errors到request域
			 * 保存form到request域 为了回显
			 * 转发到regist.jsp
			 */
			request.setAttribute("errors", errors);
			request.setAttribute("user", form);
			request.getRequestDispatcher("/user/regist.jsp").forward(request, response);
			return;
		}
		
		/*
		 * 新增功能:检验验证码 1.用户填写的验证码已经封装到user中 2.从session获取真正的验证码 3.对比 不同的话保存错误信息
		 * 保存表数据 转发到regist.jsp 4 相同就向下执行
		 */
		/*String sessionVerifyCode = (String) request.getSession()
				.getAttribute("session_vcode");
		if (!sessionVerifyCode.equalsIgnoreCase(form.getVerifyCode())) {
			request.setAttribute("msg", "验证码错误");
			request.setAttribute("user", form);
			request.getRequestDispatcher("/user/regist.jsp").forward(request,
					response);
			return;
		}*/

		/*
		 * 2.调用userService的regist()方法 传递form过去 3.得到异常:获取异常信息.保存到request域
		 * 转发到regist.jsp显示 4.没有异常,输出注册成功
		 */
		try {
			userService.regist(form);
			response.getWriter()
					.print("<h1>注册成功!</h1><a href='" + request.getContextPath()
							+ "/user/login.jsp" + "'>点击这里到登录界面</a>");
		} catch (UserException e) {
			// 获取异常信息,保存到request域
			request.setAttribute("msg", e.getMessage());
			// 注册失败的时候保存表单数据到request域里
			request.setAttribute("user", form);
			// 转发到regist.jsp
			request.getRequestDispatcher("/user/regist.jsp").forward(request,
					response);
		}
	}

}

3.LoginServlet

package cn.itcast.user.web.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 cn.itcast.commons.CommonUtils;
import cn.itcast.user.domain.User;
import cn.itcast.user.service.UserException;
import cn.itcast.user.service.UserService;

/**
 * UserServlet层
 * 
 * @author Administrator
 *
 */
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");	//请求编码
		response.setContentType("text/html;charset=utf-8");	//响应编码
		
		//依赖USerService
		UserService userService = new UserService();
		
		/*
		 * 邓庄表单数据到User form中
		 * 调用service的login()方法 得到返回的User user对象
		 * 如果跑出异常 获取异常信息 保存到request域中 再保存form 转发到login.jsp
		 * 如果没有异常 保存返回值到session中 重定向到welcome.jsp
		 */
		User form = CommonUtils.toBean(request.getParameterMap(), User.class);
		try {
			User user = userService.login(form);
			request.getSession().setAttribute("sessionUser", user);
			response.sendRedirect(request.getContextPath() + "/user/welcome.jsp");
		} catch (UserException e) {
			request.setAttribute("msg", e.getMessage());
			request.setAttribute("user", form);
			request.getRequestDispatcher("/user/login.jsp").forward(request, response);
			
		} 
						
	}

}

最后是界面层

1.regist.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'regist.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
<script type="text/javascript">
	function _change(){
		//获取img元素
		var ele = document.getElementById("vCode");
		ele.src = "<c:url value='/VerifyCodeServlet'/>?xxx="+ new Date().getTime();
	}
</script>
  </head>
  
  <body>
   <h1>注册</h1>
   <p style="color:red; font-weight: 900">${msg}</p>
   
   <!-- ${pageContext.request.contextPath}/RegistServlet -->
   <form action="<c:url value='/RegistServlet'/>" method="post">
   	用户名:<input type="text" name="username" value="${user.username }"/>${errors.username }<br/>
   	密    码:<input type="password" name="password" value="${user.password}"/>${errors.password }<br/>
   	验证码:<input type="text" name="verifyCode" value="${user.verifyCode }" size="3"/>
   		<img id="vCode" src="<c:url value='/VerifyCodeServlet' />" border="2px" />
   		<a href="javascript:_change()">换一张</a>${errors.verifyCode}<br/>
   	<input type="submit" value="注册" />
   </form>
  </body>
</html>

2.login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@	taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'login.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
   <h1>登录</h1>
   <p style="color:red; font-weight: 900">${msg}</p>
   
   <!-- ${pageContext.request.contextPath}/RegistServlet -->
   <form action="<c:url value='/LoginServlet'/>" method="post">
   	用户名:<input type="text" name="username" value="${user.username }"/><br/>
   	密    码:<input type="password" name="password" value="${user.password}"/><br/>

   	<input type="submit" value="登录" />
   </form>
  </body>
</html>

3.welcome.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'welcome.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
   <h1>欢迎登录本系统</h1>
   <c:choose>
   	<c:when test="${empty sessionScope.sessionUser }">滚!</c:when>
   	<c:otherwise>
   		${sessionScope.sessionUser }
   	</c:otherwise>
   </c:choose>
  </body>
</html>

源码下载

所需jar包下载


利用sql数据库

修改dao层,

1.把上一步写的UserDao改名成UserDaoImpl

2.建立UserDao接口 

package cn.itcast.user.dao;

import cn.itcast.user.domain.User;


/**
 * UserDao接口 
 * @author 10958
 *
 */
public interface UserDao {
	public void add(User user) ;
	public User findByUsername(String username);
}

package cn.itcast.user.dao;

import java.io.FileOutputStream;
import java.io.OutputStreamWriter;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import cn.itcast.user.domain.User;

/**
 * 数据类
 * 持久层 
 * 用来访问xml文件
 * @author Administrator
 *
 */
public class UserDaoImpl implements UserDao{
	private String path = "F:/users.xml"; // 依赖数据文件

	/**
	 * 按用户名查询
	 * 
	 * @param username
	 * @return
	 */
	public User findByUsername(String username) {
		/**
		 * 1.得到Document 2.xpath查询 3.校验查寻结果是否为null 如果为null 返回null
		 * 4.不为空就把Element封装到User对象中.
		 */
		// 得到Document
		SAXReader reader = new SAXReader();
		try {
			Document document = reader.read(path);
			// 通过xpath查询的到ELement
			Element element = (Element) document
					.selectSingleNode("//user[@username='" + username + "']");
			// 校验
			if (element == null)
				return null;
			// 把element的数据封装到User对象中
			User user = new User();
			String attrUsername = element.attributeValue("username"); // 获取该元素的名为username的值
			String attrPassword = element.attributeValue("password"); // 获取该元素的名为password的值
			user.setUsername(attrUsername);
			user.setPassword(attrPassword);
			return user;
		} catch (DocumentException e) {
			throw new RuntimeException(e);
		}

	}

	/**
	 * 添加用户
	 * 
	 * @param user
	 */
	public void add(User user) {
		/*
		 * 1.得到Document 2.通过Document得到root元素即<users> 3.使用参数user 转换成Element对象
		 * 4.把Element添加到root元素中 5.保存Document
		 */
		SAXReader reader = new SAXReader();
		try {
			Document document = reader.read(path);
			// 得到根元素
			Element root = document.getRootElement();
			// 通过跟元素创建新元素
			Element userElement = root.addElement("user");
			userElement.addAttribute("username", user.getUsername());
			userElement.addAttribute("password", user.getPassword());

			// 保存文档
			// 创建输出格式化器
			OutputFormat format = new OutputFormat("\t", true); // 缩进使用\t
																// 是否换行ture
			format.setTrimText(true); // 清空原有的换行和缩进
			try {
				// 创建XMLWriter
				XMLWriter writer = new XMLWriter(new OutputStreamWriter(
						new FileOutputStream(path), "utf-8"), format);
				writer.write(document); // 保存document对象
				writer.close();

			} catch (Exception e) {
				throw new RuntimeException();
			}

		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

3.建立一个dao.properties 存变量

cn.itcast.user.dao.UserDao=cn.itcast.user.dao.JdbcUserDaoImpl

4.写一个DaoFactory 来实现UserDao对象的创建

package cn.itcast.user.dao;

import java.io.InputStream;
import java.util.Properties;

/**
 * 返回一个具体UserDao的实现类对象
 * 通过配置文件得到dao实现类的名称
 * 通过类名称,完成创建类对象(反射完成的)
 * @author 10958
 *
 */
public class DaoFactory {
	private static Properties props = null;
	static {
		try {
			InputStream in = DaoFactory.class.getClassLoader().getResourceAsStream("dao.properties");
			props = new Properties();
			props.load(in);
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	public static UserDao getUserDao() {
		// 得到dao实现类的名称
		String daoClassName = props.getProperty("cn.itcast.user.dao.UserDao");
		// 通过反射去创建实现类的对象
		try {
			Class clazz = Class.forName(daoClassName);
			return (UserDao) clazz.newInstance();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}

	}
}

5.引入JdbcUtils工具类和dcconfig.properties变量文件

package cn.itcast.user.dao;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class JdbcUtils {
	private static Properties props = null;
	// 只在JdbcUtils类被加载时执行一次
	static {
		// 给pros初始化 即加载dbconfig.properties文件到pros
		try {
			InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("dbconfig.properties");
			props = new Properties();
			props.load(in);
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
		// 加载驱动类
		try {
			Class.forName(props.getProperty("driverClassName"));
		} catch (ClassNotFoundException e) {
			throw new RuntimeException(e);
		}
	}

	//获取连接
	public static Connection getConnection() throws SQLException {
		/*
		 * 1.加载配置文件 2.加载驱动类 3/调用DriverManager.getConnection()
		 * 
		 */
		// InputStream in =
		// JdbcUtils.class.getClassLoader().getResourceAsStream("dbconfig.properties");
		// Properties props = new Properties();
		// props.load(in);

		return DriverManager.getConnection(props.getProperty("url"), props.getProperty("username"),
				props.getProperty("password"));

	}

}
driverClassName=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost\:3306/mydb3
username=root
password=123

6.更改UserService里面UserDao的实现

package cn.itcast.user.service;

import static org.hamcrest.CoreMatchers.nullValue;

import javax.enterprise.inject.New;

import cn.itcast.user.dao.DaoFactory;
import cn.itcast.user.dao.UserDao;
import cn.itcast.user.domain.User;

/**
 * User的业务逻辑层
 * 
 * @author Administrator
 *
 */
public class UserService {
	// 把具体的实现类的创建 隐藏到工厂
	private UserDao userDao = DaoFactory.getUserDao();

	/**
	 * 注册功能
	 * 
	 * @param user
	 * @throws UserException
	 */
	public void regist(User user) throws UserException {
		/*
		 * 使用用户名去查询 如果返回null 完成添加 如果返回的不是null 抛出异常
		 */
		User _user = userDao.findByUsername(user.getUsername());
		if (_user != null)
			throw new UserException("用户名" + user.getUsername() + ",已被注册!");

		userDao.add(user);

	}

	/**
	 * @param user
	 * @throws UserException
	 * 
	 */
	public User login(User form) throws UserException {
		/*
		 * 使用form中的username进行查询 得到User user
		 */
		User user = userDao.findByUsername(form.getUsername());
		// 如果返回null 说明用户名不存在 抛出异常 异常信息为"用户名不存在"
		if (user == null)
			throw new UserException("用户名不存在!");

		// 比较user的password和form的password 如果不同 跑出异常 异常信息为"密码错误"
		if (!form.getPassword().equals(user.getPassword())) {
			throw new UserException("密码错误!");
		}
		// 返回数据库中查询出来的user 而不是form 因为form只有用户名密码 而user有全部信息
		return user;
	}
}

7.最后写一个jdbcUserDaoImpl

package cn.itcast.user.dao;

import java.security.interfaces.RSAKey;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.Normalizer.Form;

import cn.itcast.user.domain.User;


/**针对数据库的实现
 * @author 10958
 *
 */
public class JdbcUserDaoImpl implements UserDao {

	@Override
	public void add(User form) {
		/*
		 * 1.得到连接
		 */
		try {
			Connection con = JdbcUtils.getConnection();
			//准备sql模版得到pstmt
			String sql = "INSERT INTO t_user Values(?,?)";
			PreparedStatement pstmt = con.prepareStatement(sql);
			//为sql的问号赋值
			pstmt.setString(1, form.getUsername());
			pstmt.setString(2, form.getPassword());
			
			pstmt.executeUpdate();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
		
		
	}

	@Override
	public User findByUsername(String username) {
		try {
			Connection con = JdbcUtils.getConnection();
			//准备sql模版得到pstmt
			String sql = "SELECT * FROM t_user WHERE username=?";
			PreparedStatement pstmt = con.prepareStatement(sql);
			//为sql的问号赋值
			pstmt.setString(1, username);
			//执行
			ResultSet rs = pstmt.executeQuery();
			//把rs转换成User类型返回
			if(rs==null){
				return null;
			}
			if(rs.next()){
				//转换成User对象返回
				//ORM 即对象关系映射
				User user = new User();
				user.setUsername(rs.getString("username"));
				user.setPassword(rs.getString("password"));
				return user;
			}else {
				return null;
			}
			
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
}






  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单Javaweb 登录注册示例: 1. 首先创建一个注册页面 register.jsp,代码如下: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>注册页面</title> </head> <body> <h2>用户注册</h2> <form action="register" method="post"> <label>用户名:</label> <input type="text" name="username"><br><br> <label>密 码:</label> <input type="password" name="password"><br><br> <button type="submit">注册</button> </form> </body> </html> ``` 2. 创建一个处理注册请求的 Servlet,命名为 RegisterServlet,代码如下: ```java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class RegisterServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取表单提交的用户名和密码 String username = request.getParameter("username"); String password = request.getParameter("password"); // 模拟将用户名和密码存入数据库 // 这里简单输出一下 System.out.println("注册成功!用户名:" + username + ",密码:" + password); // 跳转到登录页面 response.sendRedirect("login.jsp"); } } ``` 3. 创建一个登录页面 login.jsp,代码如下: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登录页面</title> </head> <body> <h2>用户登录</h2> <form action="login" method="post"> <label>用户名:</label> <input type="text" name="username"><br><br> <label>密 码:</label> <input type="password" name="password"><br><br> <button type="submit">登录</button> </form> </body> </html> ``` 4. 创建一个处理登录请求的 Servlet,命名为 LoginServlet,代码如下: ```java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class LoginServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取表单提交的用户名和密码 String username = request.getParameter("username"); String password = request.getParameter("password"); // 模拟从数据库中获取用户信息进行判断 // 这里简单判断一下 if (username.equals("admin") && password.equals("123456")) { // 登录成功,将用户信息存入 session 中 HttpSession session = request.getSession(); session.setAttribute("username", username); // 跳转到用户首页 response.sendRedirect("index.jsp"); } else { // 登录失败,返回登录页面 response.sendRedirect("login.jsp"); } } } ``` 5. 创建一个用户首页 index.jsp,代码如下: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>用户首页</title> </head> <body> <h2>欢迎访问用户首页!</h2> <p>您已经成功登录,用户名为:<%= session.getAttribute("username") %></p> <p><a href="logout">退出登录</a></p> </body> </html> ``` 6. 创建一个退出登录的 Servlet,命名为 LogoutServlet,代码如下: ```java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class LogoutServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 从 session 中清除用户信息 HttpSession session = request.getSession(); session.removeAttribute("username"); // 跳转到登录页面 response.sendRedirect("login.jsp"); } } ``` 7. 最后,在 web.xml 文件中配置 Servlet,代码如下: ```xml <!-- 注册请求 Servlet --> <servlet> <servlet-name>RegisterServlet</servlet-name> <servlet-class>RegisterServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>RegisterServlet</servlet-name> <url-pattern>/register</url-pattern> </servlet-mapping> <!-- 登录请求 Servlet --> <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> <!-- 退出登录 Servlet --> <servlet> <servlet-name>LogoutServlet</servlet-name> <servlet-class>LogoutServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LogoutServlet</servlet-name> <url-pattern>/logout</url-pattern> </servlet-mapping> ``` 以上就是一个简单Javaweb 登录注册示例,可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值