Javaweb 2JSP实现数据传递和保存

目录

获取表单提交的数据

内置对象

转发与重定向

使用session保存用户名

使用cookie自动填写用户名

application实现计数器

request、session、application三个对象对比


获取表单提交的数据

请求对象:request

public String getParameter(String name)

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

JSP代码:String userName = request.getParameter("userName");

get与post区别

比较项Getpost
参数出现在URL中
长度限制
安全性
URL可传播

比较项getpost
缓存可以不可以
收藏为书签可以不可以
数据长度有限制(URL 的最大长度是 2048 个字符)无限制
编码类型application/x-www-form-urlencodedapplication/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。
对数据类型的限制只允许 ASCII 字符没有限制。也允许二进制数据
安全性不安全安全
可见性数据在 URL 中对所有人都是可见的数据不会显示在 URL 中

request对象常用方法

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

内置对象

JSP已经准备好的,可以直接使用的对象

1.请求对象:request

request 对象是 javax.servlet.httpServletRequest类型的对象。

2.输出对象:out

out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。

3.响应对象:response

response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。

4.应用程序对象:application

application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。

5.会话对象:session

session 对象是由服务器自动创建的与用户请求相关的对象

6.页面上下文对象:pageContext

pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。

7.页面对象:page

page 对象代表JSP本身,只有在JSP页面内才是合法的。

8.配置对象:config

config 对象的主要作用是取得服务器的配置信息。

9.异常对象:exception

exception 对象的作用是显示异常信息,只有在包含 isErrorPage="true" 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。

jsp脚本

<%-- 该部分注释在网页中不会被显示--%>
​
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
language:指定JSP页面使用的脚本语言
import:通过该属性来引用脚本语言中使用到的类文件
contentType:用来指定页面的MIME类型,以及字符编码方式
​
<%@page import="包路径"%>  //导包
​
<%   代码块  %>
​
<%=变量名 %> //用于输出变量
​
<%!public String testMethod(String param) {//定义方法
        return param;
    }
%>
​
<%=testMethod("参数") %> //调用方法 
 

内置对象---out对象

实现数据的输出显示
    out.print("输出...")

内置对象---request对象

请求对象(主要用途,接收用户发送过来的数据)
 <input type="text" name="userName" />  
 
 //name属性名userName使用 发送与接收要对应
 String userName = request.getParameter("userName");
 
 // 如果遇到多个name相同的情况(checkbox)
  String userLoves = request.getParameterValues("userLoves");

中文乱码

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请求出现乱码

治标的方法: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"/>
​
//post请求使用
request.setCharacterEncoding("utf-8"); //请求乱码
response.setCharacterEncoding("utf-8");//响应乱码
​
//get请求使用
new String(变量.getBytes("iso-8859-1"), "utf-8" ); 
或
配置tomcat\conf\server.xml文件Connector 标签中
URIEncoding="UTF-8"
useBodyEncodingForURI="true"

在请求中存取属性

在请求中保存属性

public void setAttribute(String name,Object o)
request.setAttribute("mess", "注册失败");

在请求中获取属性

public Object getAttribute(String name)

注意:

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

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

转发与重定向

转发

RequestDispatcher对象

forward()方法

1、request.getRequestDispatcher("url").forward(request, response)

2、<jsp:forward page="url" />

重定向

将用户请求重新定位到一个新的URL

response.sendRedirect("url")

转发与重定向的区别

比较项转发重定向
URL变化
重新发出请求不会
是否携带请求
目标URL要求仅本Web应用任意URL

注意:重定向是客户端行为,转发是服务器行为

//转发
 request.getRequestDispatcher(B页面路径).forward(request, response);
 
 //重定向
 response.sendRedirect("url")
​
区别:
1.转发url没有发生变化,而重定向会
2.转发不会重新发送请求,重定向会
3.转发可以携带参数,而重定向不可以
4.转发只可跳转当前项目路径,而重定向可以跳转任意url

使用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的工作方式

每个session都有一个唯一的sessionid

public String getId();

session.getId();

会话的清除和过期

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

程序主动清除session数据

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

程序主动清除session数据

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

移除会话的一个属性

public void removeAttribute(String name);
用法:session.removeAttribute("userName");

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

设置会话过期时间

方法一: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

//cookie的使用
//如果有中文
username = URLEncoder.encode(username,"utf-8");
Cookie cookie = new Cookie("username",username);
//设置路径,这个路径即该工程下都可以访问该cookie 如果不设置路径,那么只有设置该cookie路径及其子路径可以访问
cookie.setPath("/");
//设置cookie生命周期
cookie.setMaxAge(60*60);
response.addCookie(cookie);
​
​
获取cookie
Cookie[] cookies = request.getCookies();
    if(cookies!=null && cookies.length!=0){
        for(int i=0;i<cookies.length;i++){
            System.out.println(cookies[i].getName());
            if(cookies[i].getName().equals("username")){
                username = cookies[i].getValue();
                username = URLDecoder.decode(username,"utf-8");
            }
        }
    }

application实现计数器

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

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

使用application实现计数器

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

request、session、application三个对象对比

相同点: 都可以存储属性

不同点: request中存储的数据仅在一个请求中可用

             session中存储的数据在一个会话的有效期内可用

             application中存储的数据在整个Web项目中可用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值