JavaWeb-Servlet讲解

  • 简介
  • 手写实现servlet程序
  • 1,继承servlet接口
  • 2,实现service方法
  • 3,在web.xml中配置
  • 解析URL地址和Servlet程序的关系映射
  • Servlet的生命周期
  • Get和Post请求
  • ServletConfig类
  • ServletConfig类的作用
  • ServletContex类
  • 简介
  • 作用
  • HttpServletRequest类
  • 作用
  • 常用方法
  • 获取页面请求参数
  • 请求转发
  • base标签
  • HttpServletResponse类
  • 作用
  • 输出流
  • 服务器回传数据
  • 请求重定向
  • Servlet链接数据库


简介

1、Servlet 是 JavaEE 规范之一。规范就是接口
2、Servlet 就 JavaWeb 三大组件之一。三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器。
3、Servlet 是运行在服务器上的一个 java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。

手写实现servlet程序

1,继承servlet接口
2,实现service方法
3,在web.xml中配置

1,继承servlet接口

java poi word 插入换行 javaweb换行servlet_mvc

2,实现service方法

java poi word 插入换行 javaweb换行servlet_mvc_02

3,在web.xml中配置

java poi word 插入换行 javaweb换行servlet_java poi word 插入换行_03

解析URL地址和Servlet程序的关系映射

java poi word 插入换行 javaweb换行servlet_java_04

Servlet的生命周期

1、执行 Servlet 构造器方法
2、执行 init 初始化方法
第一、二步,是在第一次访问,的时候创建 Servlet 程序会调用。
3、执行 service 方法
第三步,每次访问都会调用。
4、执行 destroy 销毁方法
第四步,在 web 工程停止的时候调用。

Get和Post请求

java poi word 插入换行 javaweb换行servlet_http_05

ServletConfig类

Servlet 程序默认是第一次访问的时候创建,ServletConfig 是每个 Servlet 程序创建时,就创建一个对应的 ServletConfig 对

ServletConfig类的作用

1、可以获取 Servlet 程序的别名 servlet-name 的值
2、获取初始化参数 init-param
3、获取 ServletContext 对象

java poi word 插入换行 javaweb换行servlet_mvc_06

ServletContex类

简介

1、ServletContext 是一个接口,它表示 Servlet 上下文对象
2、一个 web 工程,只有一个 ServletContext 对象实例。
3、ServletContext 对象是一个域对象。
4、ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁

作用

1、获取 web.xml 中配置的上下文参数 context-param

2、获取当前的工程路径,格式: /工程路径

3、获取工程部署后在服务器硬盘上的绝对路径

4、像 Map存取数据

java poi word 插入换行 javaweb换行servlet_java_07

HttpServletRequest类

作用

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

常用方法

i. getRequestURI() 获取请求的资源路径
 ii. getRequestURL() 获取请求的统一资源定位符(绝对路径)
 iii. getRemoteHost() 获取客户端的 ip 地址
 iv. getHeader() 获取请求头
 v. getParameter() 获取请求的参数
 vi. getParameterValues() 获取请求的参数(多个值的时候使用)
 vii. getMethod() 获取请求的方式 GET 或 POST
 viii. setAttribute(key, value); 设置域数据
 ix. getAttribute(key); 获取域数据
 x. getRequestDispatcher() 获取请求转发对象

java poi word 插入换行 javaweb换行servlet_java poi word 插入换行_08

获取页面请求参数

java poi word 插入换行 javaweb换行servlet_mvc_09

java poi word 插入换行 javaweb换行servlet_java_10

请求转发

服务器收到请求后,从一个资源跳转到另一个资源。

java poi word 插入换行 javaweb换行servlet_servlet_11


java poi word 插入换行 javaweb换行servlet_mvc_12


java poi word 插入换行 javaweb换行servlet_java poi word 插入换行_13

base标签

在请求转发中,页面跳转时,会根据当前页面地址进行跳转,base标签则指定页面当前地址为一个定值,防止地址紊乱。

java poi word 插入换行 javaweb换行servlet_java poi word 插入换行_14

HttpServletResponse类

作用

HttpServletResponse 类和 HttpServletRequest 类一样。每次请求进来,Tomcat 服务器都会创建一个 Response 对象传
递给 Servlet 程序去使用。HttpServletRequest 表示请求过来的信息,HttpServletResponse 表示所有响应的信息,
我们如果需要设置返回给客户端的信息,都可以通过 HttpServletResponse 对象来进行

输出流

a,字节流 getOutputStream(); 常用于下载(传递二进制数据)
b,符流 getWriter(); 常用于回传字符串(常用)

两个流同时只能使用一个。
使用了字节流,就不能再使用字符流,反之亦然,否则就会报错。

服务器回传数据

java poi word 插入换行 javaweb换行servlet_servlet_15

请求重定向

请求重定向,是指客户端给服务器发请求,服务器告诉客户端新的地址。去新地址访问。叫请求重定向(因为之前的地址可能已经被废弃)。

java poi word 插入换行 javaweb换行servlet_java_16


java poi word 插入换行 javaweb换行servlet_java_17

Servlet链接数据库

public class DatabaseAccess extends HttpServlet {
    private static final long serialVersionUID = 1L;
    // JDBC 驱动名及数据库 URL
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
    static final String DB_URL = "jdbc:mysql://localhost:3306/RUNOOB";
    
    // 数据库的用户名与密码,需要根据自己的设置
    static final String USER = "root";
    static final String PASS = "123456"; 
    /**
     * @see HttpServlet#HttpServlet()
     */
    public DatabaseAccess() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Connection conn = null;
        Statement stmt = null;
        // 设置响应内容类型
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        String title = "Servlet Mysql 测试 - 菜鸟教程";
        String docType = "<!DOCTYPE html>\n";
        out.println(docType +
        "<html>\n" +
        "<head><title>" + title + "</title></head>\n" +
        "<body bgcolor=\"#f0f0f0\">\n" +
        "<h1 align=\"center\">" + title + "</h1>\n");
        try{
            // 注册 JDBC 驱动器
            Class.forName("com.mysql.jdbc.Driver");
            
            // 打开一个连接
            conn = DriverManager.getConnection(DB_URL,USER,PASS);

            // 执行 SQL 查询
            stmt = conn.createStatement();
            String sql;
            sql = "SELECT id, name, url FROM websites";
            ResultSet rs = stmt.executeQuery(sql);

            // 展开结果集数据库
            while(rs.next()){
                // 通过字段检索
                int id  = rs.getInt("id");
                String name = rs.getString("name");
                String url = rs.getString("url");
    
                // 输出数据
                out.println("ID: " + id);
                out.println(", 站点名称: " + name);
                out.println(", 站点 URL: " + url);
                out.println("<br />");
            }
            out.println("</body></html>");

            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        } catch(SQLException se) {
            // 处理 JDBC 错误
            se.printStackTrace();
        } catch(Exception e) {
            // 处理 Class.forName 错误
            e.printStackTrace();
        }finally{
            // 最后是用于关闭资源的块
            try{
                if(stmt!=null)
                stmt.close();
            }catch(SQLException se2){
            }
            try{
                if(conn!=null)
                conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }
       
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }
}