建立一个登录界面,然后提交到servlet当中来进行处理操作,并为登录成功界面设置一个权限来使得用于不能够成功的界面进行随意的访问操作
1:建立一个登录界面login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录界面</title>
</head>
<body>
<form action="login" method="post">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
</body>
</html>
2:建立一个servlet对象来接收web页面发送来的请求数据并进行处理。loginServlet
package com.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 建立一个登录的servlet界面对象用于获取login界面当中所发送过来的请求参数数据信息
*/
@WebServlet("/loginServlet")
public class loginServlet extends HttpServlet {
private String username;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("执行dopost方法");
/*System.out.println(request.getAttribute("username"));此处使用getAttribute方法进行jsp页面对象当中的参数获取时,username对象的值将会为空。因为attribute方法
* 是用于进行对象当中属性参数的获取,但是表单当中提交的数据信息值则是以参数的形式跟在了表单所提交的URL地址的后面,所以使用attribute方法是无法获取到表单当中的数据
* 必须要使用Parameter方法才能够对表当当中的数据来进行获取操作
* */
username=request.getParameter("username");
System.out.println("username="+username);
if(username.equals("qingzhiyu"))
{//当登录名为qingzhiyu时,将web容器对象所接收到的请求数据信息和响应直接通过服务器对象来转发到success.jsp页面当中
request.getRequestDispatcher("success.jsp").forward(request, response);
}
else
{//当登录信息的用户名不正确时,则web容器对象直接发送一个响应给客户端让客户端重新取访问登录界面当中的数据信息来重新进行数据信息的填写操作
System.out.println("您所输入的用户名错误,请重新进行信息的输入操作");
response.sendRedirect("login.jsp");
}
}
}
3:对web.xml当中进行信息的配置操作,以使得页面可以对servlet类进行访问操作
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>过滤器实例</display-name>
<servlet>
<servlet-name>log</servlet-name>
<servlet-class>com.servlet.loginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>log</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<filter>
<filter-name>successFilter</filter-name>
<filter-class>com.filter.successFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>successFilter</filter-name>
<url-pattern>/success.jsp</url-pattern>
</filter-mapping>
</web-app>
以上代码基本可以实现一个简单的登录功能但是有一个缺点是用户可以直接通过success.jsp页面的URL地址值来实现对jsp页面当中的资源的访问操作,从而跳过了登录界面使得success.jsp页面可以随意被访问而不安全。
要解决这一问题则要为success.jsp页面配置一个过滤器对象来对访问success.jsp的请求数据进行过滤操作从而避免任何用户都能够对success.jsp资源进行随意访问的事情发生。
4:为success.jsp页面建立一个过滤器对象successFilter
package com.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jspsmart.upload.Request;
public class successFilter implements Filter {
@Override
public void destroy() {
System.out.println("对过滤器进行销毁操作");
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
System.out.println("执行filter方法");
if(req.getParameter("username")==null)
{
/*注:采用服务器端跳转时所采用的是request对象当中的方法,因为web容器对象执行的是将当前请求对象转发到login.jsp页面当中来进行页面当中的资源的获取操作,然后将所获取
* 到的页面资源通过响应对象来显示到浏览器当中。
* 而采用客户端的跳转时所调用的是response对象当中的方法,web容器对象先通过响应对象来告诉客户端来让客户端来发送一个新的请求来对login.jsp页面当中的资源进行访问操作
* 然后通过响应对象来将所访问到的资源在浏览器当中进行显示。
*/
System.out.println("用户名为空,请进行登录操作!");
//采用服务器端跳转的方式来将当前的请求对象数据跳转到登录界面当中去
/*req.getRequestDispatcher("login.jsp").forward(req, res);*/
//采用客户端跳转的方式来将页面跳转到登录界面当中去
HttpServletResponse response=(HttpServletResponse)res;
response.sendRedirect("login.jsp");
}
else
chain.doFilter(req, res);//当当前请求对象当中的username不为空时,过滤器对象将会将当前请求对象传递到success.jsp页面当中
}
@Override
public void init(FilterConfig arg0) throws ServletException {
System.out.println("执行过滤操作");
}
}