千家信息网

Java Servlet响应httpServletResponse过程是什么

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容主要讲解"Java Servlet响应httpServletResponse过程是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Java Se
千家信息网最后更新 2026年11月01日Java Servlet响应httpServletResponse过程是什么

本篇内容主要讲解"Java Servlet响应httpServletResponse过程是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Java Servlet响应httpServletResponse过程是什么"吧!

    一、核心方法

    1.setStatus

    设置响应状态码 如果没有调用这个方法,默认返回200状态码(前提:正常执行,没有异常) 如果出现异常,返回500

    前端代码:

        

    设置响应头


    后端代码:

    @WebServlet("/response")public class ResponseStudyServlet extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        //获取请求发送的queryString数据:status=xxx        String status = req.getParameter("status");        resp.setStatus((Integer.parseInt(status)));        resp.getWriter().write("设置响应状态码成功");    }}

    前端显示:

    提交后fiddler抓包:

    2.setHeader(String name,String value)

    设置响应头

    响应头name键已有,会覆盖原有的键值对

    前端代码:

    设置响应头

    设置

    后端代码:

    //设置响应头的键值对,键可以是标准的http响应头的键,也可以是自定义的//响应状态码是301,302,307,响应头有Location字段,才是重定向resp.setHeader("Location","http://www.baidu.com");resp.setHeader("username","张三");

    fiddler抓包结果:

    3.addHeader(String name,String value)

    设置响应头

    响应头name键已有,不会影响,添加一个新的

    这两个了解即可

    4.setContentType(String type)

    设置响应头Content-Type的值,等同于setHeader("Content-Type",String type) 因为Content-Type是标识body的数据格式,所以还需要设置body的内容

    1.响应一个网页

    //响应html:设置响应的Content-Typeresp.setContentType("text/html; charset=utf-8");

    可以返回静态和动态网页

    两种方式展示:

    前端代码:

        

    返回响应正文为简单的html

    查看

    返回响应正文为复杂的html(动态变化的)


    后端代码:

    @WebServlet("/html")public class HTMLTypeServlet extends HttpServlet {    //html?type=...    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        //响应html:设置响应的Content-Type        resp.setContentType("text/html; charset=utf-8");        PrintWriter pw = resp.getWriter();        //获取queryString中,type的值        String type = req.getParameter("type");        if("1".equals(type)){//返回简单的html            pw.println("

    获取网页成功

    "); }else if("2".equals(type)){//返回复杂的动态html //html?type=2&username=xxx String username = req.getParameter("username"); pw.println("

    "); pw.println("欢迎你,"+username); pw.println("

    "); } }}

    简单:

    前端显示:

    点击"查看":

    动态:

    前端显式:

    点击"跳转":

    关于动态网页:在Java的代码中,写很多html的代码

    耦合性太强(两个完全不同的编程语言,放在一起来开发)、维护性、扩展性很差

    解决方式:

    • 模板技术

    • 这种方式还存在一些问题,进一步发展就有了ajax技术的产生

    二、响应一个网页

    返回已有的一个网页

    (1)重定向:

    特点:url地址栏会变,发起两次请求

    原理:

    第一次返回301/302/307响应状态码,及响应头Location:网页的地址

    第二次:浏览器自动的跳转到Location设置的地址

    还是比较常用的:比如登录成功(其实也可以在js代码中跳转)后,跳转到某个首页

    (2)转发:

    特点:url地址栏不变,只有一次请求

    原理:当次请求Servlet时,由Servlet获取到转发路径的html,把这个路径的内容设置到响应正文

    前端代码:

    重定向到hello.html

    跳转

    转发到hello.html

    跳转

    后端代码:

    @WebServlet("/goto")public class GoToServlet extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        //goto?type=xxx        String type = req.getParameter("type");        if("1".equals(type)){//重定向//            resp.setStatus(301);//            resp.setHeader("Location","hello.html");            //以上代码可以简化为sendRedirect            resp.sendRedirect("hello.html");        }else if("2".equals(type)){//转发            req.getRequestDispatcher("hello.html")                    .forward(req,resp);        }    }}

    三、返回一个文件

    设置一下Content-Type,然后把文件的二进制数据放在响应正文就可以

    前端代码:

    获取一个图片(渲染展示)

    获取一个音乐(渲染展示)

    获取一个图片(下载)

    下载

    获取一个音乐(下载)

    后端代码:

    @WebServlet("/file")public class FileServlet extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        //        //获取响应对象的字节输出流        OutputStream os = resp.getOutputStream();        //返回的文件类型:1.图片 2.音乐        String type = req.getParameter("type");        //返回时的操作:1.渲染 2.下载        String show = req.getParameter("show");        File file = null;        byte[] data = null;        //        if("photo".equals(type)){//返回图片            if("1".equals(show)){                resp.setContentType("image/jpeg");//jpg格式            }else{                //这样只是没有设置下载的文件名,有兴趣可以自行扩展完成                resp.setContentType("application/octet-stream");            }            file =new File("D:\\java\\servlet-study\\src\\main\\resources\\cui.jpg");            //        }else if("music".equals(type)){//返回音乐            if("1".equals(show)){                resp.setContentType("audio/mp3");//mp3格式            }else{                resp.setContentType("application/octet-stream");            }            file = new File("D:\\java\\servlet-study\\src\\main\\resources\\这世界有那么多人.mp3");        }//其他格式可以自行扩展完成        //返回一个文件类型:Content-Length,body        data = Files.readAllBytes(file.toPath());        resp.setContentLength(data.length);//setHeader("Content-Length",xxx)        os.write(data);    }}

    问题:图片、音乐、视频是静态文件,直接放在web应用webapp下,就可以直接访问,那还需要Servlet来返回么?是否多此一举?

    如果文件总的大小非常大,放在web应用的webapp下就不合适了:打包就比较费劲,使用Servlet去读取本地其他地方的文件,来返回,就比较适合

    四、返回json数据

    常用于ajax请求,返回一些数据,用于动态的填充网页

    前端代码:

        

    获取ajax响应数据,动态生成网页内容

    后端代码:

    @WebServlet("/ajax-response")public class AjaxJsonServlet extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        List messages = new ArrayList<>();        Message m1 = new Message("汪汪","喵喵","我喜欢你");        Message m2 = new Message("喵喵","汪汪","我喜欢你");        messages.add(m1);        messages.add(m2);        ObjectMapper mapper = new ObjectMapper();        //把Java对象,转换为一个json字符串,list和数组会转换为[],一个对象{成员变量名:值}        String json = mapper.writeValueAsString(messages);        //[{"from":"汪汪","to":"喵喵","info":"我喜欢你"},{"from":"喵喵","to":"汪汪","info":"我喜欢你"}]        System.out.println("转换的json字符串"+json);        //设置json可以不设置Content-Length,tomcat会设置        resp.setContentType("application/json; charset=utf-8");        resp.getWriter().println(json);    }    static class Message{        private String from;//谁        private String to;//对谁        private String info;//说了什么        public Message(String from, String to, String info) {            this.from = from;            this.to = to;            this.info = info;        }        public String getFrom() {            return from;        }        public void setFrom(String from) {            this.from = from;        }        public String getTo() {            return to;        }        public void setTo(String to) {            this.to = to;        }        public String getInfo() {            return info;        }        public void setInfo(String info) {            this.info = info;        }    }}

    点击"试试":

    具体过程:

    对应可以使用的数据格式:

    到此,相信大家对"Java Servlet响应httpServletResponse过程是什么"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    代码 前端 网页 文件 内容 动态 数据 对象 状态 图片 格式 正文 音乐 过程 地址 字符 字符串 我喜欢 成功 方式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网络科技 河南云网互联网络科技有限公司 中国互联网科技工作委员会毛军 港股互联网科技股 关于新基建和互联网科技 互联网科技的英文 朗涯互联网科技 广西拼得多互联网科技有限公司 山东吉时兔互联网科技有限公司 语蝶互联网科技有限公司 速维有品互联网信息科技(苏州)有限公司 河南住房之家互联网科技 深圳艾果互联网通讯科技 电子商务与互联网科技的关系 易企秀互联网科技是做什么的 银川新华互联网科技学校是国营吗 西安左小互联网科技有限公司 青岛易易互联网科技 现代互联网科技公司 重庆科技产业互联网有哪些 互联网科技公司税收优惠 互联网金融与金融科技 丰台科技园 互联网 狮子座互联网科技培训 丰台科技园 互联网公司 成都仁贤领冠互联网科技有限公司 广州恒生互联网科技有限 互联网公司黑科技创始人 互联网企业科技类企业如何做账 重庆科技产业互联网有哪些
    0