(我记得:final定义的方法,子类不可以重写,但是本类可以重载)

login.jsp的功能是:呈现登陆页面

CheckcodeServlet.java的功能是:负责生成验证码的servlet

LoginServlet.java的功能是:判断用户输入的用户名、密码、以及验证码是否正确的servlet

LogoutServlet.java的功能是:销毁session,退出系统,返回到login.jsp页面

第一段代码是login.jsp

java windows的用户名 java用户名密码登录_用户名

这段代码是呈现登陆页面,需要注意的点如下

1、



${error}



在LoginServlet.java中有在输入错误时设置error变量。这里用到el表达式,默认会依次搜索pageScope-->requestScope-->sessionScope-->applicationScope,然后在requestScope中找到error的值

2、

这行代码要实现的功能是如果用户输入的用户名密码或验证码错误(不一定,两句话后qq那种情况也是)然后重定向回login.jsp时,将用户上次输入的用户名、密码默认显示在输入框中,避免再次输入(譬如秋秋登陆时显示上次登陆的账号一样)。实现的方法是value="${param.username}",用到了el表达式中的param隐含对象

注意error是从request中取的,而username是从parameter中取的,因为如果先String username = request.getParameter("username"),然后在request.setAttribute("username",username),然后密码也设,将来可能还有描述也设,就会写很多的request.setAttribute("password",password)~~,太繁琐,而其实只要上次有输入过用户名密码~~就会存在parameter中,且从LoginServlet.java转向login.jsp是通过forward,request对象是继承的,就可以从上次的parameter中取出来了

3、

function reloadcode(){

var verify=document.getElementById('safecode');

verify.setAttribute('src','CheckcodeServlet?'+Math.random());

}

验证码:

当点击图片时,意味着需要重新换一张验证码,这时调用reloadcode()这段javascript代码,即修改img的src,这时系统会重新生成验证码,其实这段代码还可以简化为

function reloadcode(verify){

verify.setAttribute('src','CheckcodeServlet?'+Math.random());

}

验证码:

修改的地方即当img中没有id时(当然有id时也可以不用id,而采用这种方法),直接把this传过去

第二段代码是CheckcodeServlet.java

java windows的用户名 java用户名密码登录_java windows的用户名_02

这段代码是负责生成验证码的servlet,需要注意的点如下:

1、下面这段代码是web.xml中的一部分

java windows的用户名 java用户名密码登录_用户名_03

在CheckcodeServlet中的

public void init(ServletConfig config) throws ServletException {

width = Integer.parseInt(config.getInitParameter("width"));

height = Integer.parseInt(config.getInitParameter("height"));

number = Integer.parseInt(config.getInitParameter("number"));

codes = config.getInitParameter("codes");

}

即是从wen.xml的配置文件中取出init-param参数

2、//将验证码放到HTTP SESSION中

request.getSession().setAttribute("codes", sb.toString());在LoginServlet.java中检验输入的验证码正确与否时会用到session中的codes(即CheckcodeServlet.java产生的验证码)

第三段代码是LoginServlet.java

java windows的用户名 java用户名密码登录_java 用户名密码验证码验证_04

这段代码是判断用户输入的用户名、密码、以及验证码是否正确的servlet,需要注意的点如下:

1、String checkcode = request.getParameter("checkcode"); //用户输入的验证码

String sessionCodes = (String)request.getSession().getAttribute("codes");

if(!sessionCodes.equalsIgnoreCase(checkcode)) {

request.setAttribute("error", "验证码错误");

request.getRequestDispatcher("/backend/login.jsp").forward(request, response);

return;

}

首先从parameter中取出用户在login.jsp页面输入的验证码,其次从session中取出codes(即CheckcodeServlet中放入session中的codes),然后两者相比较,这里有个小知识点sessionCodes.equalsIgnoreCase(checkcode),即忽略大小写判断是否相等。

2、   request.setAttribute("error", "验证码错误");

request.getRequestDispatcher("/backend/login.jsp").forward(request, response);

当验证码(或者用户名、密码)输入错误时,设置error,然后会再login.jsp中取出error显示error的具体信息



${error}



3、当验证码正确时,调用"select * from t_admin where username = ?",判断数据库中是否存在此用户,如果存在,则调用"if(!password.equals(psw))",判断密码是否正确

4、request.getSession().setAttribute("LOGIN_ADMIN", username);            把登陆用户的信息存入session中,后面还得补充……

第四段代码是LogoutServlet.java

java windows的用户名 java用户名密码登录_java windows的用户名_05

这段代码是实现销毁session,退出系统,返回到login.jsp页面的servlet,需要注意的点如下:

1、request.getSession().invalidate();通过调用invalidate()方法,把session中的所有数据清空,同时将session销毁