JSP+Servlet + Tomcat实现用户登录(一)简易登录功能【JavaWeb、无数据库】

1.创建一个Java Enterprise项目

对于企业版,直接创建Java Enterprise即可

对于社区版,需要创建Maven项目之后,手动配置Java Enterprise原始目录

JSP+Servlet + Tomcat实现用户登录(一)简易登录功能【JavaWeb、无数据库】_第1张图片

默认后,直接下一步即可

我们发现其实默认就会带上Servlet包

JSP+Servlet + Tomcat实现用户登录(一)简易登录功能【JavaWeb、无数据库】_第2张图片

创建完成后,会得到以下目录

JSP+Servlet + Tomcat实现用户登录(一)简易登录功能【JavaWeb、无数据库】_第3张图片

2.创建Login.jsp

项目创建完成后,在webapp目录下创建login.jsp

点击刚才创建的jsp文件,我们会得到原始的jsp文件

JSP+Servlet + Tomcat实现用户登录(一)简易登录功能【JavaWeb、无数据库】_第4张图片

修改title

title将会是显示在页面头部的信息

修改成登录

在body中添加信息

在body中随便添加一点信息,方便后续查看页面是否配置成功

JSP+Servlet + Tomcat实现用户登录(一)简易登录功能【JavaWeb、无数据库】_第5张图片

3.配置首页

打开webapp->web.xml文件

输入以下内容

<welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
    </welcome-file-list>

出现下列页面则配置成功

JSP+Servlet + Tomcat实现用户登录(一)简易登录功能【JavaWeb、无数据库】_第6张图片

4.完成基础login页面

在login.jsp中完成基础表单填写


显示出页面

JSP+Servlet + Tomcat实现用户登录(一)简易登录功能【JavaWeb、无数据库】_第7张图片

5.响应登录请求

当前是无法进行对登录进行响应的,需要创建对应的servlet响应请求

jsp发送action

首先,对login.jsp文件继续改写

使其完成对请求的发送

  • form添加action=“login
  • 设置请求方法
<form action="login" method="post">
        <label>
            用户名:
            <input name="userName" />
        </label>
        <br />

        <label>&nbsp 码:
            <input name="passWord" />
        </label>
    </form>

这里注意的是:action不要加上/,会被解析成跳转至指定的路径

创建LoginServlet

  • 添加注解

  • 继承HttpServlet

  • 重写doGet

  • 重写doPost

为什么自定义LoginServlet只要重写doGet和doPost方法?

两个方法如果不被重写,那么就会默认调用HttpServlet中的代码。

我们来看HttpServlet源码中doGetdoPost

protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException
    {
        String protocol = req.getProtocol();
        String msg = lStrings.getString("http.method_get_not_supported");
        if (protocol.endsWith("1.1")) {
            resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg);
        } else {
            resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg);
        }
    }


protected void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException
    {
        String protocol = req.getProtocol();
        String msg = lStrings.getString("http.method_post_not_supported");
        if (protocol.endsWith("1.1")) {
            resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg);
        } else {
            resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg);
        }
    }
  • 获取协议

  • 获取国际化字符串

  • 判断协议

    • HTTP/1.1

      • 是——返回405
      • 不是——返回400

这样就无法对post请求和get请求进行响应了

JSP+Servlet + Tomcat实现用户登录(一)简易登录功能【JavaWeb、无数据库】_第8张图片

继承HttpServlet,重写方法

继承HttpServlet后,按住键盘ctrl+o

选择重写方法——doGet 和 doPost

JSP+Servlet + Tomcat实现用户登录(一)简易登录功能【JavaWeb、无数据库】_第9张图片

修改doGet请求

因为get会以明文的形式显示在URL上,所以选择在doPost中写相关逻辑代码

在doGet中直接调用doPost方法即可

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req , resp);
    }

创建doPost请求

首先获取用户名和密码这两个参数,然后对账号密码进行判断

  • 成功——重定向至index.jsp
  • 失败——转发至当前页面
 @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String userName = req.getParameter("userName");
        String passWord = req.getParameter("passWord");
        if(canLogin(userName , passWord)){
            resp.sendRedirect("index.jsp");
        }else{
            req.getRequestDispatcher("login.jsp").forward(req , resp );
        }
    }
    private boolean canLogin(String userName , String passWord){
        if("Leo".equals(userName)){
            if("1".equals(passWord)){
                return true;
            }
        }
        return false;
    }

为什么登陆成功需要sendRedirect,而登陆失败要forward

转发有一个特点——浏览器地址不会发生改变

也就是说,在servlet进行请求转发时,按下F5进行刷新,就会重复发起一起请求,造成表单的重复提交

因此,在表单提交的地方,不能使用转发作为跳转页面的方式

我们做一个实验就知道了

这里,我在登陆的那一刻,按下了刷新,出现了两次表单验证

JSP+Servlet + Tomcat实现用户登录(一)简易登录功能【JavaWeb、无数据库】_第10张图片

而在登陆成功后使用redirect则不会出现以上情况

JSP+Servlet + Tomcat实现用户登录(一)简易登录功能【JavaWeb、无数据库】_第11张图片

添加注解

在完成后,在类的最上方添加注解@WebServlet——与登录form的action对应

@WebServlet("/login")

本阶段代码

package com.example.Login;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req , resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String userName = req.getParameter("userName");
        String passWord = req.getParameter("passWord");
        if(canLogin(userName , passWord)){
            resp.sendRedirect("index.jsp");
        }else{
            req.getRequestDispatcher("login.jsp").forward(req , resp );
        }
    }
    private boolean canLogin(String userName , String passWord){
        if("Leo".equals(userName)){
            if("1".equals(passWord)){
                return true;
            }
        }
        return false;
    }
}

实验结果

JSP+Servlet + Tomcat实现用户登录(一)简易登录功能【JavaWeb、无数据库】_第12张图片

你可能感兴趣的:(后端学习,数据库,servlet,java,web,Javaweb)