实现登录功能
第一步:创建login.jsp登录页面
在所创建的动态项目中,于WebContent文件夹下创建login.jsp。其显示效果类似于下图:
对应源代码如下:
<html>
<body> <!-- 需要注意的是:xml配置文件中的url-pattern这里写的是/LoginServlet,而在jsp中form表单 的action写的是LoginServlet,而不是/LoginServlet。 -->
<form action="LoginServlet" method="post">
<table>
<tr>
<td colspan="2">登录窗口</td>
</tr>
<tr> <td>用户名:</td>
<td><input type="text" name="username" /> </td> </tr>
<tr> <td>密码:</td>
<td><input type="password" name="password" />
</td>
</tr>
<tr> <td colspan="2">
<input type="submit" value="登录" />
<a href="register.jsp">注册</a>
</td> </tr>
</table>
</form>
</body>
</html>
第二步:创建处理登录判定的Servlet:LoginServlet
在第一步中的login.jsp中,我们需要特别注意这句代码:
这行代码中有两个属性,说明如下:
- action属性:点击登录按钮后,接下来的动作,这里是转到了LoginServlet。
- method属性:表单中数据的提交方式。
接下来,再src文件夹下创建LoginServlet类,其中的doPost()方法参考代码如下:
/**
1. @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("utf-8");//设置request编码
response.setContentType("text/html;charset=utf-8");//设置response 编码
String id = request.getParameter("username");//获取表单用户名
String pwd = request.getParameter("password");//获取表单密码
if(pwd==null || pwd.equals("")){//若没有密码,或为空
response.getWriter().print("密码不能为空!");//在当前页面 (login.jsp)添加显示一句话。
return;//跳出doPost()方法,等待login.jsp页面再次提交表单。
} if(id==null || id.equals("")){//若没有账号,或为空
response.getWriter().print("用户名不能为空!");//在当前页面 (login.jsp)添加显示一句话。
return;//跳出doPost()方法,等待login.jsp页面再次提交表单。
} if(id.equals("sam") && pwd.equals("123")) {//用户名、密码正确
request.getRequestDispatcher("welcome.jsp").forward(request, response);//页面转发 //页面跳转的方式:(1)转发:foward(地址栏地址不变);(2)重定向: redirect(地址栏地址变化)
}else//用户名、密码错误
{ response.getWriter().print("用户名或密码有误,请重新输 入!");//在当前页面(login.jsp)添加显示一句话。
return;//跳出doPost()方法,等待login.jsp页面再次提交表单。
}
}
}
第三步、LoginServlet在项目配置文件web.xml中注册:
- servlet 是用来注册Servlet的存放地址 servlet-name 这个是我们要注册servlet的名字 servlet-class 这个就 是指向我们要注册的servlet 的类地址, 要带包路径。
课堂笔记1022.md 10/22/2019
3 / 6 - servlet-mapping 是用来配置我们注册的组件的访问路径
- servlet-name 要与前面写的servlet的名字一致
- url-pattern 配置这个组件的访问路径
- 实例
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>sam.his.servlet.LoginServlet</servlet-class> <!--存放路径 -->
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name> <!-- 与上面的
<servlet-name> 要一致 --> <url-pattern>/LoginServlet</url-pattern> <!-- 访问路径 -->
</servlet-mapping>