Servlet概念——使用Idea设计登陆页面完并完成假登录

1.servlet的概念


1.1什么是Servlet?
学习java web的第一步就是了解Servlet,Servlet也叫"server applet”是java服务器的小程序,它是-种基于Java 技术的Web 组件,运行在服务器端,由Servlet 容器管理,用来生成动态的Web内容。
1.2容器的概念
Servlet 容器就是 Servlet 代码的运行环境(运行时),它除了实现 Servlet 规范定义的各种接口和类,为 Servlet 的运行提供底层支持,还需要管理由用户编写的 Servlet 类,比如实例化类 (创建对象),调用方法、销毁类等。
1.3编写的 Servlet类为什么需要 Servlet 容器来管理?
这是因为我们编写的 Servlet 类没有 main0 函数,不能独立运行,只能作为一个模块被载入到 Servet 容器,然后由 Servlet 容器来实例化,并调用其中的方法
一个动态页面对应一个Servlet类,开发一个动态页面就是编写一个Servlet 类,当用户请求到达时,Servlet 容器会根据配置文件(webxml)或者注解来决定调用哪个类

2.IDEA开发Servlet

2.1怎么编写Servlet类
使用Servlet创建动态网页的第一步,就是创建Servlet类。

Servlet 规范的最顶层是一个名为 javax.servlet.Servlet 的接口,所有的 Servlet 类都要直接或者间接地实现该接口。直接实现 Servlet接口不太方便,所以 Servlet 又内置了两个 Servlet 接口的实现类(抽象类),分别为GenericServletHttpServlet,因此,创建servlet 类有如下三种方式:

实现 javax.servlet.Servlet 接口,重写其全部方法。
继承 javax.servlet.GenericServlet 抽象类,重写service()方法。
继承 javax.servlet.http.HttpServlet 抽象类,重写doGet()或doPost()方法。

一般第三种方式最多。

2.2GenericServlet 、Servlet和httpServler他们之间的关系
  1. GenericServlet 是实现了 Servlet 接口的抽象类。

  1. HttpServlet类继承了GenericServlet类,具有GenericServlet的一切特性。

  1. Servlet程序(MyServlet 类)是一个实现了Servlet 接口的Java类。

  1. MyServlet为自己编写的Servlet类。

2.3核心API
  • Servlet接口

javax.servlet.Servlet是 Servlet API 的核心接口,所有的 Servlet 类都直接或间接地实现了这-接口,Servlet 接口中定义了5个方法。

返回值

方法

备注

void

init(ServletConfig config)

Servlet实例化之后,由Servlet容器调用,用来初始化Servlet对象。该方法只能被调用一次。参数config 用来向Servlet 传递配置信息

void

service(ServletRequestreq,ServletResponse res)

Servlet容器调用该方法处理客户端请求。

void

destroy0)

服务器关闭重启或者Servlet对象被移除时,由Servlet容器调用,负责释放

Servlet 对象占用的资源。

ServletConfig

getServletConfig()

该方法用来获取ServletConfig对象,该对象中包含了Servlet的初始化参数

String

getServletInfo0)

该方法用于获取Servlet的信息,例如作者、版本版权等

  • GenericServlet 抽象类

javaxservletGenericServlet 实现了Servlet 接口,并提供了除service()方法以外的其他四个方法的简单实现。通过继承GenericServlet 类创建Servlet,只需要重写service()方法即可,大大减少了创建Servlet 的工作量。

GenericServlet类中还提供了以下方法,用来获取Servlet的配置信息。

返回值

方法

备注

String

getlnitParameter(String name)

返回名字为name的初始化参数的值,初始化参数在web.xml中进行配置。如果参数不存在,则返回null。

Enumeration<string>

getlnitParameterNames()

返回Servlet所有初始化参数的名字的枚举集合,若Servlet没有初始化参数,返回一个空的枚举集合。

ServletContext

getServletContext()

返回Servlet上下文对象的引用。

下面这幅图就是servlet主要的类之间的关系

genericservlet是个抽象的父类,必须给出子类才能实例化它。

httpservlet是个子类,继承了genericservlet一切的特性,当然自己还扩张了doput dotrace等方法对应处理http协议里的命令请求响应过程。
  • HttpServlet抽象类

javax.servlet.http.HtpServlet 继承了 GenericServlet 抽象类,用于开发基于 HTTP 协议的 Servlet 程席由于 Servlet 主要用来外理HTTP的请求和响应,所以通常情况下,编写的Servlet类都继承自HttpServlet。

在HTTP/1.1协议中共定义了7种请求方式,即GET、POSTHEADPUT、DELETETRACE和OPTIONS。HttpServlet 针对这7种请求方式分别定义了7种方法,即 doGet0、doPost)、 doHead、doPut)doDelete)、 doTrace))和doOptions().

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

2.3下面只要简洁介绍一下httpservletrequest和httpservletresponse对象
  • httpservletrequest:包装了从客户端提交过来的数据(ip地址,表单数据和Cookies信息)

  • httpservletresponse:包装向客户端写出的数据。

使用Idea设计登陆页面完并成假登录


  1. 创建web项目,部署到tomcat服务器中

  1. 在index.jsp首页中添加一个a标签,跳转到登录页面

<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2023/2/13
  Time: 15:21
  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>
  <h2>欢迎学习</h2>
  <a href="login.jsp">去登录</a>
  </body>
</html>

3.创建一个login.jsp作为登录页面,书写form表单指定是提交地址和提交方式

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录页面</title>
</head>
<body>
     <h2>登录</h2>
<%-- --%>
<form action="login" method="post">
    账号:<input type="text" name="user" value="" /><br/>
    密码:<input type="password" name="pwd" value="" /><br/>
    <input type="submit" value="登录" />
</form>
</body>
</html>

4.在web.xml中配置servlet的映射关系

<?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-name>login</servlet-name>
        <servlet-class>com.zhao.servlet.Login</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>login</servlet-name>
       <url-pattern>/login</url-pattern>
    </servlet-mapping>
</web-app>

5.创建一个Java类继承HttpServlet,在doPost中获取请求参数

package com.zhao.servlet;

import javax.servlet.*;
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...doGet");
        doPost(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Login...doPost");
        //request用来处理请求   response用来处理响应

        //获取请求地址地四个方法
        String requestURI = request.getRequestURI();//项目名称/资源名称
        StringBuffer requestURL = request.getRequestURL();//完整地请求地址
        String contextPath = request.getContextPath();//项目名称
        String servletPath = request.getServletPath();//资源名称

//        System.out.println(requestURI);
//        System.out.println(requestURL);
//        System.out.println(contextPath);
//        System.out.println(servletPath);

        //1.获取请求地参数:根据请求参数地name属性获取提交的值
        request.setCharacterEncoding("utf-8");//设置请求的地编码格式

        String user = request.getParameter("user");
        String pwd = request.getParameter("pwd");
        System.out.println("-------------------");
        System.out.println(user);
        System.out.println(pwd);  

    }
}

6.根据输入的用户名和密码执行数据库地查询,判断登录成功和失败给前端响应信息

package com.zhao.servlet;

import javax.servlet.*;
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...doGet");
        doPost(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Login...doPost");
        //request用来处理请求   response用来处理响应

        //获取请求地址地四个方法
        String requestURI = request.getRequestURI();//项目名称/资源名称
        StringBuffer requestURL = request.getRequestURL();//完整地请求地址
        String contextPath = request.getContextPath();//项目名称
        String servletPath = request.getServletPath();//资源名称

//        System.out.println(requestURI);
//        System.out.println(requestURL);
//        System.out.println(contextPath);
//        System.out.println(servletPath);

        //1.获取请求地参数:根据请求参数地name属性获取提交的值
        request.setCharacterEncoding("utf-8");//设置请求的地编码格式

        String user = request.getParameter("user");
        String pwd = request.getParameter("pwd");
        System.out.println("-------------------");
        System.out.println(user);
        System.out.println(pwd);

        //2.根据输入的用户名和密码执行数据库地查询 select * from user where user=? and pwd=?

        response.setCharacterEncoding("utf-8");//设置响应地编码格式
        response.setContentType("text/html;charset=UTF-8");//设置响应地格式

        if (user.equals("张三") && pwd.equals("666")){
            //3.给前端做出响应
            //登录成功
            response.getWriter().println("成功!");//获取响应地输出字符流,像前端打印内容
        }else {
            //登录失败
            response.getWriter().println("失败!");
        }

    }
}
  • 7
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值