栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【JavaWeb】Servlet的应用全面讲解(二)获取请求和进行响应

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【JavaWeb】Servlet的应用全面讲解(二)获取请求和进行响应

【JavaWeb】Servlet的应用全面讲解(二)获取请求和进行响应

一、request 请求

(一)获取请求(二)解决获取请求时发生乱码的问题

1. 原因和解决方法2. 代码演示 (三)请求转发跳转

1. 方法和特点2. 代码演示 (四)request作用域

1. request作用域的应用方法2.代码演示 二、response 响应

(一)response的应用

1. 方法2. 代码演示 (二)解决response应用时发生乱码问题

1. 原因和解决方法2. 代码演示 (三)response 进行重定向跳转

1. 重定向说明2. 代码演示3. 重定向和转发跳转的区别

一、request 请求 (一)获取请求
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        
        //获取请求时的完整路径(从http开始,到“?"前面结束)
        String url = req.getRequestURL() + "";
        System.out.println("获取请求时的完整路径:" + url);
        //获取请求时的部分路径(从项目的站名开始,到”?“前面结束)
        String uri = req.getRequestURI();
        System.out.println("获取项目部分路径:" + uri);
        //获取请求的参数字符串(从”?“后面开始,到最后的字符串)
        String queryString = req.getQueryString();
        System.out.println("获取请求时的参数字符串:" + queryString);
        //获取请求方式(Get和Post)
        String method = req.getMethod();
        System.out.println("获取请求方法" + method);
        //获取当前协议版本(HTTP/1.1)
        String protocol = req.getProtocol();
        System.out.println("获取当前协议版本:" + protocol);
        //获取项目的站点名(项目对外访问路径)
        String webapp = req.getContextPath();  //上下文路径
        System.out.println("" + webapp);


        
        //获取指定名称的参数值,返回字符串 (重点!)
        String uname = req.getParameter("uname");
        String upwd = req.getParameter("upwd");
        System.out.println("uname:" + uname + ".upwd:" + upwd);

        //获取指定名称的参数的所有参数值,返回字符串数组(用于复选框传值)
        String[] hobbys = req.getParameterValues("hobby");
        //判断数组是否为空
        if(hobbys != null && hobbys.length > 0){
            for (String hobby: hobbys) {
                System.out.println("爱好:"+ hobby);
            }
        }
    }
(二)解决获取请求时发生乱码的问题 1. 原因和解决方法
 
2. 代码演示 
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置请求的编码格式,解决POST请求获取参数时出现乱码的问题
        req.setCharacterEncoding("UTF-8");
        //获取客户端传递的参数
        String uname = req.getParameter("uname");
        String upwd = req.getParameter("upwd");
        System.out.println("姓名:" + uname);
        System.out.println("密码:" + upwd);

       
    }
(三)请求转发跳转 1. 方法和特点
 
2. 代码演示 

(1)发出请求跳转的Servlet类

    @Override
@WebServlet("/ser13")
public class Servlet13 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //接收客户端请求的参数
        String uname = req.getParameter("uname");
        System.out.println("Servlet13 uname : "+ uname);

        //请求转发跳转到Servlet04
        //req.getRequestDispatcher("s14").forward(req,resp);
        //请求跳转到jsp页面
        req.getRequestDispatcher("login.jsp").forward(req,resp);
    }
}

(2)接受其它Servlet跳转的Servlet类,接收到相应的request和respond对象


@WebServlet("/ser14")
public class Servlet14 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //接收客户端请求的参数
        String uname = req.getParameter("uname");
        System.out.println("Servlet14 uname : "+ uname);
    }
}
(四)request作用域 1. request作用域的应用方法
 

request域中的值可以通过请求转发,在其它Servlet或者jsp页面被调用

2.代码演示

(1)设置request域对象,进行请求转发

@WebServlet("/ser15")
public class Servlet15 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Servlet15...");

        //设置对象内容
        req.setAttribute("name","admin");
        req.setAttribute("age",18);
        List list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        req.setAttribute("list",list);

        //请求转发跳转到Servlet16
        //req.getRequestDispatcher("ser16").forward(req,resp);
        //请求转发跳转到jsp 并通过域对象传递数据
        req.getRequestDispatcher("index.jsp").forward(req,resp);
    }
}

(2)获取request域对象的Servlet

@WebServlet("/ser16")
public class Servlet16 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Servlet16...");

        //获取域对象内容
        String name = (String) req.getAttribute("name");
        System.out.println("name :"+name);
        Integer age = (Integer) req.getAttribute("age");
        System.out.println("age :"+age);
        List list = (List) req.getAttribute("list");
        System.out.println(list.get(0));

    }
}

(3)获取request域对象的jsp页面

<%@ page import="java.util.List" %>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>



    JSP - Hello World


index页面

<%-- 如果要在jsp中写Java代码,需要写在脚本段中 --%> <% //获取参数,request.getParameter("uname")是获取页面表单get/post到Servlet的数据 String uname = request.getParameter("uname"); //获取request作用域 String upwd = (String) request.getAttribute("upwd"); //输出内容 out.print(uname); out.print("....."); out.print(upwd); %>
二、response 响应 (一)response的应用 1. 方法
 
2. 代码演示 
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        

        
        // 得到字节输出流
        ServletOutputStream out = resp.getOutputStream();;
        //输出数据
        out.write("Hi".getBytes());
    }
(二)解决response应用时发生乱码问题 1. 原因和解决方法
 
2. 代码演示 
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        

        //同时设置客户端和服务端的编码样式
        resp.setContentType("text/html;charset=UTF-8");

        
        //获取字符输出流
        PrintWriter writer = resp.getWriter();
        //输出数据
        writer.write("你好");
    }
(三)response 进行重定向跳转 1. 重定向说明
 
2. 代码演示 

(1)跳转演示request对象不共享

例:跳转到Servlet的ser24站点

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Servlet24...");

        //接收参数
        String uname = req.getParameter("uname");
        System.out.println("Servlet24 : " + uname);

        //重定向跳转ser25
        resp.sendRedirect("ser25");
    }

接收跳转的ser25站点

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Servlet25...");

        //接收参数
        String uname = req.getParameter("uname");
        System.out.println("Servlet25 : " + uname);
    }

重定向后,无法接收到request对象

3. 重定向和转发跳转的区别
 
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Servlet25...");

        //接收参数
        String uname = req.getParameter("uname");
        System.out.println("Servlet25 : " + uname);

        //设置request对象
        req.setAttribute("upwd","123456");

        //请求转发
        //req.getRequestDispatcher("index.jsp").forward(req,resp);

        //重定向
        //resp.sendRedirect("index.jsp");

        //重定向跳转到百度
        //resp.sendRedirect("http://www.baidu.com");

        //请求转发到百度,(404)
        //req.getRequestDispatcher("http://www.baidu.com").forward(req,resp);
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/763356.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号