一.查阅资料(实现功能1:MVC模式)
经过查阅资料后,理解MVC为
M:Model模型层-------JavaBean
V:View视图层----------JSP
C:Controller控制层–Servlet
之后有了一个大致的思路,即通过jsp页面进行前端交互,javaBean存储数据,servlet进行后端操作,即为符合javaWeb规范的MVC模式
首先,使用到的一些技术共有:
- jsp
- servlet
- 一些html css jquery 以及 jstl,少量json
- - 整体分为三个部分,
二.登陆页面 实现功能(4:页面验证码刷新 3.cookie实现记录帐号密码 {普通保存数据入mysql数据库(略)})
1. 在登陆注册时,勾选记住密码选项后,记录勾选状态,将表单中的信息在提交时在loginServlet中,保存在cookie中,在下次登陆时,先检验cookie信息是否为空,不为空则填入表单
(1).cookie保存,记住密码
在提交表单,验证成功时,在loginServlet中保存保存cookie,设置时间,添加cookie
if(remember!=null)
{
Cookie cookie1=new Cookie("remember","true");
cookie1.setMaxAge(60*60);
response.addCookie(cookie1);
Cookie cookie2=new Cookie("Username",Username);
cookie2.setMaxAge(60*60);
response.addCookie(cookie2);
Cookie cookie3=new Cookie("Password",passWord);
cookie3.setMaxAge(60*60);
response.addCookie(cookie3);
}
else
{
Cookie[] cookies=request.getCookies();
if(cookies!=null)
for (Cookie cookie : cookies)
{
cookie.setMaxAge(0); response.addCookie(cookie);
}
Cookie cookie1=new Cookie("remember","false");
response.addCookie(cookie1);
}
(2).在勾选情况下,jquery实现读取cookie信息,放入表单页面中显示
需要导入scripts/jquery-1.7.2.min.js
//cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.min.js包
$(function()
{
if($.cookie("remember")=="true")
{
$("input[name='remember']").attr("checked",true);
$("input[name='Username']").val($.cookie("Username"));
$("input[name='Password']").val($.cookie("Password"));
}
});
2.页面验证码
(1).验证码的生成 在servlet中.先在内存中用画笔graphic画出随机验证码的同时,通过response获取输出流,用ImageIO打印图片,再将验证码保存在session中,在表单提交验证码时与seesion进行比对
@WebServlet("/CheckCodeServlet")
public class CheckCodeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private Random random=new Random();
public CheckCodeServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("hello world");
//内存绘制图片对象,采用RGB模式
BufferedImage image=new BufferedImage(130,20,BufferedImage.TYPE_INT_RGB);
//获取画笔
Graphics graphics=image.getGraphics();
//画前设置颜色
graphics.setColor(Color.white);
graphics.fillRect(0,0,130,30);
//矩形框大小
//绘制干扰斑点,即画实心圆
for(int i=0;i<28;i++)
{
//颜色随机
Font font=new Font("宋体",Font.BOLD,27);
graphics.setFont(font);
graphics.setColor(new Color(30,144,255));
int x1=random.nextInt(130);
int y1=random.nextInt(30);
int x2=random.nextInt(130);
int y2=random.nextInt(30);
graphics.fillOval(x1, y2,4,4);
}
//拼接生成验证码
StringBuilder builder=new StringBuilder();
for(int i=0;i<5;i++)
{
//设置字符颜色
builder.append((char)((int)'A'+random.nextInt(25)));
}
request.getSession().setAttribute("checkCode",builder.toString());
graphics.setColor(new Color(249,236,228));
for(int i=0;i<5;i++)
{
char item=builder.toString().charAt(i);
graphics.drawString(item+"",7+(i*25),18);
}
ImageIO.write(image,"png",response.getOutputStream());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
(2).验证码的点击更新和获取图片到页面
在登陆页面上设置img标签,设置属性src为checkCodeServlet
<img id="checkCoding" src="CheckCodeServlet" onclick="checkCode(this)"/>
js增加onclick监听事件,改变src,这样就会img标签重新获取调取checkCodeServlet达到刷新图片验证码的目的
<script type="text/javascript">
function checkCode(obj)
{
/*通过刷新img标签的路径,使其重新请求servlet*/
obj.src="CheckCodeServlet?"+new Date().getTime();
alert(obj.src);
}
</script>