笔记总结:Web后端——JSP数据传递

JSP数据传递

一、JSP内置对象

1.概念

Web容器创建的一组对象,在页面中可以直接使用。

常用对象有:request、response、session、application、out、page、pageContext、config、exception。

2.对象out
  1. 数据类型

    javax.servlet.jsp.JspWriter

  2. 作用

    向浏览器输出信息,负责管理对客户端的输出

  3. 用法

    <%
    	//在页面上输出内容
    	out.println("Hello JSP");
    %>
    
3.对象request
  1. 数据类型

    这是接口

    javax.servlet.http.HttpServletRequest

  2. 作用

    获取客户端的参数和数据流

  3. 常用方法

    String getParamter(String name);
    String[] getParamterValues(String name);
    //设置请求内容的字符集编码
    void setCharacterEncoding(String charset);
    //RequestDispatcher的forward()方法用于转发请求
    RequestDispatcher getRequestDispatcher(String path);
    Cookie[] getCookies();
    //获取请求中所有参数和参数值的映射
    Map<String, String[]> getParamterMap();
    //获取当前对话
    HttpSession getSession();
    
  4. 示例

    <!--向info.jsp提交表单/发送请求-->
    <form action="info.jsp" method="post">
    <div><span>用户名</span><input type="text" name="username"></div>
    <div><span>密码</span><input type="password" name="password"></div>
    <div>
    <span>信息来源</span>
    <input type="checkbox" name="channel" value="报刊">报刊
    <input type="checkbox" name="channel" value="网络">网络
    <input type="checkbox" name="channel" value="朋友推荐">朋友推荐
    <input type="checkbox" name="channel" value="电视"> 电视
    </div>
    <div>
    <input type="submit" value="注册">
    <input type="reset" value="重置">
    </div>
    </form>
    

    info.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java"%>
    <% 	request.setCharacterEncoding("UTF-8");
    	String name = request.getParamter("username");
       	String password = request.getParamter("password");
    	String[] channels = request.getParamterValues("channel");
    	//如果在get请求下字符集是乱码的解决办法
    	for(String channel : channels){
            byte[] bytes = channel.getBytes(StandardCharsets.IOS_8859_1);
            String s = new String(bytes, StandardCharsets.UTF_8);
        }
    %>
    <div><%= name %></div>
    <div><%= password %></div>
    <div><%= Arrays.toString(channels) %></div>
    
  5. get和post请求的区别

    • get请求的参数在URL中,post请求的参数在请求体(body)中。
    • get请求有数据长度限制,这是浏览器或服务器为提升处理效率而作出的限制,而post请求没有。
    • get请求安全性低,因为在url中直接暴露了信息,而post请求安全性高,因为其参数在请求体中,隐藏了信息。
4.对象response
  1. 数据类型

    javax.servlet.http.HttpServletResponse

  2. 作用

    对客户端请求做出回应

  3. 常用方法

    void addCookie(Cookie c);
    //重定向资源
    void sendRedirect(String url);
    //设置响应状态码
    void setStatus(int status);
    //获取打印流,用于向页面传输数据
    PrintWriter getWriter();
    //获取输出流,用于图片传输,下载等
    ServletOutputStream getOutputStream();
    //设置向用户输出数据的字符集编码
    void setCharacterEncoding(String charset);
    
  4. 示例:实现登录页面跳转,并在跳转页显示登录信息

    <form action="process.jsp" method="post">
    <div><span>用户名</span><input type="text" name="username"></div>
    <div><span>密码</span><input type="password" name="password"></div>
    <div>
    <input type="submit" value="登录">
    </div>
    </form>
    

    process.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java"%>
    <%
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    if("admin".equals(username) && "123456".equals(password)){
        //请求不能传递,需要转发
        //将收到的请求打包成为一个对象
        RequestDispatcher dispatcher = request.getRequestDispatcher("main.jsp");
        //转发,同时修改页面
        dispatcher.forward(request, response);
    }
    %>
    

    main.jsp

    转发后修改了process.jsp页面

    <%@ page contentType="text/html;charset=UTF-8" language="java"%>
    <%
        String username = request.getParameter("username");
        String password = request.getParameter("password");
    %>
    <div>用户名: <%= username %></div>
    <div>密码: <%= password %></div>
    

    转发成功后,用户的地址栏信息未发生改变,而页面发送跳转,说明转发发生在服务器,由服务器完成。

5.对象session
  1. 概念

    浏览器与服务器之间的一次通话

  2. 作用

    • http协议是无状态协议,用户访问服务器时,服务器无法感知用户的具体信息。

      服务器通过类HttpSession来感知用户,其对象为session。

    • 当用户第一次访问服务器时,服务器为该用户产生一个session对象,在对象中生成一个JSESSIONID来标识用户,并将其使用Cookie存储在浏览器中,用户的后续操作都将携带这个标识符。

    • session对象有一个超时时间用于计算用户的登录超时,用户的每次操作都将重置这个超时时间。

    • session对象还可以用于存储数据。

  3. 数据类型

    javax.servlet.http.HttpSession

  4. 常用方法

    //以键值对形式保存数据
    void setAttribute(String key, Object value);
    Object getAttribute(String key);
    void removeAttribute(String key);
    //设置session对象失效
    void invalidate();
    String getId();
    //设置session的非互动时间,单位秒
    void setMaxInactiveInterval(int interval);
    int getMaxInactiveInterval();
    
  5. 示例:将用户信息存储于session后重定向

    process.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java"%>
    <%
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    if("admin".equals(username) && "123456".equals(password)){
        session.setAttribute("username", username);
        session.setAttribute("password", password);
        response.sendRedirect("main.jsp");
    }
    %>
    

    main.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java"%>
    <%
        String username = session.getAttribute("username");
        String password = session.getAttribute("password");
    %>
    <div>用户名: <%= username %></div>
    <div>密码: <%= password %></div>
    
  6. include指令

    <%@ include file="文件名"%>
    

    在开发过程中,页面数量很多,如何确保用户的每次操作都是有效操作(在登录没有超时情况下的操作)呢?

    编写一个检测用户超时的页面,使用include指令引入每一页。

    timeout.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java"%>
    <%
    	String username = session.getAttribute("username");
    	//当用户超时时,session会被回收,session里面的数据就没有了
    	//当用户再次发送请求时,浏览器会为用户重新创建一个session对象,用户需要重新登录
    	if(username == null){
            response.sendRedirect("login.jsp");
        }
    %>
    
  7. session超时设置

    • Tomcat中web.xml
    • 工程中的web.xml
    • Java代码实现
6.对象application
  1. 数据类型

    javax.servlet.servletContext

  2. 作用

    实现用户数据共享,将数据保存于服务器中,直到服务器关闭。

  3. 常用方法

    void setAttribute(String key, Object value);
    Object getAttribute(String key);
    //获取相对路径的绝对路径
    String getRealPath(String path);
    
  4. 示例:统计用户的访问次数

    <%
    	Integer count = application.getAttribute("count");
    	if(count == null){
            count = 1;
        }else{
            count += 1;
        }
    	application.setAttribute("count", count);
    %>
    

二、Cookie

1.简介

Cookie是Web服务器保存于客户端的文本信息。Cookie机制是在客户端保存状态的方案,又叫会话跟踪机制,用于弥补http协议无状态的不足。

2.作用
  • 弥补HTTP无状态协议的不足
  • 简化登录,如记住密码、自动登录
3.常用方法
Cookie cookie = new Cookie("name", "value");
//设置Cookie的有效期,单位秒
void setMaxAge(int expiry);
void setValue(String value);
//获取Cookie的名称
void getName();
void getValue();
void getMaxAge();
4.案例

记住密码

<div><input type="checkbox" name="rememberMe">记住密码</div>
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
String rememberMe = request.getParamter("rememberMe");
if("admin".equals(username) && "123456".equals(password)){
    if(!rememberMe.equals("on"){
        String username = "";
        String password = "";
        String rememberMe = "";
    }
    Cookie usernameCookie = new Cookie("username", username);
    Cookie passwordCookie = new Cookie("password", password);
    Cookie rememberMeCookie = new Cookie("rememberMe", rememberMe);
    response.addCookie(usernameCookie);
    response.addCookie(passwordCookie);
    response.addCookie(rememberMeCookie);
    response.sendRedirect("main.jsp");
}
%>

自动填充密码

<%
	Cookie[] cookies = request.getCookies();
	String username;
	String password;
	boolean rememberMe = false;
	for(Cookie cookie : cookies){
        String name = cookie.getName();
        switch(name){
            case "username": 
                username = cookie.getValue();
                break;
            case "password": 
                password = cookie.getValue();
                break;
            case "rememberMe":
                if(cookie.getValue().equals("on")){
                    rememberMe = true;
                }
                break;
        }
    }
%>
<form action="process.jsp" method="post">
<div><span>用户名</span><input type="text" name="username" value=<%= username %>></div>
<div><span>密码</span><input type="password" name="password" value=<%= password %>></div>
<div><input type="checkbox" name="rememberMe" <%=rememberMe ? "checked" : "" %>>记住密码</div>
<div>
<input type="submit" value="登录">
</div>
</form>	
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值