标签:except .sql user blog 表单 代码 get 父类 style
一,需求分析
整体分析框架如下图,需要的包也如下图,它们放在src下
所有的需求如下图所示,
1,我们创建一个名为day12的数据库,其中创建了一个users表
2,在myeclipse中我们新建一个名为day12_user的web项目,
3,在src下我们创建了如下几个java包:
com.itheima.damain 实体类包, 其中包括 User类
com.itheima.dao 接口包 , 其中包括 UserDao接口
com.itheima.dao.impl 接口实现类包, 其中包括 UserDaoImpl实现类
com.itheima.service 接口包 其中包括service接口
com.itheima.service.impl 接口实现类包 其中包括service接口实现类
com.itheima.utils 工具包 其中包括一般的关闭,连接数据库的函数
com.itheima.exception 异常包
com.itheima.web.servlet servlet包 包括loginServlet和registerServlet
首先是主页main.jsp
<body> <h1>欢迎来到主页</h1> <form action="/day12_user/login.jsp" method = "post"> <input type = "submit" value = "登陆" > </form> <form action="/day12_user/register.jsp" method = "post"> <input type = "submit" value= "注册"> </form> </body>
选择登陆按钮,进入login.jsp
<body> <form action="/day12_user/demo1" method= "post"> 用户名:<input type = "text" name = "username" ><br> 密码:<input type = "password" name = "password" ><br> <input type = "submit" value = "登陆"><br> </form> </body>
loginservlet的源码如下图所示,只写一个完整源码,其他的servlet类似
package com.itheima.web.servlet; import java.io.IOException; import java.io.PrintWriter; import java.util.Random; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.itheima.damain.User; import com.itheima.service.impl.UserService; import com.itheima.service.impl.UserServiceImpl; @SuppressWarnings("serial") public class loginServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { //设置编码模式
request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); //获取表单数据, 并将表单数据存入到login函数中 String name = request.getParameter("username"); String pwd = request.getParameter("password"); //处理业务逻辑,实现login 方法,里面涉及到finduser方法 UserService us = new UserServiceImpl();// User u = us.login(name,pwd); //分发转向 if(u!=null){ out.write("<br/>欢迎你,登陆成功,3秒跳转首页"); request.setAttribute("u", u.getUsername()); request.getRequestDispatcher("/success.jsp").forward(request, response); }else{ //实现刷新功能 out.write("用户名或密码错误,请重新登陆"); response.setHeader("refresh", "1;url=/day12_user/login.jsp"); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
上面是登陆成功后的主页,其源码为success.jsp
<body> <h1>这是主页</h1> 欢迎 ${u} ,来到主页 </body>
对于loginservlet中,有一句代码进行解析
//处理业务逻辑,实现login 方法,里面涉及到finduser方法
UserService us = new UserServiceImpl(); 这句是创建父接口指向子类对象
User u = us.login(name,pwd);
userService源代码如下
public interface UserService { //根据用户和密码实现登陆 public User login(String name,String pwd); //注册 public int register(User user); }
UserServiceImpl源码如下:
package com.itheima.service.impl; import com.itheima.damain.User; import com.itheima.dao.UserDao; import com.itheima.dao.impl.UserDaoImpl; public class UserServiceImpl implements UserService{ /** * 实现用户登录的方法 */ public User login(String name,String pwd) { // TODO Auto-generated method stub //用实现类来指向父类的接口 UserDao dao = new UserDaoImpl(); return dao.finduser(name,pwd); } public int register(User user) { // TODO Auto-generated method stub UserDao dao = new UserDaoImpl(); return dao.adduser(user); } }
UserDao源码如下
public interface UserDao { /** * 查找用户 * @param user * @return */ public User finduser(String name,String password); /** * 添加用户 * @param user * @return */ public int adduser(User user); }
UserDaoImpl源码如下:
package com.itheima.dao.impl; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.text.SimpleDateFormat; import com.itheima.damain.User; import com.itheima.dao.UserDao; import com.itheima.utils.DBUtils; /** * 数据访问层对于方法的实现 * @author zjf-pc * */ public class UserDaoImpl implements UserDao{ /** * 查找用户的实现方法 */ public User finduser(String name,String password) { // TODO Auto-generated method stub Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; User u = null; try { conn = DBUtils.getConnection(); //找到与浏览器中getConnection输入用户名和密码一致的sql语句,并保存在rs中 String sql = "select * from users where username= ? and password = ?"; ps = conn.prepareStatement(sql); ps.setString(1,name); ps.setString(2, password); //得到sql中的结果 rs = ps.executeQuery(); while(rs.next()) { //新创建一个user对象,将rs中的属性均赋值给user对象 //如果之前的rs内容为空的话,那么此时返回的u也为null u = new User(); u.setId(rs.getInt(1)); u.setUsername(rs.getString(2)); u.setPassword(rs.getString(3)); u.setEmail(rs.getString(4)); u.setBirthday(rs.getDate(5)); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ DBUtils.closeAll(rs, ps, conn); } return u; } /** * 添加用户的实现方法 */ public int adduser(User user) { // TODO Auto-generated method stub Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; int i =0; try { conn = DBUtils.getConnection(); //向数据库库表中插入一行语句如下 String sql = "insert into users(username,password,email,birthday)values(?,?,?,?);"; ps = conn.prepareStatement(sql); ps.setString(1, user.getUsername()); ps.setString(2, user.getPassword()); ps.setString(3, user.getEmail()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-DD"); ps.setString(4, sdf.format(user.getBirthday())); //将数据更新到表中 i = ps.executeUpdate(); System.out.println("***********"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ DBUtils.closeAll(rs, ps, conn); } return i; } public UserDaoImpl() { super(); // TODO Auto-generated constructor stub } }
标签:except .sql user blog 表单 代码 get 父类 style
原文地址:http://www.cnblogs.com/zjf-293916/p/6653863.html