使用HttpServlet完成一个假登录

HttpServlet抽象类

javax.servlet.http.HttpServlet 继承了 GenericServlet 抽象类,用于开发基于 HTTP 协议的 Servlet 程序由于 Servlet 主要用来处理HTTP的请求和响应所以通常情况下,编写的 Servlet 类都继承自 HttpServlet。在HTTP/1.1协议中共定义了7种请求方式,即GET、POSTHEADPUT、DELETETRACE和OPTIONSHttpServlet 针对这 7种请求方式分别定义了7 种方法,即 doGet()、 doPost()、doHead()、doPut()、doDelete()、 doTracel()和doOptions()。

HttpServlet 重写了service()方法,该方法会先获取客户端的请求方式然后根据请求方式调用对应doXxx方法。

HttpServlet的一些方法

  • getParameter() 根据表单的ame属性获取用户输入的值

  • getRequestURI()获取项目名和资源路径

  • getContextPath()获取项目名称

  • getServletPath()请求的资源路径

首先先展示最后做出来的做的三个页面。

一、第一步 书写前端页面JSP

先创建一个Web项目,我们在自带jsp下写第一个页面,在web里面建两个jsp文件写登录和注册的页面。

写一个from表单,里面写两个a标签链接,href里面的是登录和注册页面的链接。

<%--
  Created by IntelliJ IDEA.
  User: chenge
  Date: 2023/2/13
  Time: 19:09
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>这是一个web项目</title>
</head>
<body>
<h1>第一次学习Java Web!</h1>
<a href="Login.jsp">去登录</a>
<a href="zhuce.jsp">去注册</a>
</body>
</html>

<%--
  Created by IntelliJ IDEA.
  User: chenge
  Date: 2023/2/14
  Time: 10:35
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Login</title>
</head>
<body>
    <form action="login" method="post">
        账号:<input type="text" name="text" value=""><br>
        密码:<input type="password" name="pwd" value=""><br>
        <input type="submit" value="登录">
    </form>

</body>
</html>
<%--
  Created by IntelliJ IDEA.
  User: chenge
  Date: 2023/2/14
  Time: 10:35
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>zhuce</title>
</head>
<body>
<form action="zhuce" method="post">
    账号:<input type="text" name="text" value=""><br>
    密码:<input type="password" name="pwd" value=""><br>
    <input type="submit" value="注册">
</form>
</body>
</html>

二、第二步 书写xml 传递数据

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!-- 配置servlet类 -->
    <servlet>
        <!-- 起别名 -->
        <servlet-name>login</servlet-name>
        <!-- servlet类所在的位置:类的全类名就是 包名.类名 -->
        <servlet-class>com.chen.httpServlet.Login</servlet-class>
    </servlet>

    <!-- Servlet类的映射:Servlet用来处理哪个请求 -->
    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>zhuce</servlet-name>
        <servlet-class>com.chen.httpServlet.Zhuce</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>zhuce</servlet-name>
        <url-pattern>/zhuce</url-pattern>
    </servlet-mapping>

</web-app>

注册同理

三、第三步 Java类书写

在项目的src下建一个包 创建登录和注册的java类(继承HttpServlet 并实现doGet和doPost方法)

注意:在书写java类之前确认jar包已经导入(上一个博客写了如何导入jar包)

其中req参数是前端传输来到数据,这里写的全拼request

resp参数是响应的数据,这里写的全拼response

Requset和Response

  • Requset 和 Response 是有服务器创建的.我们只是使用

  • Requset 是来获取请求消息,Response 是来设置响应消息的

Requset 功能

1.获取请求行数据;

2. 获取 servlet 路径;

3. 获取get方式请求参数 ;

4. 获取请求

Response 功能

1.功能:主要是设置响应消息;

2. 服务器输出字符数据到浏览器注意事项;

从编写Servlet的过程中可以看出,doGet)或者doPost 方法中有两个参数,分别是HtpServletRequest和HttpServletResponse,当执行Servlet的时候会从HttpServletRequest读取请求信息,而将响应信息封装进HttpServletResponse对象中Servlet 处理 HTTP 请求。

Login(登录)Java类

package com.chen.httpServlet;

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

public class Login extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Login-get");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Login-post");

        //前端请求(request),后端处理后,最后给前端做出响应(response)

        //这三个都是获取请求的地址 相关
        String uri = request.getRequestURI();
        String contextPath = request.getContextPath();
        String servletPath = request.getServletPath();

        System.out.println(uri);
        System.out.println(contextPath);
        System.out.println(servletPath);

        //1.从请求中获取用户提交的参数(数据)
        request.setCharacterEncoding("utf-8");  //设置请求的编码格式为中文
        String text = request.getParameter("text"); //根据表单的name属性获取用户输入的值
        String pwd = request.getParameter("pwd");

        System.out.println(text);
        System.out.println(pwd);
        //2.根据用户提交的用户名和密码-----去数据库执行查询  select * from text where text=? and pwd=?
            //假登录,尝试使用Jdbc查询判断


        //3.判断成功要干什么? 判断失败要干什么?-----做出响应
        response.setCharacterEncoding("utf-8");    //设置相应的编码格式
        response.setContentType("text/html;charset=UTF-8");  //以什么样的格式 (文本/网页)响应
        if (text.equals("小糯米") && pwd.equals("1220")){
            //登陆成功
            response.getWriter().write("登录成功!");
        }else {
            response.getWriter().write("登录失败!");
        }
    }
}

Zhuce(注册)Java类

package com.chen.httpServlet;

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

public class Zhuce extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Zhuce-get");

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Zhuce-post");

        String uri = request.getRequestURI();
        String contextPath = request.getContextPath();
        String servletPath = request.getServletPath();

        System.out.println(uri);
        System.out.println(contextPath);
        System.out.println(servletPath);

        String text = request.getParameter("text");
        String pwd = request.getParameter("pwd");

        System.out.println(text);
        System.out.println(pwd);

        response.setCharacterEncoding("utf-8");    //设置相应的编码格式
        response.setContentType("text/html;charset=UTF-8");  //以什么样的格式 (文本/网页)响应
        if (text.equals("小糯米") && pwd.equals("1220")){
            //登陆成功
            response.getWriter().write("登录成功!");
        }else {
            response.getWriter().write("登录失败!");
        }
    }
}

中文乱码问题

中文乱码就是值在请求信息或者响应信息中包含的中文字符不能正常显示。产生原因无非就是客户端与服务器采用的编码方式不同导致的。

根据请求方式的不同,请求一般可以被分为两种:GET请求和POST请求,

POST请求

乱码的原因:POST 提交的数据在请求体中,其所使用的编码格式时页面一致(即utf-8)。request 对象接收到数据之后,会将数据放到request缓冲区,缓冲区的默认字符集是SO-8859-1(该字符集不支持中文),两者使用的字符集不一致导致乱码。

解决方案:在获取请求参数之前设置request缓冲区字符集为utf-8。

        //1.从请求中获取用户提交的参数(数据)
        request.setCharacterEncoding("utf-8");  //设置请求的编码格式为中文
        String text = request.getParameter("text"); //根据表单的name属性获取用户输入的值
        String pwd = request.getParameter("pwd");

        System.out.println(text);
        System.out.println(pwd);

ok啦,接下来运行就行了!!

猜你喜欢

转载自blog.csdn.net/weixin_67224308/article/details/129031881