美文网首页
三、JSP实现数据传递

三、JSP实现数据传递

作者: lifeline丿毅 | 来源:发表于2018-06-22 10:20 被阅读22次

    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

    相关文章

      网友评论

          本文标题:三、JSP实现数据传递

          本文链接:https://www.haomeiwen.com/subject/xafoeftx.html