HttpServlet用户登录

1. 了解 Servlet 类 和 HttpServlet 类

  1. servlet是Java编程语言中的一个特殊的类,它被用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序。
  2. 一个的类要么继承某个类,要么实现某个接口。
  3. Servlet 的父类是 HttpServlet 类。
  4. HttpServlet 类是一个抽象类,扩展了GenericServlet 类。HttpServlet 类用于创建一个适用于Web站点并支持HTTP协议的Servlet。
  5. 目的是为了实现 doGet 和 doPost 方法,用以处理用户的get或者post请求,再将此 servlet 类配置到 web.xml,映射该servlet类

2. 如何下载配置 Servlet 插件包

step1:去网上找 Servlet-api 的 jar 包,选择相应的版本,并他复制下来
jar包下载地址
我选择的版本

HttpServlet用户登录_第1张图片

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

step2:放置的位置的位置

HttpServlet用户登录_第2张图片

3. 配置Servlet的两种方法

方法一:在web.xml文件中配置

HttpServlet用户登录_第3张图片

  <servlet>
    <servlet-name>loginContrller</servlet-name>
    <servlet-class>cn.edu.mju.project1.controller.LoginContrller</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>loginContrller</servlet-name>
    <url-pattern>/login</url-pattern>
  </servlet-mapping>
方法二:注解配置

HttpServlet用户登录_第4张图片


4. 具体的步骤

1. 在 project1/src/main 创建一个新的目录( Directory)java,把这个目录标记为Sources Root。

HttpServlet用户登录_第5张图片

2. 创建包HttpServlet用户登录_第6张图片
2. 创建 LoginController(LoginServlet) 类继承于HttpServlet类

HttpServlet用户登录_第7张图片

2. 重写(override)HTTPServlet 里面的 doget和 dopost 方法实现用户登录

HttpServlet用户登录_第8张图片
HttpServlet用户登录_第9张图片

代码如下:

package cn.edu.mju.project1.controller;
import javax.servlet.http.HttpServlet;
import javax.servlet.annotation.WebServlet;

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

import java.io.PrintStream;
import java.io.PrintWriter;

//用@WebServlet注解来代替web.xml里的配置servlet的作用
@WebServlet("/login")
public class LoginContrller extends HttpServlet {
    @Override
    /*
    公共接口类HttpServletRequest继承自ServletRequest。
    客户端浏览器发出的请求被封装成为一个HttpServletRequest对象。
    对象包含了客户端请求信息包括请求的地址,请求的参数,提交的数据,上传的文件客户端的ip甚至客户端操作系统都包含在其内。
    HttpServletResponse继承了ServletResponse接口,并提供了与Http协议有关的方法,这些方法的主要功能是设置HTTP状态码和管理Cookie。
     */
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /*设置解码方式
        1、pageEncoding="UTF-8"的作用是设置JSP编译成Servlet时使用的编码。 
        2、contentType="text/html;charset=UTF-8"的作用是指定对服务器响应进行重新编码的编码。 
        3、request.setCharacterEncoding("UTF-8")的作用是设置对客户端请求进行重新编码的编码。
        4、response.setCharacterEncoding("UTF-8")的作用是指定对服务器响应进行重新编码的编码。 
        response.setCharacterEncoding("UTF-8")的作用是指定对服务器响应进行重新编码的编码。
        同时,浏览器也是根据这个参数来对其接收到的数据进行重新编码(或者称为解码)。
        所以在无论你在JSP中设置response.setCharacterEncoding ("UTF-8")或者response.setCharacterEncoding("GBK"),
        浏览器均能正确显示中文(前提是你发送到浏览器的数据编码是正确的,比如正确设置了pageEncoding参数等)。
         */
        resp.setCharacterEncoding("utf-8");
        //获取页面输出流
        PrintStream out = new PrintStream(resp.getOutputStream());
        //输出HTML界面
        //只需要输出表单就好的,重复的在showMsg方法中输出
        //用一个字符串保存数据然后传给showMsg方法
        //不直接输出,先把它生成到动态字符串的一个对象(StringBuilde)里面去
        /*
        StringBuilder又称为可变字符序列(不再创建新的String对象),它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。
        原来StringBuilder是个字符串的缓冲区,即它是一个容器,容器中可以装很多字符串。并且能够对其中的字符串进行各种操作。
         */
        StringBuilder StringBuilder = new StringBuilder();
        /*
       StringBuilder中的 append() 方法:追加内容到当前StringBuilder对象的末尾
       StringBuilder中的 insert() 方法:将内容插到 StringBuilder 对象的指定位置
       StringBuilder中的 toString() 方法:将 StringBuilder 对象转化为String对象
       StringBuilder中的 intlength() 方法:获取字符串的长度

         */
        StringBuilder.append("
"); StringBuilder.append("登入名称:
"
); StringBuilder.append("登入密码:
"
); StringBuilder.append("
"
); StringBuilder.append(""
); showMsg(resp,StringBuilder.toString()); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { /* getParameter("name")方法,它是一种获取参数的方法。把jsp文件中的数据读取到出来。然后就可以封装利用起来。 */ String loginName = req.getParameter("loginName"); String loginPwd = req.getParameter("loginPwd"); System.out.println(loginName + "---" + loginPwd); String str = null; if ("47".equals(loginName) && "1234".equals(loginPwd)) { str = "你好," + loginName; } else { str = "账号或密码错误" ; } showMsg(resp,str); } //private:当前类可以访问,出了这个类就不可以了。 //protected:别的类访问不到,但子类可以。 //传一个resp对象过来,传一个msg过来(要显示的页面) private void showMsg(HttpServletResponse resp,String msg){ //设置解码方式 resp.setCharacterEncoding("utf-8"); //获取页面输出流 try { PrintStream out = new PrintStream(resp.getOutputStream()); //输出HTML界面 out.println(""); out.println(""); out.println(""); out.println("login"); out.println(""); out.println(""); out.println(msg); out.println(""); out.println(""); out.close(); //IO的异常是Exception的子类,所以去捕捉所有的异常 }catch(Exception ex){ System.out.println(ex.getMessage()); } } }

你可能感兴趣的:(JAVA,java,servlet,login,web,app)