servlet 学习笔记

1、servlet基础知识

1.1、什么是servlet?(what)

Servlet是运行在服务器上的一个Java程序,可以接收客户端发来的请求,并响应数据给客户端。
Servlet是JavaWeb三大组件之一,三大组件分别是Servlet程序、Filter过滤器、Listener监听器

1.2、为什么要使用servlet?(why)

我们是web容器的组件之一,既然学习web,那么三大组件必不可少。而我们之前所学的jsp本质上是一个java类。
举个例子:demo.jsp,编译后生成了demo.java和demo.class文件,而这两个文件中会导入有关于servlet的包,那么学习servlet就必不可少了。

1.3、怎么使用servlet?(how)

我们可以继承HttpServlet类或者实现Servlet类来实现这个类servlet化

1.4、servlet知识点

  1. servlet的生命周期
  1. 执行Servlet程序的构造方法
  2. 执行init方法
  3. 执行service方法
  4. 执行destroy方法
    注意:其中1和2是在初次访问并创建Servlet程序时会执行(每次启动服务只执行一次),第3步每次刷新 (访问)都会执行,第4步点击停止时会执行一次
  1. servlet的继承关系:
    在这里插入图片描述

  2. servletConfig接口:

  1. 从名字来看,得知此接口中是Servlet程序的配置信息:
    (1) Servlet程序和ServletConfig对象都是由Tomcat负责创建,编程人员负责使用
    (2) Servlet程序默认是第一次访问时创建,每个Servlet程序创建时对应的创建ServletConfig对 象,二者相互对应,某个Servlet程序只可以获得他对应的ServletConfig对象,无法获得别的 Servlet程序的ServletConfig对象
  1. ServletConfig接口的三大作用:
    (1) 可以获取Servlet程序的别名(即web.xml的的内容)
    (2) 可以获取web.xml的初始化参数的值
    (3) 可以获取ServletContext对象
  1. servletContext接口:
  1. ServletContext接口表示Servlet上下文对象
  2. 一个web工程只有一个ServletContext对象实例
  3. ServletContext是在web工程启动时创建,在web工程停止时销毁
  4. ServletContext对象是一个域对象
  1. 常见的响应码

200 表示请求成功
302 表示请求重定向
404 表示服务器收到请求,但是请求的数据不存在(请求地址错误)
500 表示服务器收到请求,但是服务器内部错误(代码错误)

  1. HttpServletRequest类:

每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求发来的HTTP协议信息解析好封装到Request对象中,然后传递到service方法中(调用doGet或doPost方法)供编程人员使用,编程人员通过HttpServletRequest对象,可以获取到请求的所有信息

HttpServletRequest类的常用方法:
getRequestURI():获取请求的资源路径
getRequestURL():获取请求的绝对路径
getRemoteHost():获取客户端的ip地址
getHeader():获取请求头
getParameter():获取请求的参数
getParameterValues():获取请求的参数(多个值时使用)
getMethod():获取请求的方式(GET或POST)
setAttribute(key, value):设置域数据
getAttribute(key):获取域数据
getRequestDispatcher():获取请求转发对象

  1. HttpServletResponse类

每次只要有请求进入Tomcat服务器,Tomcat服务器就会创建一个Response对象传递给Servlet程序。HttpServletResponse表示所有响应的信息(HttpServletRequest表示请求发来的信息),可以通过HttpServletResponse对象设置返回给客户端的信息

两个输出流的说明:
字节流 getOutputStream(); 常用于下载(传递)二进制数据
字符流 getWriter(); 常用于回传字符串
从服务器往客户端(浏览器)回传字符串数据

  1. 请求转发
    在这里插入图片描述

请求转发指的是服务器收到请求之后,从一个资源跳转到另一个资源的操作。

  1. 重定向
    在这里插入图片描述

请求重定向指的是客户端给服务器发送请求,然后服务器通知客户端去访问自己的新地址(之前的地址可能被废弃)叫请求重定向

  1. “/”的含义:

“/”若被浏览器解析,得到的地址是:http://ip:port/
(1) /
“/”若被服务器解析,得到的地址是:http://ip:port/工程路径
(1) /servlet1
(2) servletContext.getRealPath(“/”);
(3) request.getRequestDispatcher(“/”);

2、servlet编程

2.1、我们编写一个简单的servlet

  1. 创建一个web项目。
    在这里插入图片描述

  2. 创建一个servlet类,起名加WebDemo1.

package com.controller;

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

public class WebDemo1 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("这个是get方法1");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("这个是post方法1");
    }
}

  1. 配置web.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-name>webDemo1</servlet-name>
            <servlet-class>com.controller.WebDemo1</servlet-class>
        </servlet>
      
    <servlet-mapping>
        <servlet-name>webDemo1</servlet-name>
        <url-pattern>/web1</url-pattern>
    </servlet-mapping>

</web-app>
  1. 启动项目,并访问网站,可以看出结果。
    在这里插入图片描述在这里插入图片描述

2.2、我们继续创建一个难度增加的项目

先创建一个jsp页面,有一个按钮,点击这个按钮可以在控制台出现一行字“你成功了”。

  1. 创建一个servlet类,起名WebDemo1,并写出内容。
package com.controller;

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

public class WebDemo1 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("这个是get方法1");
        System.out.println("你成功啦");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("这个是post方法1");
    }
}

  1. 修改web.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-name>webDemo1</servlet-name>
            <servlet-class>com.controller.WebDemo1</servlet-class>
        </servlet>
      
    <servlet-mapping>
        <servlet-name>webDemo1</servlet-name>
        <url-pattern>/web1</url-pattern>
    </servlet-mapping>

</web-app>
  1. 新建一个jsp页面,名称叫index1.jsp页面。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/web1" >
    <input type="submit" value="提交">
</form>
</body>
</html>

  1. 访问并查看结果
    在这里插入图片描述
    在这里插入图片描述

2.3、我们继续升级一下

我们在一个页面上输入一些信息,控制台进行打印。

  1. 创建一个index.jsp页面。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
        <form action="${pageContext.request.contextPath}/web1" method="post">
            姓名:<input type="text" name="userName"><br>
            密码:<input type="password" name="password"><br>
            性别:<input type="radio" value="" name="sex"><input type="radio" value="" name="sex"><br>
            地址:<select name="address">
                <option value="北京">北京</option>
                <option value="南京">南京</option>
        </select><br>
            爱好:<input type="checkbox" name="hobby" value="篮球">篮球
            <input type="checkbox" name="hobby" value="足球">足球
            <input type="checkbox" name="hobby" value="羽毛球">羽毛球<br>
            <input type="submit" value="提交"/>
        </form>



  </body>
</html>
  1. 创建一个servlet类
package com.controller;

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

public class WebDemo2 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get2");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("post2");
        //解决中文乱码
        resp.setContentType("text/html;charset=utf-8");
        //请求解决乱码
        req.setCharacterEncoding("utf-8");
        //响应解决乱码
        resp.setCharacterEncoding("utf-8");


        String userName = req.getParameter("userName");
        String password = req.getParameter("password");
        String address = req.getParameter("address");
        String sex = req.getParameter("sex");
        String[] hobbies = req.getParameterValues("hobby");


        System.out.println("姓名:"+ userName);
        System.out.println("密码:"+ password);
        System.out.println("性别:"+ sex);
        System.out.println("爱好:"+ Arrays.toString(hobbies));
        System.out.println("地址:"+ address);


        req.getRequestDispatcher("/result/result1.jsp").forward(req, resp);
    }
}

  1. 修改web.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-name>webDemo1</servlet-name>
            <servlet-class>com.controller.WebDemo1</servlet-class>
        </servlet>

        <servlet>
              <servlet-name>webDemo2</servlet-name>
               <servlet-class>com.controller.WebDemo2</servlet-class>
         </servlet>

         <servlet-mapping>
             <servlet-name>webDemo2</servlet-name>
              <url-pattern>/web2</url-pattern>
          </servlet-mapping>

    <servlet-mapping>
        <servlet-name>webDemo1</servlet-name>
        <url-pattern>/web1</url-pattern>
    </servlet-mapping>

</web-app>
  1. 运行、查看结果。
    在这里插入图片描述

在这里插入图片描述

2.4、我们继续升级一下

从一个页面获取到信息转发到另一个页面显示

  1. 写出index.jsp页面(2.3有)
  2. 修改web.xml文件(2.3有)
  3. 修改servlet类
package com.controller;

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

public class WebDemo2 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get2");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("post2");
        //解决中文乱码
        resp.setContentType("text/html;charset=utf-8");
        //请求解决乱码
        req.setCharacterEncoding("utf-8");
        //响应解决乱码
        resp.setCharacterEncoding("utf-8");


        String userName = req.getParameter("userName");
        String password = req.getParameter("password");
        String address = req.getParameter("address");
        String sex = req.getParameter("sex");
        String[] hobbies = req.getParameterValues("hobby");


        System.out.println("姓名:"+ userName);
        System.out.println("密码:"+ password);
        System.out.println("性别:"+ sex);
        System.out.println("爱好:"+ Arrays.toString(hobbies));
        System.out.println("地址:"+ address);

        req.setAttribute("userName", userName);
        req.setAttribute("password", password);
        req.setAttribute("sex", sex);
        req.setAttribute("hobbies", Arrays.toString(hobbies));
        req.setAttribute("address", address);

        req.getRequestDispatcher("/result/result1.jsp").forward(req, resp);
    }
}

这里我们用到了一个请求转发。

  1. 新建一个result.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    姓名:${userName}
    性别:${sex}
    密码:${password}
    爱好:${hobbies}
    地址:${address}
</body>
</html>

这里我们用到了el表达式进行取出数据。

  1. 运行、查看结果
    在这里插入图片描述

这里一部分内容借鉴别的博客,作者在这里表示衷心感谢

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值