使用Myecplise 开发环境;
建立数据库,实现用户信息的读出和存入。
新建一个web project项目,在WebRoot 下创建登陆主界面 login.jsp ,该界面能实现 :
1) 登陆跳转 2)注册跳转
实现登陆功能:
需要读取数据库中存取的用户信息,登陆名uname 和 密码 pwd, 在src 中建立mvc分层实现,使代码更加清晰,可维护性高;创建实体类pojo(User,)读取用户信息的信息数据流转:servlet -->service-->dao-->service-->servlet ,在login.jsp中输入对应的操作符,UserServlet类中, 获取操作符,判断要调用的功能。 该功能为拿到登陆页面的uname,pwd,对数据库的账号和密码进行查询校验。,建立对应的文件包和类:
建立实体类的作用(引文csdn):https://blog.csdn.net/qq_27263999/article/details/50408913
UserServlet 中校验账户和密码代码段:
public class UserServlet extends HttpServlet {
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//设置请求编码格式
req.setCharacterEncoding("utf-8");
//设置响应编码格式
resp.setContentType("text/html;charset=utf-8");
//获取操作符,判断要调用的页面,及方法
String oper = req.getParameter("oper");
if("login".equals(oper)){
//调用登陆处理
checkUserLogin(req,resp);
}else{
logger.debug("没有此操作符"+oper);
}
}
//处理登陆
private void checkUserLogin(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
//获取请求信息
String uname = req.getParameter("uname");
String pwd = req.getParameter("pwd");
//处理请求信息
//获取service 层对象
UserService us = new UserServiceImpl();
//校验
User u = us.checkUserLoginService(uname, pwd);
if(u != null){
//获取session对象
HttpSession hs = req.getSession();
//将用户存取到session中
hs.setAttribute("user", u);
//重定向
resp.sendRedirect("main/main.jsp");
}else{
//添加标识符到request中
req.setAttribute("flag", 0);
//请求转发
req.getRequestDispatcher("/login.jsp").forward(req, resp);
}
}
}
就service及serviceimpl、dao,daoimpl代码段:
public interface UserService {
/**
* 检验用户登陆
* @param uname
* @param pwd
* @return
*/
User checkUserLoginService(String uname,String pwd);
}
impl段:
public class UserServiceImpl implements UserService {
//创建dao层
UserDao ud = new UserDaoImpl();
public User checkUserLoginService(String uname, String pwd) {
User u = ud.checkUserLoginDao(uname, pwd);
return u;
}
dao段:
public interface UserDao {
/**
* 根据用户名和密码查询信息
* @param uname
* @param pwd
* @return
*/
User checkUserLoginDao(String uname,String pwd);
daoimpl段:
public class UserDaoImpl implements UserDao {
public User checkUserLoginDao(String uname, String pwd) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
User u = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/0925", "root", "123");
String sql = "select * from t_user where uname=? and pwd=?";
ps = conn.prepareStatement(sql);
ps.setString(1, uname);
ps.setString(2, pwd);
rs = ps.executeQuery();
while(rs.next()){
u = new User();
u.setUid(rs.getInt("uid"));
u.setUname(rs.getString("uname"));
u.setPwd(rs.getString("pwd"));
u.setSex(rs.getString("sex"));
u.setAge(rs.getInt("age"));
u.setBirth(rs.getString("birth"));
}
} catch (Exception e) {
// TODO: handle exception
}finally{
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return u;
}
jdbc:1、声明jdbc对象,2、创建变量、try-catch语句块{ 3、加载驱动,4、获取连接,5、创建sql命令 6、创建sql命令对象,7、给占位符赋值 8、执行 } 9、关闭资源 10、返回
当查询到输入的用户名和密码存在于数据库中,则使用 重定向 实现跳转到主页面main.jsp ,失败则使用请求转发
重定向:resp.sendRedirect("main/main.jsp"); 请求转发:req.getRequestDispatcher("/login.jsp").forward(req,resp);
就相对路径和绝对路径的理解(引文csdn): https://blog.csdn.net/suyu_yuan/article/details/52733418
重定向的作用(请求转发和重定向的作用与区别引文csdn): https://blog.csdn.net/cuiyaoqiang/article/details/51798722
登陆成功进入主界面:可实现的功能:
1) 查看个人信息 2)修改密码 3)查看用户信息 4)退出功能
在WebbRoot 下新建文件夹main,创建main.jsp 主界面。
查看个人信息,新建form 表单,显示用户的个人信息,使用session 技术,在用户登陆到界面时,session 会保存当前账户的所有信息,
所以在userinfo.jsp 中 拿到session 对象,就能拿到该账户的所有信息,
<table class="tablelist">
<thead>
<tr>
<th>用户ID<i class="sort"><img src="images/px.gif" /></i></th>
<th>用户名</th>
<th>密码</th>
<th>性别</th>
<th>年龄</th>
<th>出生年月</th>
</tr>
</thead>
<tbody>
<tr>
<td><%=((User)session.getAttribute("user")).getUid() %></td>
<td><%=((User)session.getAttribute("user")).getUname() %></td>
<td><%=((User)session.getAttribute("user")).getPwd() %></td>
<%
String sex=((User)session.getAttribute("user")).getSex();
if("1".equals(sex)){
%>
<td>男</td>
<%}else{ %>
<td>女</td>
<%}%>
<td><%=((User)session.getAttribute("user")).getAge() %></td>
<td><%=((User)session.getAttribute("user")).getBirth() %></td>
</tr>
</tbody>
</table>
修改密码功能:
获取修改密码的操作符,创建修改密码页面reg.jsp, 使用校验两次密码一致且不能为空
$(function(){
//校验密码修改
$("#fm").submit(function(){
if($("#newPwd").val()==""){//校验新密码
alert("新密码不能为空");
return false;
}else if($("#cfPwd").val()==""){//校验确认密码
alert("确认密码不能为空");
return false;
}else if($("#newPwd").val()!=$("#cfPwd").val()){//校验新密码和确认密码是否一致
alert("两次密码 不一致");
return false;
}else{
return true;
}
})
})
在 UserServlet中 建立修改密码功能,UserChangePwd(req,resp), 在service .dao层中 实现数据的流转,存入到数据库中,使用sql 语句update t_user set pwd=? where uid=? ,在使用HttpSession 获取session 对象,使用hs.setAttribute("pwd",true);保存对象信息在request 作用域中,在 login.jsp 中拿到该信息,
<%
//判断是否是账号密码修改界面
Object pwd = session.getAttribute("pwd");
if(pwd != null){
%>
<div style="text-align: center;">
<span style="font-size:15px">用户密码修改成功</span>
</div>
<%}
session.removeAttribute("pwd");
%>
在拿到只是,,需要使用session.removeAttribute("pwd"),不然login.jsp界面会一致显示 用户密码修改成功,使用session 后,销毁,当用户登陆时,重新拿到新的session。