Servlet相关知识+简单的登入页面

一、Servlet相关知识

1.什么是Servlet?

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者

2.Servlet的生命周期

①客户端请求Servlet,加载Servlet类到内存

②实例化:调用Servlet的构造器创建一个具体的Servlet对象的过程

③调用init()方法初始化该 Servlet
 ps:第二和第三步是在第一次访问的时候创建servlet程序会调用 

④执行service()方法(根据请求方法不同调用doGet() 或者 doPost(),此外还有doHead()、doPut()、doTrace()、doDelete()、doOptions()、destroy())。
ps:第四步,每次访问都会调用

⑤加载和实例化 Servlet。
ps:这项操作一般是动态执行的。

⑥执行destroy()销毁方法
ps:第六步,在web工程停止的时候调用

如图所示:
在这里插入图片描述

3.分发请求

get->doGet
post->doPost

4.servlet加载

默认:1 (当访问时 ,第一次加载)
0(>=0) tomcat启动就加载

5.HttpServlet

  • 在我们创建一个Servlet类后我们会继承HttpServlet类。
    在这里插入图片描述
  • 查看HttpServlet源码可知道,HttpServlet继承GenericServlet。
  • 因为GenericServlet是抽象类,所以HttpServlet也是抽象类。
    在这里插入图片描述

6.ServletRequest接口

doGet()和doPost()方法参数类型是HttpServletRequest,HttpServletResponse,分别实现ServletRequest,ServletResponse这两个接口

接收请求参数

  • getParameter(String p)
  • getParameterValues(String p)(当一个参数名对应多个参数值)

传递属性值

  • ${msg}
<% String msg = (String) request.getAttribute("msg"); %>

7.HttpServletResponse对象

响应数据
getWriter() ------获取字节流

getOutputStream() ------获取字节流,能够响应任意类型的数据

8.ServletResponse和RequestDispatcher接口

  • 转发与重定向

这里主要设计转发和重定向 ,前者使用RequestDispatcher,后者使用HttpServletResponse。

  • 请求转发与重定向的区别

请求转发是服务端跳转,重定向是客户端跳转
请求转发是一次请求,而重定向是两次请求
请求转发可以共享request数据,而重定向不可以
请求转发地址栏不发生任何变化,重定向地址会改变
请求转发只能跳转到当前项目下的资源,重定向可以任意资源(可跨越服务器)

  • 回应字符流

PrintWriter out = resp.getWriter();

ps:写入你想要的内容之后 添加上下面的代码
out.flush();
out.close();

  • 回应字节流

ServletOutputStream

api:commons-io需要去官网下载一下
https://commons.apache.org/proper/commons-io/download_io.cgi

字节流: 它处理单元为1个字节(byte),操作字节字节数组,存储的是二进制文件,如果是音频文件、图片、歌曲,就用字节流好点(1byte = 8位)

字符流: 它处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,如果是关系到**中文(文本)**的,用字符流好点(1Unicode = 2字节 = 16位);

9.路径

  • HttpServletRequest读取路径
req.getContextPath()
req.getServletPath()
req.getPathInfo()
  • 实际站点
req.getServletContext()
req.getRealPath("/")
  • 转发路径
  • 重定向路径

二、简单的登入页面

  • UserServlet.java
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;
import java.io.PrintWriter;

@WebServlet("/login")
public class UserServlet extends HttpServlet {

    /**
     * 用户登入
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        String user = req.getParameter("Username");
        String psw = req.getParameter("Password");
        PrintWriter out = resp.getWriter();
        if (user.equals("cracker") && psw.equals("123456")) {
            resp.sendRedirect("welcome.html");

        } else {

            out.println("<html><head><title><title>登陆成功的页面</title></title></head><body bgcolor='orange'><a href='login.html'>重新登陆</a><h1>对不起,用户名或密码错误,请重新输入!</h1><hr></body></html>");

        }
    }
}

  • login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户登入</title>
</head>
<body>
<div style="text-align: center">
    <form action="/login" method="post">
        用户姓名:<input type="text" name="Uername"><br>
        用户密码:<input type="password" name="Password"><br>
        <input type="submit" name="提交" style="text-align: center">
    </form>
</div>
</body>

</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值