javaWeb学习十三天------HttpServletResponse和HttpServletRequest

HttpServletResponse

HttpServletRequest和HttpServletResponse对象是ServletRequest和ServletResponse接口的子类接口,在请求servlet时候由tomcat容器来创建的,请求的时候Tomcat会把这两个对象创建出来,并给servlet 设置为参数。

注意:所有的servlet 都会有一组请求与响应的对象

HttpServletResponse作用:

可以来操作http的响应头,响应体 响应行,支持http协议,其父类不支持

HttpServletResponse操作响应行:

响应行包含 协议(以及协议的版本) 状态秒 ,描述信息等

响应消息:服务器端发送给客户端的数据

响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态

注:游览器会根据服务端返回的状态码进行相应的操作,

返回404状态码会默认报路径错误终止程序,

返回200状态码会代表请求成功游览器会进行下一步操作,程序进一步执行

在这里插入图片描述

常见的状态码:

404路径找不到
302 重定向
304 数据缓存(使用get重复提交才会出现)
500 服务器发生错误
200 请求成功

HttpServletResponse设置其状态码的方法

resp.setStatus(“传输传递的是状态码”)
resp.sendError(“第一个参数传的是状态,码”,“提示信息”);

 //HttpServletResponse操作响应行
        //游览器会根据服务端返回的状态码进行相应的操作,
        // 404会默认报路径错误终止程序,
        // 200会代表请求成功游览器会进行下一步操作,程序进一步执行

//设置其状态码
resp.setStatus(200);
//设置状态码 以及其异常
resp.sendError(404,"您好,别瞎请求");

HttpServletResponse 来操作器响应头

 响应头:
		1. 格式:头名称: 值
		2. 常见的响应头:
			1. Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式
			2. Content-disposition:服务器告诉客户端以什么格式打开响应体数据
				* 值:
					* in-line:默认值,在当前页面内打开
					* attachment;filename=xxx:以附件形式打开响应体。文件下载

在这里插入图片描述

resp.setHeader(“Content-Type”,“jpg”); 设置响应头的格式

响应体:传输的数据

----------------------------实现文件的压缩--------------------------------------------------
resp.setHeader("refresh","2;index.jsp");

resp.sendRedirect("index.jsp");

String  str="hhdhejrehrhrrhrgegehehehekejehehrhrhrhrrrbbfbfbfbffn";
//获取这个字符串的字节大小
System.out.println(str.getBytes().length);

//压缩的流
//压缩流 GZIPOutputStream
//内存流:ByteArrayOutputStream 
//得到内存流
ByteArrayOutputStream  baos  = new ByteArrayOutputStream();
GZIPOutputStream  gzips  = new GZIPOutputStream(baos);
 //读取数据
byte [] b  =   baos.toByteArray();
System.out.println(b.length);
------------------------------------常用方法-----------------------------------------------
//设置响应头 (以键值对来进行存储,键无法改变)
//设置服务器的压缩格式
resp.setHeader("Content-Encoding","gzip");
//设置文本的长度
resp.setHeader("Content-length",b.length+"");
//规定其为设置字节数组
resp.setHeader("Accept","bytes");
//不加载浏览器缓存中的数据
resp.setHeader("Cache-Control","no-cache");==>压缩的时候一般对于的大文本 ,小文本看不出效果

实现下载图片

<a href="UserServlet?fileName=1.jpg">下载</a>前端代码
InputStream is  =   this.getServletContext().getResourceAsStream("/WEB-INF/1.jpg");//获取是发布到服务的图片的地址   返回值是一个输入流对象
//返回的是resp.getOutputStream()  输入出流对象   ==> 字节  read()==>返回的读取的数据   read(b) 读取是有效的字节长度
String  fileName=   req.getParameter("fileName");
resp.setHeader("Content-Disposition","attachment;fileName="+fileName);//设置读取
//得到输出流对象
ServletOutputStream  sos =  resp.getOutputStream();
//下载文件一定加上这一句话
byte[] b  = new  byte[1024];
int leng =-1;
while ((leng=is.read(b)) !=-1){
 sos.write(b,0,leng);
 }
 sos.close();

实现图片显示到游览器

响应的内容格式: Content-Type 1.text/html 文件 jpg gif 图片 ==>把图片写入到浏览器

//设置响应的内容的格式
resp.setHeader("Content-Type","jpg");
// 把图片转换成流对象
InputStream is  =  this.getServletContext().getResourceAsStream("/WEB-INF/1.jpg");//发布项目的地址
 //得到respone的写入对象
ServletOutputStream sot  =  resp.getOutputStream();
// 把数据读取出来写入ServletOutputStream
 byte [] b  = new byte[1024];
int leng =-1;
while ((leng=is.read(b)) !=-1){
    sot.write(b,0,leng);
}
 //关闭方法
 sot.close();

写入字节和字符操作

/写字节/
resp.setContentType("text/html;charset=utf-8");
ServletOutputStream sos  =    resp.getOutputStream();
sos.write("addd".getBytes());
os.close();
      //写字符//
        //设置响应的 编码格式 以及内容的类型
PrintWriter pw   = resp.getWriter();
pw.write("dddd");
pw.close();
resp.getOutputStream().write(97);
resp.getWriter().write("ddddd");

ServletContext

表示服务器的上下文对象 ,它的生命周期是随着tomcat的创建而创建 随着服务器的销毁而销毁

作用:

  1. 是获取web的全局配置文件

    1. 以键值对的形式来进行页面参数的传递

HttpServletResponse操作响应体

就是在网页上写内容

主要方法:(上面案例有使用)

resp.getOutputStream() 主要是用于来写字节

resp.getWriter() 主要用于写字符 ==>两个不要一起用(容易产生错误)

重定向

原理图:跳转到另一个界面
在这里插入图片描述

方法:resp.sendRedirect(“index.jsp”); 参数是传递的是需要跳转的界面

注:重定向相当于两次请求间

设置隔多长时间在跳转到某个界面

方法:resp.setHeader(“refresh”,“2;index.jsp”); 第二个参数是 “时间(秒);重定向的界面”

HttpServletRequest

servlet创建的请求对象 ==>继承 ServletRequest(不支持Http协议),httpServletRequest支持http协议

HttpServletRequest 也可以操作请求行 与请求头 请求体

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
常见的请求头:
在这里插入图片描述

HttpServletRequest 操作请求行

请求的地址, 请求的端口号 请求的参数 请求方法的名称,请求的访问根目录(如果项目与根目录一样,访问就是空的)

// 获取到请求的方法
String method = req.getMethod();
// 获取到跟的路径
String path = req.getContextPath();
// 获取请求拼接的参数
 String query = req.getQueryString();
// 获取的是uri地址
String uri = req.getRequestURI();
//获取的是url地址
StringBuffer url = req.getRequestURL();

获取网络资源

String user  = req.getRemoteUser();获取到客户端的用户名
String addr = req.getRemoteAddr();获取到客户端的地址 
String  ip  =req.getRemoteHost();获取其ip地址  
int   port = req.getRemotePort();获取端口号
req.getLocalAddr() ==>获取服务器的地址
req.getLocalName();  ==>服务器ip
req.getLocalPort(); 服务器端口号
req.getServletPath(); 获取的访问路径
req.getServerName(); 服务器的ip地址
req.getServerPort();  服务器端口号

注册功能的实现:

注册功能的流程图
在这里插入图片描述

servlet层

在这里插入图片描述
重要方法 :

req.getParameter(“uname”); 根据name值获取单个

req.getParameterValues(“hobbey”); 根据name值获取一组

设置编码:三步

第一步:

resp.setContentType(“text/html;charset=utf-8”); ==>到tomcat里配置 URIEncoding=“UTF-8”

第二步

resp.setCharacterEncoding(“utf-8”);

第三步

req.setCharacterEncoding(“utf-8”);

@WebServlet(name = "user1Servlet",urlPatterns = "/user1Servlet")
//注意url要加 /
//前端请求的那个URL直接写UserServlet不用加 /
public class User1Servlet extends HttpServlet {

    //调用service层的方法

     private UserService  userService ;


    @Override
    public void init() throws ServletException {
        userService = new UserServiceImpl();
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         //乱码设置
        //配置Tomcat
        resp.setContentType("text/html;charset=utf-8");
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
//使用req.getParameter获取name值
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String sex = req.getParameter("sex");
        String[] hobbey = req.getParameterValues("hobbey");//获取同一个name的多个值
        String hobbey_str = "";//多个选项结果使用字符串拼接存入数据库
        if (hobbey != null && hobbey.length > 0) {//非空判断
            for (String str : hobbey) {
                hobbey_str += str + ";";
            }
        }
        String u_text = req.getParameter("u_text");
        User user = new User(username, password, sex, hobbey_str, u_text);
        boolean b = userService.addUser(user);
        if (b) {
            resp.sendRedirect("index.jsp");
        } else {
            resp.sendRedirect("error.html");
        }
    }
}

service层

public class UserServiceImpl implements UserService {
   private UserDao userDao=new UserDaoImpl();//私有
    @Override
    public boolean addUser(User user) {
        int i = userDao.addUser(user);
        if (i>0){
            return true;
        }
        return false;
    }
}

在这里插入图片描述

dao层

在这里插入图片描述

  @Override
    public int addUser(User user) {
        DataSource ds=new ComboPooledDataSource();
        QueryRunner qr=new QueryRunner(ds);
        String sql="insert into user(uname,upwd,usex,uhobbey,utext) values(?,?,?,?,?)";
        Object [] objects={user.getUname(),user.getUpwd(),user.getUsex(),user.getUhobbey(),user.getUtext()};
        int unm= 0;
        try {
            unm = qr.update(sql,objects);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return unm;
    }

实体类

public class User implements Serializable {
    private int uid;
    private String uname;
    private String upwd;
    private String usex;
    private String uhobbey;
    private String utext;

    public User() {
    }

    public User(int uid, String uname, String upwd, String usex, String uhobbey, String utext) {
        this.uid = uid;
        this.uname = uname;
        this.upwd = upwd;
        this.usex = usex;
        this.uhobbey = uhobbey;
        this.utext = utext;
    }

    public User(String uname, String upwd, String usex, String uhobbey, String utext) {
        this.uname = uname;
        this.upwd = upwd;
        this.usex = usex;
        this.uhobbey = uhobbey;
        this.utext = utext;
    }

    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public String getUpwd() {
        return upwd;
    }

    public void setUpwd(String upwd) {
        this.upwd = upwd;
    }

    public String getUsex() {
        return usex;
    }

    public void setUsex(String usex) {
        this.usex = usex;
    }

    public String getUhobbey() {
        return uhobbey;
    }

    public void setUhobbey(String uhobbey) {
        this.uhobbey = uhobbey;
    }

    public String getUtext() {
        return utext;
    }

    public void setUtext(String utext) {
        this.utext = utext;
    }

    @Override
    public String toString() {
        return "User{" +
                "uid=" + uid +
                ", uname='" + uname + '\'' +
                ", upwd='" + upwd + '\'' +
                ", usex='" + usex + '\'' +
                ", uhobbey='" + uhobbey + '\'' +
                ", utext='" + utext + '\'' +
                '}';
    }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值