JSP常用内置对象:out、request、response

学习目标(常用九大内置对象)

  • out
  • request
  • response
  • page
  • session
  • application
  • pageContext
  • config
  • exception
    在这里插入图片描述

1、什么是JSP内置对象

  • JSP内置对象是Web容器创建的一组对象,在JSP页面中不需要new就可以直接使用。

1.1、out对象

  • 在网页中输出文本语法:
    <%="文本内容1<br/>"%>  #表达式输出
    <%  out.print("文本内容2<br/>");  %>  #out对象
    <%  out.println("文本内容3<br/>");  %> #out对象
    
    在这里插入图片描述
  • out对象是向用户输出内容最常用的内置对象
  • out对象常用方法:
    在这里插入图片描述
  • 常用方法的使用:
    out.println(out.getRemaining());
    out.println(out.isAutoFlush());
    out.println("<br>调用clearBuffer前");
    out.flush();
    out.clearBuffer();
    out.println("<br>调用clearBuffer后");
    out.println("<br>调用clear前");
    out.flush();
    out.clear();//此时发生错误
    out.println("<br>调用clear后");
    out.flush();
    
  • out对象缓冲区自动刷新设置
    <%@ page language="java" import="java.util.*,java.text.*" 
    pageEncoding="utf-8" autoFlush="true"%> #此处的autoFlush代表自动输出缓冲池内容
    
    <%
        out.clearBuffer();
        for(int i=0;i<8174;i++){
            out.print("a");
        }
        out.print("<br>");
        out.print("缓冲区大小:"+out.getBufferSize());
        out.print("<br>");
        out.print("缓冲区剩余:"+out.getRemaining());
    %>
    
  • out对象的close方法
    <%
        out.println("<br>调用close前");
        out.close();
        out.println("<br>调用close后");
        out.flush();
    %>
    

1.2、request对象

  • request对象主要用于处理客户端请求
    在这里插入图片描述

  • request对象常用方法:
    在这里插入图片描述

  • 将页面中的动态信息提交给服务器,封装客户端的请求信息

  • 有如下登录页面表单login.jsp

    <div class="box">
                <h1>欢迎回到易买网</h1>
                <form id="loginForm" method="post" action="UserServlet" onsubmit="return checkForm(this)">
                    <table>
                        //此处是一个隐式输入框,用于传递参数op
                        <input type="hidden" name="op" value="login"/>
                        <tr>
                            <td class="field">用户名:</td>
                            <td><input class="text" type="text" name="userName" onfocus="FocusItem(this)"
                                       onblur="CheckItem(this);"/><span></span></td>
                        </tr>
                        <tr>
                            <td class="field">登录密码:</td>
                            <td><input class="text" type="password" id="passWord" name="passWord" onfocus="FocusItem(this)"
                                       onblur="CheckItem(this);"/><span></span></td>
                        </tr>
                        <tr>
                            <td class="field">验证码:</td>
                            <td><input class="text verycode" type="text" name="veryCode" onfocus="FocusItem(this)"
                                       onblur="CheckItem(this);"/><img id="veryCode" src="checkCode" onclick="changeCheckCode(this)"/><span></span>
                            </td>
    
                        </tr>
                        <tr>
                            <td></td>
                            <td>
                                <label class="ui-green"><input type="submit" name="submit" value="立即登录"/></label>
                                <label><a href="forgetPassword.jsp">忘记密码?</a></label>
                                <label style="width:180px;text-align:right;color:red;font-size: 18px;"> ${requestScope.ERRORS}</label>
                            </td>
                        </tr>
                    </table>
                </form>
     </div>
    

    在这里插入图片描述

  • servlet服务程序端

    /**
     * @author 一宿君(CSDN : qq_52596258)
     * @date 2021-05-25 07:04:03
     */
    @WebServlet("/UserServlet")
    public class UserServlet extends HttpServlet {
        UserService userService = new UserServiceImpl();
    
        /**
         * 登录
         *
         * @param req
         * @param resp
         */
        public void login(HttpServletRequest req, HttpServletResponse resp) {
            try {
    
                //请求转发
                req.getRequestDispatcher("HelloWorld.jsp?id=1001&name=zhangsan").forward(req,resp);
    
            }catch (Exception ex){
                ex.printStackTrace();
            }
        }
       @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           doPost(req,resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            req.setCharacterEncoding("UTF-8");
            resp.setContentType("text/html;charset=utf-8");
            String op = req.getParameter("op");
            switch (op){
                case "register":
                    register(req,resp);
                    break;
                case "login":
                    login(req,resp);
                    break;
                case "forgetPassword":
                    forgetPassword(req,resp);
                    break;
                case "showUpdatePwdPage":
                    showUpdatePwdPage(req,resp);
                    break;
                case "updatePwd":
                    updatePwd(req,resp);
                    break;
            }
        }
    }
    
    
  • HelloWorld.jsp接收页面

    <%--
      Created by IntelliJ IDEA.
      User: wang'bo'shi
      Date: 2021/5/28
      Time: 10:49
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    
    <%
        String userName = request.getParameter("userName");
        out.print("用户名:" + userName);
        String password = request.getParameter("passWord");
        out.print("<br>密码:" + password);
    %>
    
    
    <br>提交方式: <%=request.getMethod() %><br>
    请求的URL地址: <%=request.getRequestURI() %><br>
    协议名称: <%=request.getProtocol() %><br>
    客户端请求服务器文件的路径: <%=request.getServletPath() %><br>
    URL的查询部分: <%=request.getQueryString() %><br>
    服务器的名称: <%=request.getServerName() %><br>
    服务器口号: <%=request.getServerPort() %><br>
    远程客户端的IP地址: <%=request.getRemoteAddr()%><br>
    获得发出请求的客户端地址: <%=request.getRequestURI()%><br>
    
    
    </body>
    </html>
    

    在这里插入图片描述

1.3、请求转发与重定向的区别

1.3.1、请求转发

  • 请求转发(依然从上述login.jsp页面提交請求到UserServlet中的login)
    	/**
         * 登录
         *
         * @param req
         * @param resp
         */
        public void login(HttpServletRequest req, HttpServletResponse resp) {
            /**
    		 * 请求转发:
    		 * 1、是Web服务器的一次内部行为
    		 * 2、请求地址栏到达servlet层不会改变
    		 * 3、request.setAttribute("userId",userId),可以在请求转发到的页面中通过request.getAttribute("userId");
    		 * 4、页面之跳转一次request还是同一个
    		 */
    		 req.setAttribute("userId","1001");
    		 req.getRequestDispatcher("HelloWorld.jsp").forward(req,resp);
        }
    
  • HelloWorld.jsp
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    
    <%--此处的request跟UserServlet中的是同一个request--%>
    userId:<%=request.getAttribute("userId")%>
    
    <br>
    <br>提交方式: <%=request.getMethod() %><br>
    请求的URL地址: <%=request.getRequestURI() %><br>
    协议名称: <%=request.getProtocol() %><br>
    客户端请求服务器文件的路径: <%=request.getServletPath() %><br>
    URL的查询部分: <%=request.getQueryString() %><br>
    服务器的名称: <%=request.getServerName() %><br>
    服务器口号: <%=request.getServerPort() %><br>
    远程客户端的IP地址: <%=request.getRemoteAddr()%><br>
    获得发出请求的客户端地址: <%=request.getRequestURI()%><br>
    
    </body>
    </html>
    
    在这里插入图片描述

1.3.2、重定向

  • 请求转发(依然从上述login.jsp页面提交請求到UserServlet中的login)
    	/**
         * 重定向
         * 1、请求地址栏会发生改变
         * 2、在重定向到的页面中无法使用request.getAttribute("");
         * 3、页面跳转了两次(先请求到servlet,再跳转到重定向页面)
         */
         req.setAttribute("userId","1001");
         resp.sendRedirect("HelloWorld.jsp");
        }
    
  • HelloWorld.jsp(有新注释)
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    
    <%--注意:
      --此处的request跟UserServlet中的不是同一个request了
      --刚问不到UserServlet中的userId了
    --%>
    userId:<%=request.getAttribute("userId")%>
    
    <br>
    <br>提交方式: <%=request.getMethod() %><br>
    请求的URL地址: <%=request.getRequestURI() %><br>
    协议名称: <%=request.getProtocol() %><br>
    客户端请求服务器文件的路径: <%=request.getServletPath() %><br>
    URL的查询部分: <%=request.getQueryString() %><br>
    服务器的名称: <%=request.getServerName() %><br>
    服务器口号: <%=request.getServerPort() %><br>
    远程客户端的IP地址: <%=request.getRemoteAddr()%><br>
    获得发出请求的客户端地址: <%=request.getRequestURI()%><br>
    
    </body>
    </html>
    
    在这里插入图片描述

1.4、getParameterMap()获取所有可用参数的枚举

  • 同样是在上述UserServlet的login中
    	/**
         * 登录
         *
         * @param req
         * @param resp
         */
        public void login(HttpServletRequest req, HttpServletResponse resp) {
            try {
    
                /**
                 * 获取表单中的所有name参数map集合
                 */
                Map<String,String[]> map = req.getParameterMap();
                Set<String> stringSet = map.keySet();
                for(String key:stringSet){
                    System.out.println(key + ":" + req.getParameter(key));
                }
    
                //请求转发
                req.getRequestDispatcher("HelloWorld.jsp?id=1001&name=zhangsan").forward(req,resp);
    
            }catch (Exception ex){
                ex.printStackTrace();
            }
        }
    
  • 控制台输出
    在这里插入图片描述

1.5、response对象

  • response对象用于响应客户请求并向客户端返回信息
    在这里插入图片描述
  • response对象常用方法:
    在这里插入图片描述

1.5.1、response对象设置响应数据类型

  • 当用户访问JSP页面时,可以使用setContentType操作动态改变contentType属性值,设置响应数据类型有以下几种:
    text/html:网页;
    text/plain:纯文本;
    application/x-msexcel:Excel文件;
    application/msword:World文件;
    application/json:json格式对象
    
  • 仍然是从login.jsp页面进行提交到servlet中的login
  • 在login中直接将信息返回给浏览器(text/html:网页)
    	/**
    	     * 登录
    	     *
    	     * @param req
    	     * @param resp
    	     */
    	    public void login(HttpServletRequest req, HttpServletResponse resp) {
    	        //改变 contentType 的属性值
    	        resp.setContentType("text/html;charset=utf-8");
                PrintWriter out = resp.getWriter();
                out.println("hello ,my name is 一宿君");
    	    }
    
    在这里插入图片描述
  • 响应json数据类型
    	/**
    	     * 登录
    	     *
    	     * @param req
    	     * @param resp
    	     */
    	    public void login(HttpServletRequest req, HttpServletResponse resp) {
    	        //改变 contentType 的属性值
    	        resp.setContentType("application/json;charset=utf-8");
            	PrintWriter out = resp.getWriter();
            	//此处要使用转义字符,才能识别双引号
            	out.println("{\"id\":\"1001\",\"name\":\"一宿君\",\"age\":21}");
    	    }
    
    在这里插入图片描述
    在这里插入图片描述

1.6、自动转换json格式数据(alibaba)

  • 在pom.xml文件中引入如下依赖
    <!-- fastjson -->
    <dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>fastjson</artifactId>
           <version>1.2.75</version>
    </dependency>
    
    在这里插入图片描述

1.6.1、测试Map

public static void main(String[] args) {
	        Map<Object,Object> map = new HashMap<>();
	        map.put("id","1001");
	        map.put("name","zhangsan");
	        map.put("age",21);
	
	        System.out.println(JSON.toJSON(map)); 
}

在这里插入图片描述

1.6.2、测试list集合

public static void main(String[] args) {
	    List list = new ArrayList();
        list.add("1002");
        list.add("lisi");
        list.add(22);

        System.out.println(list);
}

在这里插入图片描述

1.6.3、测试将User对象存入list集合中

		User user1 = new User();
        user1.setUserId("1001");
        user1.setUserName("zhangsan");
        user1.setPassword("123456");

        User user2 = new User();
        user2.setUserId("1002");
        user2.setUserName("lisi");
        user2.setPassword("123456");

        List<User> userList = new ArrayList<>();
        userList.add(user1);
        userList.add(user2);

        System.out.println(JSON.toJSON(userList));

控制台输出(list集合输出没有顺序)

[{"password":"123456","role":0,"userName":"zhangsan","userId":"1001","status":0},
{"password":"123456","role":0,"userName":"lisi","userId":"1002","status":0}]

这就很强悍了哈,以后我们会大量使用这种转换json数据格式。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一宿君

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

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

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

打赏作者

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

抵扣说明:

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

余额充值