JavaWeb-Servlet讲解

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接口

JavaWeb-Servlet讲解_第1张图片

2,实现service方法

JavaWeb-Servlet讲解_第2张图片

3,在web.xml中配置

JavaWeb-Servlet讲解_第3张图片

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

JavaWeb-Servlet讲解_第4张图片

Servlet的生命周期

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

Get和Post请求

JavaWeb-Servlet讲解_第5张图片

ServletConfig类

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

ServletConfig类的作用

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

JavaWeb-Servlet讲解_第6张图片

ServletContex类

简介

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

作用

1、获取 web.xml 中配置的上下文参数 context-param
2、获取当前的工程路径,格式: /工程路径
3、获取工程部署后在服务器硬盘上的绝对路径
4、像 Map存取数据
JavaWeb-Servlet讲解_第7张图片

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() 获取请求转发对象

JavaWeb-Servlet讲解_第8张图片

获取页面请求参数

JavaWeb-Servlet讲解_第9张图片

JavaWeb-Servlet讲解_第10张图片

请求转发

服务器收到请求后,从一个资源跳转到另一个资源。
JavaWeb-Servlet讲解_第11张图片
JavaWeb-Servlet讲解_第12张图片
JavaWeb-Servlet讲解_第13张图片

base标签

在请求转发中,页面跳转时,会根据当前页面地址进行跳转,base标签则指定页面当前地址为一个定值,防止地址紊乱。
JavaWeb-Servlet讲解_第14张图片

HttpServletResponse类

作用

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

输出流

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

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

服务器回传数据

JavaWeb-Servlet讲解_第15张图片

请求重定向

请求重定向,是指客户端给服务器发请求,服务器告诉客户端新的地址。去新地址访问。叫请求重定向(因为之前的地址可能已经被废弃)。
JavaWeb-Servlet讲解_第16张图片
JavaWeb-Servlet讲解_第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 = "\n";
        out.println(docType +
        "\n" +
        ""</span> <span class="token operator">+</span> title <span class="token operator">+</span> <span class="token string">"\n" +
        "\n" +
        "

" + title + "

\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("
"
); } out.println(""); // 完成后关闭 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); } }

你可能感兴趣的:(javaweb,java,http,mvc,servlet)