6、编写 UserService和测试
UserService
package com.atguigu.service; import com.atguigu.pojo.User; public interface UserService { /** * 注册用户 * @param user */ public void registUser(User user); /** * 登录用户 * @param user * @return 如果返回null,说明登录失败,返回有值,是登录成功 */ public User login(User user); /** * 检查用户名是否可用 * @param username * @return 返回true表示用户名已存在,返回false表示用户名可用 */ public boolean existUsername(String username); }
UserServiceImpl
package com.atguigu.service.impl; import com.atguigu.dao.UserDao; import com.atguigu.dao.impl.UserDaoImpl; import com.atguigu.pojo.User; import com.atguigu.service.UserService; public class UserServiceImpl implements UserService { private UserDao userDao=new UserDaoImpl(); @Override public void registUser(User user) { userDao.saveUser(user); } @Override public User login(User user) { return userDao.queryUserByUsernameAndPassword(user.getUsername(),user.getPassword()); } @Override public boolean existUsername(String username) { if (userDao.queryUserByUsername(username)==null){ //等于null,说明没查到,没查到表示可用 return false; } return true; } }
UserServiceTest
package com.atguigu.test; import com.atguigu.pojo.User; import com.atguigu.service.UserService; import com.atguigu.service.impl.UserServiceImpl; import org.junit.Test; public class UserServiceTest { UserService userService =new UserServiceImpl(); @Test public void registUser() { userService.registUser(new User(null,"bbj168","666666","bbj168@qq.com")); userService.registUser(new User(null,"abc168","666666","abc168@qq.com")); } @Test public void login() { System.out.println(userService.login(new User(null,"wzg168","123456",null))); } @Test public void existUsername() { if (userService.existUsername("wzg16888")){ System.out.println("用户名已存在!"); }else { System.out.println("用户名可用!"); } } }
7、编写web层
7.1 实现用户注册的功能
regist.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>尚硅谷会员注册页面</title> <!--写base标签,永远固定相对路径跳转的结果--> <base href="http://localhost:8080/book"> <link type="text/css" rel="stylesheet" href="static/css/style.css"> <script type="text/javascript" src="static/script/jquery.js"></script> <script type="text/javascript"> //页面加载完成之后 $(function () { //给注册绑定单击事件 $("#sub_btn").click(function () { //验证用户名:必须由字母,数字下划线组成,并且长度为5到12位 //1获取用户名输入框里的内容 var usernameText=$("#username").val(); //2创建正则表达式对象 var usernamePatt=/^\w{5,12}$/; //3使test方法验证 if(!usernamePatt.test(usernameText)){ //4提示用户结果 $("span.errorMsg").text("用户名不合法!"); return false; } //验证密码:必须由字母,数字下划线组成,并且长度为5到12位 //1获取用户名输入框里的内容 var passwordText=$("#password").val(); //2创建正则表达式对象 var passwordPatt=/^\w{5,12}$/; //3使test方法验证 if(!passwordPatt.test(passwordText)){ //4提示用户结果 $("span.errorMsg").text("密码不合法!"); return false; } //验证确认密码:和密码相同 //1获取确认密码内容 var repwdText=$("#repwd").val(); //2和密码相比较 if (repwdText!=passwordText){ //3提示用户 $("span.errorMsg").text("确认密码和密码不一致!"); return false; } //邮箱验证:xxxxx@xxx.com //1获取邮箱里的内容 var emailText=$("#email").val(); //2创建正则表达式对象 var emailPatt=/^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/; //3使test方法验证 if(!emailPatt.test(emailText)){ //4提示用户结果 $("span.errorMsg").text("邮箱格式不合法!"); return false; } //验证码现在只需要验证用户已输入。因为还没讲到服务器。验证码生成。 var codeText=$("#code").val(); //去掉验证码前后空格 alert("去空格前["+codeText+"]"); codeText=$.trim(codeText); alert("去空格后["+codeText+"]"); if (codeText==null||codeText==""){ //提示用户结果 $("span.errorMsg").text("验证码不能为空"); return false; } $("span.errorMsg").text(""); }); }); </script> <style type="text/css"> .login_form { height: 420px; margin-top: 25px; } </style> </head> <body> <div id="login_header"> <img class="logo_img" alt="" src="static/img/logo.gif"> </div> <div class="login_banner"> <div id="l_content"> <span class="login_word">欢迎注册</span> </div> <div id="content"> <div class="login_form"> <div class="login_box"> <div class="tit"> <h1>注册尚硅谷会员</h1> <span class="errorMsg"></span> </div> <div class="form"> <form action="registServlet" method="post"> <label>用户名称:</label> <input class="itxt" type="text" placeholder="请输入用户名" autocomplete="off" tabindex="1" name="username" id="username"/> <br/> <br/> <label>用户密码:</label> <input class="itxt" type="password" placeholder="请输入密码" autocomplete="off" tabindex="1" name="password" id="password"/> <br/> <br/> <label>确认密码:</label> <input class="itxt" type="password" placeholder="确认密码" autocomplete="off" tabindex="1" name="repwd" id="repwd"/> <br/> <br/> <label>电子邮件:</label> <input class="itxt" type="text" placeholder="请输入邮箱地址" autocomplete="off" tabindex="1" name="email" id="email"/> <br/> <br/> <label>验证码:</label> <input class="itxt" type="text" name="code" style="..." id="code"/> <img alt="" src="static/img/code.bmp" style="..."> <br/> <br/> <input type="submit" value="注册" id="sub_btn"/> </form> </div> </div> </div> </div> </div> </body> </html>
regist_success.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>尚硅谷会员注册页面</title> <!--写base标签,永远固定相对路径跳转的结果--> <base href="http://localhost:8080/book"> <link type="text/css" rel="stylesheet" href="static/css/style.css"> <style type="text/css"> h1{ text-align: center; margin-top: 200px; } h1 a { color: red; } </style> </head> <body> <div id="header"> <img class="logo_img" alt="" src="static/img/logo.gif"> <span class="wel_word"></span> <div> <span>欢迎<span class="um_span">韩总</span>光临尚硅谷书城</span> <a href="../order/order.html">我的订单</a> <a href="../../index.html">注销</a> <a href="../../index.html">返回</a> </div> </div> <div id="main"> <h1>注册成功!<a href="../../index.html">转到主页</a></h1> </div> </body> </html>
RegistServlet
package com.atguigu.web; import com.atguigu.pojo.User; import com.atguigu.service.UserService; import com.atguigu.service.impl.UserServiceImpl; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class RegistServlet extends HttpServlet { private UserService userService=new UserServiceImpl(); @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1、获取请求的参数 String username = req.getParameter("username"); String password = req.getParameter("password"); String email = req.getParameter("email"); String code = req.getParameter("code"); // 2、检查验证码是否正确 ===写死,要求验证码为:abcde if ("abcde".equalsIgnoreCase(code)){ // 3、检查用户名是否可用 if (userService.existUsername(username)){ System.out.println("用户名["+username+"]已存在!"); // 跳回注册页面 req.getRequestDispatcher("/pages/user/regist.html").forward(req,resp); }else { // 可用 调用Service保存到数据库 userService.registUser(new User(null,username,password,email)); // 跳到注册成功束面regist_success.html req.getRequestDispatcher("/pages/user/regist_success.html").forward(req,resp); } }else { System.out.println("验证码["+code+"]错误,"); req.getRequestDispatcher("/pages/user/regist.html").forward(req,resp); } } }
在web.xml中配置
<servlet> <servlet-name>RegistServlet</servlet-name> <servlet-class>com.atguigu.web.RegistServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>RegistServlet</servlet-name> <url-pattern>/registServlet</url-pattern> </servlet-mapping>
7.2 IDEA中Debug调试的使用
7.2.1 Debg调试代码,首先需要两个元素;断点+Debug启动服务器
1、断点,只需要在代码需要停的行的左边上单击,就可以添加和取消
2、Debug启动Tomcat运行代码:
7.2.2 测试工具栏:
7.2.3 变量窗口
变量窗口:可以查看当前方法范围内的所有有效的变量。
其他常用调试相关按钮
7.3 用户登录功能的实现
login.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>尚硅谷会员登录页面</title> <!--马base标签,永远固定相对路径跳转的结果--> <base href= "http://localhost:8080/book/"> <link type="text/css" rel="stylesheet" href="static/css/style.css" > </head> <body> <div id="login_header"> <img class="logo_img" alt="" src="static/img/logo.gif" > </div> <div class="login banner"> <div id="l_content"> <span class="login_word">欢迎登录</span> </div> <div id="content"> <div class="login_form"> <div class="login_box"> <div class="tit"> <h1>尚硅谷会员</h1> <a href="pages/user/regist.html">立即注册</a> </div> <div class="msg_cont"> <b></b> <span class="errorMsg">请输入用户名和密码</span> </div> <div class="form"> <form action="loginServlet" method="post"> <label>用户名称:</label> <input class="itxt" type="text" placeholder="请输入用户名" autocomplete="off" tabindex="1" name="username"/> <br/> <br/> <label>用户密码:</label> <input class="itxt" type="password" placeholder="请输入密码" autocomplete="off" tabindex="1" name="password"/> <br/> <br/> <input type="submit" value="登录" id="sub_btn"/> </form> </div> </div> </div> </div> </div> </body> </html>
login_success.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>尚硅谷会员登录</title> <style type="text/css"> h1{ text-align: center; margin-top: 200px; } h1 a { color: red; } </style> </head> <body> <div id="main"> <h1>登录成功!<a href="../../index.html">转到主页</a></h1> </div> </body> </html>
LoginServlet
package com.atguigu.web; import com.atguigu.pojo.User; import com.atguigu.service.UserService; import com.atguigu.service.impl.UserServiceImpl; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class LoginServlet extends HttpServlet { private UserService userService=new UserServiceImpl(); @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1、获取请求的参数 String username = req.getParameter("username"); String password = req.getParameter("password"); //2、调用XxxService.xxx()处理业务 User loginUser = userService.login(new User(null, username, password, null)); //如果等于null,说明登录失败 if (loginUser==null){ // 跳回登录页面 req.getRequestDispatcher("/pages/user/login.html").forward(req,resp); }else { // 成功 // 跳到成功页面login_success.html req.getRequestDispatcher("/pages/user/login_success.html").forward(req,resp); } } }
web.xml中的配置
<servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.atguigu.web.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/loginServlet</url-pattern> </servlet-mapping>






