使用MVC框架开发了一个实现用户登录注册注销的小项目
程序员文章站
2024-03-25 22:51:10
...
引言
今年由于疫情缘故没有开学,所有期末考试都是线上考试,同学们也都乐开了花,随着Javaweb这门课的结课,老师也布置了一个大作业,用MVC架构开发一个项目。端午佳节特来写一篇博客来记录一下我的第一个MVC项目,初来乍到,如有不足之处,还请多多包涵。
关于MVC
关于MVC这里就不过多介绍了,简单来说就是一个分层的设计理念,大致分为三层M 代表 模型(Model)V 代表 视图(View)C 代表 控制器(controller)。为什么要用分层的理念呢,因为当我们开发很大的项目的时候如果没有分层,你修改一些需求的时候需要把整个项目都改掉,而分层理念出现之后你只需要修改一小部分就可以了。
关于我这个项目
这个项目实现了注册,登录,注销三个功能,这个注销并不是把数据从数据库中删除,而是退出,也就是注销session。
效果如图:
主界面:
登录界面:
登陆成功界面
注册界面
基本构局
这是我们老师画的大致框架:
首先介绍一下视图,主页面index.jsp,登录注册都在JSP文件夹中,login.jsp,register.jsp。cn.mvc.code负责验证码,cn.mvc.control负责控制器,cn.mvc.service是控制器到业务逻辑层的接口,cn.mvc.Impl是负责实现业务逻辑层的,cn.mvc.D是业务逻辑层和数据访问层的接口,cn.mvc.Dao.Impl是负责实现数据访问的,cn.mvc.domain是负责数据封装的,cn.mvc.Util是工具包基本负责文件内容的读取。
核心代码
控制器:
public class UserServlet2 extends HttpServlet {
private UserService us;
/***
* 构造方法用来取出文件中的信息
* 然后实例化这个类
* 把这个类给us
*/
public UserServlet2(){
super();
InputStream in = this.getClass().getClassLoader().getResourceAsStream("interface-info.properties");
Properties pro = new Properties();
try {
pro.load(in);//读取列表的数值
String classname = pro.getProperty("UserService");//取出对应键的值
try {
us = (UserService) Class.forName(classname).newInstance();//实例化这个类
} catch (Exception e) {
e.printStackTrace();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/***
* 重写了doGet方法
* 将主页面发出的请求反馈给doGet方法
* 登录返回login,注册返回register。注销返回logout
* 通过request传递参数,再由不同情况重定向各种页面
*/
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("gb2312");
System.out.println("servlet连接成功!");
String action = request.getParameter("action");
if("login".equals(action)){//登录请求
System.out.println("您发出的是请求命令....");
String username = request.getParameter("username");
String password = request.getParameter("password");
try {
if(us.login(username, password)){
HttpSession session = request.getSession();//创建一个session对象
session.setAttribute("name", username);//赋值
response.sendRedirect(request.getContextPath()+"/index.jsp");
}else{
//request.setAttribute("loginerro", "用户名输入错误,请重新登录");
request.getRequestDispatcher("/JSP/user/login.jsp").forward(request, response);//请求转发
}
} catch (SQLException e) {
e.printStackTrace();
}
}else if(action.equals("register")){//注册请求
System.out.println("您发出的是处理命令....");
UserRegister user = new UserRegister();
String username = request.getParameter("username");
String userpet = request.getParameter("userpet");
String password1 = request.getParameter("password1");
String password2 = request.getParameter("password2");
String useryear = request.getParameter("useryear");
String usersex = request.getParameter("usersex");
//System.out.println(usersex);
//判断输入的两次密码是否一致
if(password1.equals(password2)){
user.setUsername(username);
user.setPassword1(password1);
user.setUserpet(userpet);
user.setUsersex(usersex);
user.setUseryear(useryear);
try {
if(us.register(user)){
request.getRequestDispatcher("/JSP/user/login.jsp").forward(request, response);//转发
}else{
request.getRequestDispatcher("/JSP/user/register.jsp").forward(request, response); //转发
}
} catch (SQLException e) {
e.printStackTrace();
}
}else{
request.getRequestDispatcher("/JSP/user/register.jsp").forward(request, response); //转发
}
}else if(action.equals("logout")){//注销请求
System.out.println("您发出的是注销命令....");
HttpSession session = request.getSession();
Enumeration<String> em = session.getAttributeNames();//获取session中所有的值
while(em.hasMoreElements()){//遍历所有的值
session.removeAttribute(em.nextElement().toString());//让所有的session失效
}
response.sendRedirect(request.getContextPath()+"/index.jsp");//重定向
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
业务逻辑层代码:
public class UserServiceImpl implements UserService {
/***
* 先把信息从文件中取出
* 然后对这个ud进行实例化
*/
private UserDao ud;
public UserServiceImpl() {
super();
InputStream in = this.getClass().getClassLoader().getResourceAsStream("interface-info.properties");
Properties pro = new Properties();
try {
pro.load(in);
String classname = pro.getProperty("UserDao");
try {
ud = (UserDao) Class.forName(classname).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public boolean login(String username, String password) throws SQLException {
/**
* 请求Dao,查看一下数据库中是否有数据
* 若果有返还true 如果没有返回false
*/
try {
if(ud.findUser(username, password)){
return true;
}
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
@Override
public boolean register(UserRegister user) throws SQLException {
/***
* 先把username从user中取出
* 在进行与数据库中的数据进行比较
* 如果数据库中没有这个username则可以进行存入
* 如果这个username在数据库中则返回该用户名已注册
*/
String username = user.getUsername();
//System.out.println(username);
if(ud.findUser(username)){
ud.addUser(user);//进行存入
return true;
}else{
return false;
}
}
}
两个接口代码:
public interface UserService {
/***
*
* @param username : 用户名
* @param password : 密码
* @return 如果正确返回true,否则返回false
* register方法用作注册,先验证用户名是否唯一,不唯一返回false,唯一则把数据存入
*/
boolean login(String username,String password) throws SQLException;//登录
boolean register(UserRegister user) throws SQLException;//注册
}
public interface UserDao {
/***
* 第一个findUser方法用作处理登录,将用户名和密码传入与数据库进行比对
* 第二个findUser方法用作注册验证用户名是否唯一
* addUser方法是将用户注册的信息传入到UserDaoImplMysql中
*/
public boolean findUser (String name, String password) throws SQLException; //处理登录
public boolean findUser (String name) throws SQLException; //处理注册,用户名唯一性
public User addUser(UserRegister user) throws SQLException;
}
总结
以上就是这个MVC小项目的基本内容想要完整包的同学可以私信我哟~ 祝大家端午节快乐~