博客系统使用jsp+servlet+mybatis写成
1.关于表单验证
自己对于js的使用特别不熟悉.所以现学了一点注册时候的简单验证
onchange事件:实时监听文本框的输入,当用户离开文本框的时候就进行验证 onchange="函数调用"
js代码:
<script type="text/javascript"> function checkpwd() { var check = false; var password = document.getElementById("password").value; if (password.length < 6) { alert("密码不能少于六位") check = false; } else { check = true; } return check; } function checkName() { var check=false; var name=document.getElementById("name").value; if(name.length<3){ alert("用户名大于3位"); check=false; }else{ check=true; } return check; } function checkpwdc() { var check = false; var password = document.getElementById("password").value; var pwdc = document.getElementById("re-password").value; if (password != pwdc) { alert("两次密码不一致"); check = false; } else { check = true; } return check; } function checkAge() { var check=false; var age = document.getElementById("age").value; if(!isNaN(age)&&(age>0&&age<=120)){ check=true; } else{ alert("年龄不合法") check=false; } return check; } function checkNull() { var check=false; var username=document.getElementById("name").value; var pass=document.getElementById("password").value; var pass2=document.getElementById("re-password").value; var age=document.getElementById("age").value; var email=document.getElementById("email").value; if(username.length==0||pass.length==0||pass2.length==0||age.length==0||email.length==0){ alert("请将全部信息填写"); check=false; }else{ check=true; } return check; } function check() { var check =checkName()&&checkAge()&&checkpwd() && checkpwdc() return check; } </script>
当不符合要求时用户无法提交表单onsubmit="return check()"
<form action="ServletRegister" class="fh5co-form animate-box" data-animate-effect="fadeIn" method="post" onsubmit="return check()">
2.发送qq邮件功能
用户点击注册之后会将用户的qq邮箱和生成的编码传入
首先需要一个qq邮箱开启SMTP和POP3协议,需要qq邮箱授权码
package servlet; import com.sun.mail.util.MailSSLSocketFactory; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.util.Properties; public class QQMail { public void hwj(String email,String code){ // 1.创建连接对象javax.mail.Session // 2.创建邮件对象 javax.mail.Message // 3.发送一封激活邮件 String from = "[email protected]";// 发件人电子邮箱 String host = "smtp.qq.com"; // 指定发送邮件的主机smtp.qq.com(QQ)|smtp.163.com(网易) Properties properties = System.getProperties();// 获取系统属性 properties.setProperty("mail.smtp.host", host);// 设置邮件服务器 properties.setProperty("mail.smtp.auth", "true");// 打开认证 try { // 2.4设置邮件内容 //QQ邮箱需要下面这段代码,163邮箱不需要 MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); properties.put("mail.smtp.ssl.enable", "true"); properties.put("mail.smtp.ssl.socketFactory", sf); // 1.获取默认session对象 Session session = Session.getDefaultInstance(properties, new Authenticator() { public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("[email protected]", "ngzlhsocilcxdgjc"); // 发件人邮箱账号、授权码 } }); // 2.创建邮件对象 Message message = new MimeMessage(session); // 2.1设置发件人 message.setFrom(new InternetAddress(from)); // 2.2设置接收人 message.addRecipient(Message.RecipientType.TO, new InternetAddress(email)); // 2.3设置邮件主题 message.setSubject("账号激活"); // 2.4设置邮件内容 String content = "<p>您好 O(∩_∩)O~~<br><br>欢迎加入博客系统!<br><br>帐户需要激活才能使用,赶紧激活成为正式的一员吧:)<br><br>请在24小时内点击下面的链接立即激活帐户:" +"<br><a href='http://localhost:8080/ServletQQ?token="+code+"&email="+email+"'>" + "http://localhost:8080/ServletQQ?token="+code+"&email="+email+"</a></p>"; message.setContent(content, "text/html;charset=UTF-8"); // 3.发送邮件 Transport.send(message); System.out.println("邮件成功发送!"); } catch (Exception e) { e.printStackTrace(); } } }
当用户接受到邮件之后点击的连接实际是一个servlet,该servlet会将用户存到数据库里面(从session中取出),因为我是将用户的信息存到了session里面,所以必须要在同一个浏览器下面进行验证,不然就得不到那个user对象了,会报空指针异常错误!!!我一开始在另一个浏览器下验证一直在报错所以一定要注意!!!
3.博客编辑器
使用的百度开源软件ueditor插件
表单中代码
<!-- 加载编辑器的容器 --> <script id="editor" type="text/plain" name="content"> </script>
<script type="text/javascript"> //实例化编辑器 //建议使用工厂方法getEditor创建和引用编辑器实例,如果在某个闭包下引用该编辑器,直接调用UE.getEditor('editor')就能拿到相关的实例 var ue = UE.getEditor('editor'); </script>
servlet中获取编辑器的内容 插件自带的editorValue名称:
String content=request.getParameter("editorValue");
该编辑器存入数据库后发现直接将html标签存入了数据库,这样在读取数据的时候不用自己处理
4.cookie记住用户名密码
<label for="remember"><input type="checkbox" value="y" id="remember" name="remember"> Remember Me</label>
在servletLogin中进行处理
String flag=request.getParameter("remember");
if(flag!=null&&flag.equals("y")){ Cookie nameCookie = new Cookie("username", username); //设置Cookie的有效期为3天 nameCookie.setMaxAge(60 * 60 * 24 * 3); Cookie pwdCookie = new Cookie("password", password); pwdCookie.setMaxAge(60 * 60 * 24 * 3); response.addCookie(nameCookie); response.addCookie(pwdCookie); }
在login.jsp中进行判断 然后在表单中写入value="<%=??>"
<% String username = ""; String password = ""; //获取当前站点的所有Cookie Cookie[] cookies = request.getCookies(); if(cookies!=null) { for (int i = 0; i < cookies.length; i++) {//对cookies中的数据进行遍历,找到用户名、密码的数据 if ("username".equals(cookies[i].getName())) { username = cookies[i].getValue(); } else if ("password".equals(cookies[i].getName())) { password = cookies[i].getValue(); } } } %>