Request与Response的学习(应用javaweb)

Request与Response

  • Request对象与Response对象的原理
    1. request和response对象是由服务器创建的。我们来使用它们
    2. request对象是来获取请求信息,response对象是来设置响应信息

Request

request对象继承体系结构

ServletRequest–接口

​ | 继承

HttpServletRequest–接口

​ | 实现

org.apache.catalina.connector.RequestFcade 类(tomcat)

request功能

获取请求信息数据
  1. 获取请求行数据

    • GET /servlet/demo1?name=zhangsan HTTP/1.1

    • 方法:

      1. 获取请求方式:GET

        • String geteMethod()
      2. (*)获取虚拟目录:/servlet

        • String getContextPath()
      3. 获取Servlet路径:/demo1

        • String getServletPath()
      4. 获取get方式请求参数:name=zhangsan

        • String getQueryString()
      5. (*)获取请求URI:/servlet/demo1

        • String getRequestURI():/servlet/demo1

        • StringBuffer getRequestURL():http://localhost/servlet/demo1

        • URL:统一资源定位符:中华人民共和国

        • URI:统一资源标识符:共和国

      6. 获取协议及版本:HTTP/1.1

        • String getProtocol()
      7. 获取客户机的IP地址:

        • String getRemoteAddr()
  2. 获取请求头数据

    • 方法:
      • (*)String getHeader(String name):通过请求头名称获取请求头的值
      • Enumeration<String> getHeaderNames():获取所有的请求头名称
  3. 获取请求体数据:

    • 请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数
    • 步骤:
      1. 获取流对象
        • BuffereReader getReader():获取字符输入流,只能操作字符数据
        • ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据
      2. 再从流对象中拿数据
其他功能
  1. 获取请求参数通用方法

    1. String getParameter(String name):根据参数名称获取参数值
    2. String[] getParameterValues(String name):根据参数名称获取数值的数组
    3. Enumeration<String> getParameterNames():获取所有请求的参数名称
    4. Map<String,String[] getParameterMap():获取所有参数的map集合

    中文乱码问题

    • get方式:tomcat 8 已经将get方式乱码问题解决了
    • post方式:会乱码
      • 解决:在获取参数前,设置request的编码request.setcharacterEncoding("utf-8")
  2. 请求转发:

    1. 步骤:
      1. 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
      2. 使用RequestDispatcher对象来进行转发:forward(ServletRequest request, ServletResponse response)
    2. 特点:
      1. 浏览器地址栏路径不发生变化
      2. 只能转发到当前服务器内部资源中
      3. 转发是一次请求
  3. 共享数据:

    • 域对象:一个有作用范围的对象,可以在范围内共享数据
    • request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
    • 方法:
      1. void SetAttribute(String name,Object obj):存储数据
      2. Object getAttribute(String name):通过键获取值
      3. removeAttribute(String name):通过键移除键值对
  4. 获取ServletContext

    • ServletContext getServletContext()

案例:用户登录

需求

  1. 编写login.html登录页面

    username & password 两个输入框

  2. 使用Druid数据连接池技术操作mysql,数据库中user

  3. 使用JDBCTemplate技术封装JDBC

  4. 登录成功跳转到SuccessServlet展示:登录成功!用户名,欢迎您

  5. 登录失败跳转到FailServlet展示:登录失败,用户名或密码错误

分析

在这里插入图片描述

开发步骤

  1. 创建项目,导入html页面,配置文件,jar包

  2. 创建数据库环境

  3. 创建包domain,创建user类

  4. 创建JDBCUtils工具类

    import com.alibaba.druid.pool.DruidDataSourceFactory;
    import javax.sql.DataSource;
    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;
    
    /**
     * @author zhuxianglong
     * @version 1.0
     * @date 2021/8/27 0:45
     */
    public class JDBCUtil {
         
        //私有化构造方法
        private JDBCUtil(){
         }
    
        //1.定义成员变量DataSource
        private static DataSource ds;
    
        static {
         
            try {
         
                //2.加载配置文件
                Properties pro = new Properties();
                pro.load(JDBCUtil.class.getClassLoader().getResourceAsStream("druid.properties"));
                //3.获取DataSource
                ds = DruidDataSourceFactory.createDataSource(pro);
            } catch (IOException e) {
         
                e.printStackTrace();
            } catch (Exception e) {
         
                e.printStackTrace();
            }
        }
    
        /**
         * 获取连接的方法
         */
        public static Connection getConnection(){
         
            try {
         
                return ds.getConnection();
            } catch (SQLException e) {
         
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 释放资源
         */
        public static void close(Statement stmt, Connection conn){
         
            /*if (stmt != null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null){
                try {
                    conn.close();//归还连接
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }*/
            close(conn,stmt,null);
        }
        public static void close(Connection conn, Statement stmt, ResultSet rs){
         
            if (rs != null){
         
                try {
         
                    rs.close();
                } catch (SQLException e) {
         
                    e.printStackTrace();
                }
            }
            if (stmt != null){
         
                try {
         
                    stmt.close();
                } catch (SQLException e) {
         
                    e.printStackTrace();
                }
            }
            if (conn != null){
         
                try {
         
                    conn.close();//归还连接
                } catch (SQLException e) {
         
                    e.printStackTrace();
                }
            }
        }
    
        /**
         * 获取连接池的方法
         */
        public  static DataSource getDataSoutce(){
         
            return ds;
        }
    }
    
  5. 创建包dao,创建类UserDao,提供login方法

    import net.seehope.domain.User;
    import net.seehope.util.JDBCUtil;
    import org.springframework.dao.DataAccessException;
    import org.springframework.jdbc.core.BeanPropertyRowMapper;
    import org.springframework.jdbc.core.JdbcTemplate;
    
    /**
     * @author zhuxianglong
     * @version 1.0
     * @date 2021/8/27 0:51
     * 操作数据库中user表中的类
     */
    public class UserDao {
         
        //声明JDBCTemplate对象共用
        private JdbcTemplate template = new JdbcTemplate(JDBCUtil.getDataSoutce());
    
        /**
         * 登录方法
         * @param loginUser 只有用户名和密码
         * @return user包含用户全部数据,没有查询到,返回null
         */
        public User login(User loginUser)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZXLzhuzhu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值