J2_jsp数据传递与保存

JSP实现数据传递和保存

传递:

1)获取表单提交的数据
  • 请求对象:request

    public String getParameter(String name)---返回对象是String类型
    
  • 示例

    • HTML代码:

      <input type="text" name="userName" />
      
    • JSP代码:

      String userName = request.getParameter("userName");
      

a) 使用request.getParameter()获取参数

b) 用<%out.print()%>或<%=变量%>显示数据

c) url中 ,机密数据的提交不适合采用get方式

d)表单提交get与post区别 :

​ get从服务器上获取数据,post是向服务器上传递数据

比较项Getpost
参数出现在URL中(?name=xxx&pwd=aaa)
长度限制
安全性
URL可传播
速度速度快(查询)(增删改)

2)获取同名多个参数
<input type="checkbox"  name="mailId"  value="10001" />
<input type="checkbox"  name="mailId"  value="10002" />
<input type="checkbox"  name="mailId"  value="10003" />
<input type="checkbox"  name="mailId"  value="10004" />
<input type="checkbox"  name="mailId"  value="10005" />

getParameterValues输出多个参数:

String[] mailIds = request.getParameterValues("mailId");
if(mailIds!=null && mailIds.length!=0){
	//循环mailIds访问提交的数据
}else{
	//未提交与参数mailId相关的数据
}
<!-- getParameterValues输出多个参数 -->
<%
String[] mailIds = request.getParameterValues("mailId");
if(mailIds!=null && mailIds.length!=0){
    for(int i=0; i<mailIds.length; i++){
        out.print(mailIds[i]);
    }
}else{
    
}
%>
3)request对象常用方法
方法名称说明
String getParameter(String name)根据表单组件名称获取提交数据
String[ ] getParameterValues(String name)获取表单组件对应多个值时的请求数据
void setCharacterEncoding(String charset)指定每个请求的编码
RequestDispatcher getRequestDispatcher(String path)返回一个RequestDispatcher对象,该对象的forward( )方法用于转发请求
4)9大内置对象
  • 请求对象:request
  • 输出对象:out
  • 响应对象:response
  • 应用程序对象:application
  • 会话对象:session
  • 页面上下文对象:pageContext
  • 页面对象:page
  • 配置对象:config
  • 异常对象:exception
5)中文乱码

一、post数据如何传递的?

form表单做提交的时候,login.jsp有内置对象request,在表单传递到dologin.jsp页面时,request对象也会传过去,同一个request对象。将数据放进request里面,一起扔给dologin.jsp。

post乱码会在dologin.jsp拿出的时候乱码。

  • JSP中默认使用的字符编码方式:iso-8859-1,不支持中文

  • 常见的支持中文的编码方式:

    编码方式收录的字符
    gb2312常用简体汉字
    gbk简体和繁体汉字
    utf-8所有国家需要的字符
  • 设置请求和响应的编码方式

    • request.setCharacterEncoding(“utf-8”);
    • response.setCharacterEncoding(“utf-8”);
    • <%@ page language=“java” contentType=“text/html; charset=utf-8”%>

二、get是以路径的方式提交,在路径后面加?拼接参数

  • get请求出现乱码

    • 治标的方法:new String( s.getBytes(“iso-8859-1”), “utf-8” );

    • 治本的方法:配置tomcat的conf\server.xml文件

      • URIEncoding=“UTF-8”
      • useBodyEncodingForURI=“true”
      <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
      
  • 使用response.sendRedirect(“url”)实现页面跳转,注册成功跳转到注册成功的页面

6) 在请求中存取属性
  • 在请求中保存属性
    • public void setAttribute(String name, Object o)—(属性名, 引用类型 属性值)
    • request.setAttribute(“mess”, “注册失败”);
  • 在请求中获取属性
    • public Object getAttribute(String name)—Object:属性值;(属性名)

1、在使用属性值的时候要做非空判断,否则会出现空指针异常

2、它的返回值类型是Object类型,需要做数据类型的转换

//页面A中保存属性(然后跳转页面B)
    request.setAttribute("msg", "信息");
    request.getRequestDispatcher(B页面路径).forward(request, response)//跳转B
  
//页面B中获取属性   getAttribute获取为Object类型,需要类型转换
String mess = (String)request.getAttribute("mess");
<!-- 没有mess.length(); -->
if(mess!=null){
//在请求中取到"mess"属性对应的属性值,正常使用mess数据
}else{
//在请求中没有取到"mess"属性对应的属性值,使用备选方案
}
7) 转发与重定向
  • 转发(携带参数进行跳转)

    • RequestDispatcher对象

    • forward()方法

      1、request.getRequestDispatcher("url").forward(request, response)  request设置属性的
      2、<jsp:forward page="url" />
      
  • 重定向:将用户请求重新定位到一个新的URL

    response.sendRedirect("url")
    

getParameter: 从请求里面拿参数;返回String类型

getAttribute:从属性拿参数;返回Object类型(toString())

两者区别:

  1. 转发在服务器端完成的;重定向是在客户端完成的。转发使用getRequestDispatcher()方法;重定向使用sendRedirect()。
  2. 转发的速度快;重定向速度慢。转发是浏览器只做了一次访问请求。重定向是浏览器做了至少两次的访问请求
  3. 转发的是同一次请求;重定向是两次不同请求。转发2次跳转之间传输的信息不会丢失(共享request),重定向2次跳转之间传输的信息会丢失,因为重定向产生了新的请求
  4. 转发不会执行转发后的代码;重定向会执行重定向之后的代码
  5. 转发:浏览器url的地址栏不变。重定向:浏览器url的地址栏改变
  6. 转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成
比较项转发重定向
URL变化
重新发出请求不会
是否携带请求
目标URL要求仅本Web应用任意URL

四大作用域:
  • pageContext对象

  • request对象

  • session对象

  • application对象


session在多页面显示用户名
  • 使用会话对象session实现

    • 一个会话就是浏览器与服务器之间的一次通话
    • 会话可以在多次请求中保存和使用数据
  • session语法:

    public void setAttribute(String name, Object value);
    用法:session.setAttribute("username","呵呵呵");
    
    public Object getAttribute(String name);
    用法:String userName = (String)session.getAttribute("userName")
    
  • 每个session都有一个唯一的sessionid

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

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

    • 设置会话失效:session.invalidate();

    • 移除会话的属性

    • 语法:public void removeAttribute(String name);

      session.removeAttribute("userName");
      
  • 服务器主动清除长时间没有再发出请求的seesion

    • 设置会话过期时间

      • 方法一:public void setMaxInactiveInterval(int interval); 单位:秒

      • 方法二:

        <session-config>
               <session-timeout>30</session-timeout>  //单位:分钟
        </session-config>
        

小结:

用浏览器访问服务器——产生会话

通过浏览器在网站登录——在会话中保存数据

登录成功后用个人身份进行访问——会话有效期内

关闭了浏览器——结束会话

服务器主动结束会话——会话到期

使会话失效、删除属性——及时释放会话资源

程序主动结束会话、会话到期——会话中的数据丢失

cookie实现自动填写用户名
  • cookie以文件方式保存数据

    • 添加数据:public void addCookie(Cookie cookie)

    • 获取数据:public Cookie[] getCookies()

    • 设置有效期:public void setMaxAge(int expiry)

    • 用户可以禁用cookie

application统计页面访问次数

application实现计数器

分析

​ 每个用户都需要使用访问次数

​ application可在整个项目中共享使用数据

​ 使用application实现计数器

​ 每次访问该页面,计数器加1

解决方法

​ public void setAttribute(String name, Object object)

​ public Object getAttribute(String name)

三个对象对比
  • 相同点:都可以存储属性
  • 不同点:
    • request中存储的数据仅在一个请求中可用
    • session中存储的数据在一个会话的有效期内可用
      pplication实现计数器

分析

​ 每个用户都需要使用访问次数

​ application可在整个项目中共享使用数据

​ 使用application实现计数器

​ 每次访问该页面,计数器加1

解决方法

​ public void setAttribute(String name, Object object)

​ public Object getAttribute(String name)

三个对象对比
  • 相同点:都可以存储属性
  • 不同点:
    • request中存储的数据仅在一个请求中可用
    • session中存储的数据在一个会话的有效期内可用
    • application中存储的数据在整个Web项目中可用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朱尔斯Jules

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值