天天看点

servlet 学习笔记1、servlet基础知识2、servlet编程

servlet学习笔记

  • 1、servlet基础知识
    • 1.1、什么是servlet?(what)
    • 1.2、为什么要使用servlet?(why)
    • 1.3、怎么使用servlet?(how)
    • 1.4、servlet知识点
  • 2、servlet编程
    • 2.1、我们编写一个简单的servlet
    • 2.2、我们继续创建一个难度增加的项目
    • 2.3、我们继续升级一下
    • 2.4、我们继续升级一下

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的继承关系:
    servlet 学习笔记1、servlet基础知识2、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. 请求转发
    servlet 学习笔记1、servlet基础知识2、servlet编程
请求转发指的是服务器收到请求之后,从一个资源跳转到另一个资源的操作。
  1. 重定向
    servlet 学习笔记1、servlet基础知识2、servlet编程
请求重定向指的是客户端给服务器发送请求,然后服务器通知客户端去访问自己的新地址(之前的地址可能被废弃)叫请求重定向
  1. “/”的含义:

“/”若被浏览器解析,得到的地址是:http://ip:port/

(1) /

“/”若被服务器解析,得到的地址是:http://ip:port/工程路径

(1) /servlet1

(2) servletContext.getRealPath(“/”);

(3) request.getRequestDispatcher(“/”);

2、servlet编程

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

  1. 创建一个web项目。
    servlet 学习笔记1、servlet基础知识2、servlet编程
  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. 启动项目,并访问网站,可以看出结果。
    servlet 学习笔记1、servlet基础知识2、servlet编程
    servlet 学习笔记1、servlet基础知识2、servlet编程

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. 访问并查看结果
    servlet 学习笔记1、servlet基础知识2、servlet编程
    servlet 学习笔记1、servlet基础知识2、servlet编程

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. 运行、查看结果。
    servlet 学习笔记1、servlet基础知识2、servlet编程
servlet 学习笔记1、servlet基础知识2、servlet编程

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. 运行、查看结果
    servlet 学习笔记1、servlet基础知识2、servlet编程
这里一部分内容借鉴别的博客,作者在这里表示衷心感谢。
ssm

继续阅读