携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情
我又来咯,今天带来的是图书管理系统登录功能的实现。
设计过程
由于设计登录功能时我的修行尚浅(现在也很浅),因此,我是用HTML自带的from表单功能来完成登录功能的实现的,搞得设计的有些不合理,比如在用户名或密码输入错误后没有提示,需要我自己返回到主页面。其实我在26日用所学的vue+ajax进行了重写。但是遇到了无法解析用户名等众多bug导致只能将登录界面recall。这搞得我很是难受。
HTML代码
<form id="form" method="post" action="/Books/user/loginServlet">
<table valign="top" width="50%">
<tr><td colspan="2"><h4 style="letter-spacing:1px;font-size:16px;">图书管理系统</h4></td></tr>
<p id="p1"><tr><td>用户名:</td><td><input type="text" name="name" id="name"required /></td></tr></p>
<tr><td>密 码:</td><td><input type="password" name="pwd" id="pwd"required/></td></tr>
<tr class="bt"><td> </td><td>
<div id="subDiv">
<input type="submit" value="登录" class="button">
</div>
</table>
</form>
设计思路
我是根据from表单的提交进行用户的登录的。
HTML方式 在HTML代码里面,在用户名输入框,密码输入框,提交按钮的情况下建立一个from表单,通过指定method和action就可以完成表单的提交。用户名和密码是必须输入的,因此加上required属性。当用户点击登录时,用户名和密码就会提交到后台的loginServlet中。这里我提一嘴,我的后台为了实现不让业务冗余,用了一个特殊的方法来判断Servlet来解决冗余的问题。我会在下一节中重点讲讲。
public void loginServlet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
String userName = req.getParameter("name");
String passWord = req.getParameter("pwd");
User user = service.getUser(userName, passWord);
if(user==null){
req.setAttribute("login_msg","用户名或密码错误");
//跳转回去
req.getRequestDispatcher("/login.html").forward(req,resp);
}else{
//此处是为了使界面上的信息为登录人的信息
HttpSession session = req.getSession();
session.setAttribute("user",user);
//此处是跳转到首页
String contextPath = req.getContextPath();
resp.sendRedirect(contextPath+"/index.html");
req.getRequestDispatcher("indexServlet").forward(req,resp);
}
思路讲解: 可能这个Servlet跟你们的不大一样,大家可以看下一章来解决疑惑。上来先设置最头疼的编码问题,然后通过req.getParameter(input的name属性)就可以拿到对应输入框的属性。调用UserService中的getUser就可以拿到user,通过判断是否为空就可以判断该用户是否存在,不存在则给出提示,存在则跳转页面。session的问题等到实现权限功能时再进行说明
public User getUser(String name, String pwd){
//创建对象
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
User user=null;
String sql = "SELECT * from user where name=? and password=?";
try {
conn= DbConnection.getConn();
ps=conn.prepareStatement(sql);
ps.setString(1,name);
ps.setString(2,pwd);
rs=ps.executeQuery();
while(rs.next()){
int id = rs.getInt("id");
String userName = rs.getString("name");
String passWord = rs.getString("password");
String role = rs.getString("role");
user=new User(id,userName,passWord,role);
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
DbConnection.closeConn(conn,ps,rs);
}
return user;
}
上述代码是getUser的具体实现。通过 ps.setString(?,具体的属性);?表示你想输入的属性在sql语句中是第几个?,具体的属性就是形参。通过while(rs.next())并new一个新user并返回就可以得到通过用户名和密码得到的用户。