登陆页面
首先先写好login页面,index页面(前端的事情,我们这里不写),
login页面代码:只写关键部分*
<!--最上面导包:记得提前插入jstl,jar和standard.jar两个包-->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%--导入标签库,后来使用标签会用到--%>
<%--action:里面的字符串和想要传到的Servlet类注解里面一样,表示能提交的表单数据能被Servlet类接收--%>
<%--method:是提交的方法--%>
<form action="<c:url value='/login'/>" method="post">
<table width="280px" height="280px" cellspacing="8px" >
<tr>
<td height="30px"><input id = "i1" type="text" value="x-admin2.0登录" style="background-color: #189F92 " text-align = "center"></td>
</tr>
<%--注意那么熟悉一定要写,因为后面我们提交表单之后,我们获取表单数据是根据这个name属性里面的值来获取的--%>
<tr>
<td height="30px"><input type="text" placeholder="用户名" name="name" id="d1"></td>
</tr>
<tr id="tr1"><td ></td></tr>
<tr>
<td height="30px"><input type="password" placeholder="密码" name="password" id="d2" ></td>
</tr>
<tr>
<td height="30px"><input id="i2" type="submit" value="登录" style="background-color: #189F92" ></td>
</tr>
</table>
</form>
在pojo层下写一个数据库表单实现类
自己补全为一个javaBean的实现类
public class Manager {
private Integer id;
private String name;
private String password;
}
dao层
主要写的是接口和接口实现类,接口是用来规范,定义方法,实现类就是实现方法,用于接收Servlet类传输过来的数据,并进行处理,最后把处理结果返回给Servlet类.
接口
public interface LoginDao {
//这里面只需要查询是否存在就可与了所以只需要查询数据库对应表中所有的数据,并返回对应的数据就可以了
boolean queryLogin(Manager manager);
}
接口实现类
//登录页面使用接口的实现类
public class LoginDaoImpl implements LoginDao{
//使用DBUtil根据列连接数据库,链接之后我们接下来只需要些sql语言进行数据库操作就可以了
//这是工具类DBUtil里面的方法,目的是获得一个连接池对象.执行后面的对数据库的增删改查工作
QueryRunner qr=new QueryRunner(DBUtil.getDataSource());
//实现查询单个
@Override
public boolean queryLogin(Manager manager) {//这里面的参数是Servlt类传数过来的就是,从表单接受的数据
//准备sql语句
String sql="select * from login where name = ? and password = ?";
try {
Manager manager1 = qr.query(sql, new BeanHandler<>(Manager.class),manager.getName(),manager.getPassword());
if (manager1 != null){
//把返回的值交给Servlet,由Servlet再做出转换交给前端进行展示
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
service层
其实没什么作用,里面有借口和实现类,实现类就是拿来实现dao层接口实现类的,其实写这一层就是为了实现三层架构
接口
public interface ServiceDao {
boolean queryLogin(Manager manager);
}
接口实现类
public class ServiceDaoImpl implements ServiceDao{
//创建dao层login实现类对象
private LoginDaoImpl ld=new LoginDaoImpl();
@Override
public boolean queryLogin(Manager manager) {
return ld.queryLogin(manager);
}
}
Serclet层
主要是用与接收表单数据,把表单数据交给dao层用于和数据库表之间进行操作,然后接受dao层返回回来的数据,最后做出转换,交给前端页面展示
代码
//这个是注解,里面的数据就是用来判断到底是哪一个页面提交上来的,就和表单的action内部数据应该相同
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
// 属性注入,因为我们Servlet层是要把接收到的数据传到Dao的实现,然而因为我们要使用三层架构,所以我们是创建的Service实现类的对象
// Service实现类的对象就对应了dao实现类的对象,就相当于调用dao里面方法
private ServiceDaoImpl sd = new ServiceDaoImpl();
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置编码字符集
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
Manager manager2 = new Manager();//这是设置一个数据库表的类对象
try {
//固定方法BeanUtils.populate()把从form表单接收到的数据,打包成数据库表单映射类的对象:一步到位
//这里就是一步到位,比以前单个更简便,这个地方如果是单个获取数据就需要用到,之前说道表单里面的name属性,是那个属性就获取那个属性的数据
BeanUtils.populate(manager2, request.getParameterMap());
} catch (Exception e) {
e.printStackTrace();
}
//调用service方法得到数据库表里面的查询出来的的数据库表类对象
//这是数据库表里面查出来的对象,
//这里就是把从表单里面的数据交给dao层,中间经过service接手,实现三层架构模型
//最后接收从dao层返回回来的数据
boolean b = sd.queryLogin(manager2);
//开始对返回的数据进行判断,和转换
if (b==true){
//重定向
response.sendRedirect("index.jsp");
}else{
//重定向
response.sendRedirect("login.jsp");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}