三、JSP实现数据传递

JSP六大组成部分:

标志 名称 作用
1、html 静态页面 页面显示和展示数据
2、<%%> 小脚本 编辑Java代码
3、<%@%> 指令 指定JSP的内容、格式、字符集编码或者导包
4、< %=%> 表达式 展示数据/输出数据
5、< !-- --> HTML注释 注释(后台可见)
< %-- --%> JSP注释 注释
6、< %!%> 声明 声明仅能在当前页使用的数据

九大内置对象

  • 请求对象:request
  • 输出对象:out
  • 响应对象:response
  • 应用程序对象:application
  • 会话对象:session
  • 页面上下文对象:pageContext
  • 页面对象:page
  • 配置对象:config
  • 异常对象:exception

请求对象:request

  • public String getParameter(String name)
示例
  • HTML代码:
    <input type ="text" name ="userName">
  • JSP代码:
    String userName=request.getParameter("userName");

request常用方法

方法名称 说名
String getParameter(String name) 根据表单组件名称获取提交数据
String[] getParameterValues(String name) 获取表单组件对应多个应用值时的请求数据
void serCharacterEncoding(String charset) 指定每个请求的编码
RequestDispatcher getRequestDispatcher(String path) 返回一个RequestDispatcher对象,该对象的forward()方法用于转发请求

获取同名的多个参数(复选框)

<h1>这是处理注册的页面,注册提交的数据将发送至这里</h1>
    <%
    //乱码处理(post)
        request.setCharacterEncoding("utf-8");//post中文乱码
        response.setCharacterEncoding("utf-8");
        
    //接收用户
        String userName = request.getParameter("userName");
        //get乱码处理
            /* byte[] userNames = userName.getBytes("ISO-8859-1");
            userName = new String(userNames,"utf-8"); */
        //  userName = new String(userName.getBytes("ISO-8859-1"),"utf-8");
    //接收密码
        String userPass = request.getParameter("userPass");
    //接收兴趣爱好-----数组形式----多个值
    String[] hobbys = request.getParameterValues("hobby");//复选框获取值
    //out.println("注册成功!注册的用户名是:"+userName+"密码是:"+userPass);
    %>
    用户名:<%
            if(userName != null && !userName.equals("")){
         %> 
         <%=userName %>
         <%
            }else{
                out.println("用户未填写!");
            }
         %>
    密码:<%=userPass %>
    爱好:<br/>
        <%
        if(hobbys !=null){
            for(String hobby : hobbys){
                out.println(hobby+"<br/>");
            }
        }else{
            out.println("你没有任何选择!");
        }
        %>
图片.png
图片.png
图片.png

get与post区别:

图片.png

中文乱码处理

表单post方式提交,中文乱码
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");(可以不加)
表单get方式提交,中文乱码
/* byte[] userNames = userName.getBytes("ISO-8859-1");
    userName = new String(userNames,"utf-8"); */
    userName = new String(userName.getBytes("ISO-8859-1"),"utf-8");(治标不治本)
  • 治本的方法:
    配置Tomcat\conf\server.xml文件


    图片.png

在请求中保存属性

  • public void setAttribute(String name,Object o)
  • request.setAttribute("mess","注册失败")(键值对的形式)

在请求中获取属性

  • public Object getAttriebute(String name)
    1、在使用属性值的时候要做非空判断,否则会出现空指针异常
    2、它的返回值类型是Object类型,需要最数据类型转换
图片.png

转发与重定向

转发

  • RequestDispatcher
  • forward()方法
    1、request.getRequestDispatcher("url").forward(request,response)
    2、<jsp:forward page = "url"/>

重定向

  • 将用户请求重新定位到一个新的URL
    response.sendRedirect("url")
用户名:<%
            if(userName != null && !userName.equals("")){
                
                if(userName.equals("admin")){
                    //如果userName等于admin注册失败,返回注册页面
                    request.setAttribute("mess", "注册失败,用户名已存在!");
                    //转发
                    request.getRequestDispatcher("register.jsp").forward(request, response);
                }else{
                    //注册成功跳转到主页面
                    request.setAttribute("mess", "注册成功");
                    //重定向
                    response.sendRedirect(basePath+"/pages/newsDetail.jsp");
                }

跳转页面代码在请求中获取属性

  • 它的返回值类型是Object类型,需要最数据类型转换
    <%
    Object omess = request.getAttribute("mess");
    if(omess != null){
        out.println(omess.toString());
    }
    %>

转发:服务器内部自动完成了跳转,服务器行为无形中延长了request作用域

图片.png

session存取数据

page:作用域仅限于当前页面

session(服务器端使用的记录同一客户状态的机制):setAttribute()作用域是一次会话
会话:一个会话就是浏览器和服务器之间的一次通话,会话可以在多次请求中保存和使用数据
session.getId()方法可以以获得sessionId
session是单一用户、多页面可共享的。session保存在服务器端

会话的清除和过期时间

若没有清理机制,会导致性能问题或服务器崩溃

  • 程序主动清除session数据
  • 服务器主动清除长时间没有再次发出请求的session

程序主动清除session数据

  • 设置会话失效:session.invalidate();
  • 一处会话的一个属性
    public void removeAttrilbute(String name);
    用法:(跳转后的页面)
<a href="<%=basePath %>jsp/register.jsp">
注销</a>
    <%  
        //设置session过期方法一
        session.setMaxInactiveInterval(10);
    }
    %>

       <%
                session.invalidate();//常用
                //session.removeAttribute("userName");
                response.sendRedirect(basePath+"/pages/loginOut.jsp");
                %>

session.removeAttribute("userName");


图片.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容

  • 父亲节最早是1910年,诞生在美国。由华盛顿一位叫多德的夫人想到,然后她给州政府写信,每年六月份...
    笔落情生_4554阅读 415评论 0 3
  • 一晃已经13年过去了,13年前,我还是个天真无忧的少女,13年后的今天,我是镇守一方,云南穆府的郡主。可是,13年...
    不成文女孩阅读 1,100评论 0 1
  • 可能湖南这边确实比广西那边又热一些,可是冬天的时候我在广西,我可以穿一条牛仔裤儿,在这里我我要穿三条加绒的裤子,可...
    1大太阳阅读 168评论 0 1