美文网首页
三、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