javaWeb前后台交互(二)[通俗易懂]

javaWeb前后台交互(二)[通俗易懂]接上一篇javaWeb前后台交互。链接:https://blog.csdn.net/blackplus28/article/details/80603863一、MVC思想责任分离思想.M:Model,数据模型对象.(JavaBean)V:View,视图界面.(JSP,Panel,Window)C:Controller,控制器(Servlet)本次代码采用:Tomc…

大家好,又见面了,我是你们的朋友全栈君。

接上一篇javaWeb前后台交互。链接:https://blog.csdn.net/blackplus28/article/details/80603863

一、MVC思想

责任分离思想.

M:Model,数据模型对象.(JavaBean)

V:View,视图界面.(JSP,Panel,Window)

C:Controller,控制器(Servlet)

javaWeb前后台交互(二)[通俗易懂]

 

本次代码采用:Tomcat7.57  JDK 1.8  Eelipse编写  数据库:Mysql

 

二、项目结构(MVC模式)

自己创建动态项目,然后再建好包。

javaWeb前后台交互(二)[通俗易懂]

1、编写工具类(JdbcUtil)

package util;

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

//  连接数据库
public class JdbcUtil {
	private static Properties p = new Properties();
	static {
		try {
			ClassLoader loader = Thread.currentThread().getContextClassLoader();
			// 从classpath的跟路径去寻找db.properties
			InputStream inStream = loader.getResourceAsStream("db.properties");
			p.load(inStream); // 加载
		} catch (IOException e) {
			throw new RuntimeException("加载classpath路径下的db.properties文件失败", e);
		}
		// 1加载注册驱动
		try {
			Class.forName(p.getProperty("DriverName"));
			System.out.println("加载数据驱动正常");
		} catch (Exception e) {
			throw new RuntimeException("数据库驱动加载失败", e);
		}
	}
	// 返回创建好的Connection对象,用静态的这种方式应该把构造器私有化起来
	public static Connection getConn() {
		try {
			System.out.println("连接数据库正常");
			// 2获取连接对象
			return DriverManager.getConnection(p.getProperty("url"), p.getProperty("username"),
					p.getProperty("password"));
		} catch (Exception e) {
			e.printStackTrace();
		}
		throw new RuntimeException("数据库连接异常");
	}
	// 5):释放资源
	public static void close(Connection conn, Statement st, ResultSet re) {
		try {
			if (re != null) {
				re.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (st != null) {
					st.close();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
			try {
				if (conn != null) {
					conn.close();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	// 防止先创建对象,然后再调用方法。不让外界创建,直接用类名调用
	private JdbcUtil() {
		}

}

2、domain(model)层

package domain;

/**
 *   用户
 * @author
 *
 */
public class User {
	private int id;
	private String username;
	private String password;
	public User() {
		super();
	}
	
	public User(String username, String password) {
		super();
		this.username = username;
		this.password = password;
	}

	public User(int id, String username, String password) {
		super();
		this.id = id;
		this.username = username;
		this.password = password;
	}

	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	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;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
	}
}

 

3、写dao层

 

接口层:

package dao;

import domain.User;

/**
 *  登录
 * @author 
 *
 */
public  interface  IUserDao {
	/**
	 * 用户登录 
	 * @param username
	 * @param password
	 * @return
	 */
	public  User loginUser(String username,String password);
}

实现层:

package dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import dao.IUserDao;
import domain.User;
import util.JdbcUtil;

public class UserDaoImpl implements IUserDao {
	//  登录
	@Override
	public User loginUser(String username, String password) {
		String sql = "SELECT * FROM t_user WHERE username=? AND password=?";
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		 try {
			conn = JdbcUtil.getConn();
			ps = conn.prepareStatement(sql);
			ps.setString(1, username);
			ps.setString(2, password);
			rs = ps.executeQuery();
			if (rs.next()) {
				User user = new User();
				user.setUsername(rs.getString("username"));
				user.setPassword(rs.getString("password"));
				return user;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
}

4、service接口和实现层

接口:

package service;

import domain.User;

public interface IUserService {
	/**
	 * 登录
	 * @param username
	 * @param password
	 * @return
	 */
	public  User loginUser(String username,String password);
}

实现层:

package service.impl;

import dao.IUserDao;
import dao.impl.UserDaoImpl;
import domain.User;
import service.IUserService;

public class UserServiceImpl implements IUserService{
	private IUserDao dao = new UserDaoImpl();
	@Override
	public User loginUser(String username, String password) {
		
		return dao.loginUser(username, password);
	}
}

5、controller层

package controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import domain.User;
import service.IUserService;
import service.impl.UserServiceImpl;

public class UserServlet  extends HttpServlet{
	private static final long serialVersionUID = 1L;
	private IUserService userService = new UserServiceImpl();
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String userName = req.getParameter("username");
		String password = req.getParameter("password");
		
		User user = userService.loginUser(userName, password);
		if (user != null) {
			resp.sendRedirect("login_success.jsp");
		}else {
			resp.sendRedirect("login_fail.jsp");
		}
	}
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		this.doPost(req, resp);
	}
}

6、这个时候记得创建resource文件夹,并创建db.properties (你只需把javaweb换成你的数据库名称,两个root分别是数据库账户和密码,自行修改就好)

#key=value

DriverName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/javaweb
username=root
password=root

 

7、创建三个JSP(view层)

 

我只贴login.jsp代码,登录成功和失败页面里面都是一句话,仅仅为做跳转看效果。

其实完全用把结果存放到session里面,在login.jsp里面写el表达式接受信息也可以看出效果,但因为是初学者,还是多写几个页面看的直观。

javaWeb前后台交互(二)[通俗易懂]

<%@ 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>
	<!--登陆框开始-->
	<form action="UserServlet" method="post">
		用户名:<input type="text" class="inputName" name="username"  placeholder="用户名"><br />
		 
		 密  码:<input type="password" name="password" placeholder="密码"><br />
		<button type="submit" >登录</button>
	</form>
</body>
</html>

数据库就不放了,里面就id,username,password三个字段。

效果图:

登录成功:

javaWeb前后台交互(二)[通俗易懂]

登录失败:

javaWeb前后台交互(二)[通俗易懂]

 

三、总结

  写到这里按照MVC模式进行交互已完成。

如果你完全复制我的代码,还报错,这个时候很有可能是环境问题,因为我都是测试了好几遍完全正确才截图的,有问题欢迎留言讨论。

 

如果有不同看法,或者是文中写错的地方,麻烦大佬留言指正文章错误,谢谢!!! 

转载请声明出处:https://blog.csdn.net/BlackPlus28/article/details/80945137

 

——————————————————————————————————————————————————————-

2019-9-19更新:

获取源码:

1、评论,我看到会通过邮件发送源码。但不保证及时性,我也在上班,有时很忙。

 

——————————————————————————————————————————————————————-

2021-2-4

1、由于工作原因,有时候看到评论消息都过去了大半个月甚至一个月。有几个小伙伴私我,建议创建群或者公众号。

   其实之前创建过群,后面陆陆续续加入了400多人,但后来有广告、买课非技术讨论,以及工作忙起来确实没多少精力打理群,于是解散了 。

             javaWeb前后台交互(二)[通俗易懂]之前群,现在解散)。

 

   再次创建一个公众号,方便大家自行下载资料所需源码及可能感兴趣的资料。本文代码下载关键词:javaWeb前后台交互

          javaWeb前后台交互(二)[通俗易懂]

  如有帮助,请给博主一个赞吧。谢谢。

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/147265.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号