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

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。JSP常用内置对象:out、request、response,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

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

  • 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数据格式。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/189479.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!