博客系统使用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 = "2876197070@qq.com";// 发件人电子邮箱
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("2876197070@qq.com", "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();
}
}
}
%>