JSP九大内置对象和四大作用域

get和post区别:

比较项

get

post

缓存

可以

不可以

收藏为书签

可以

不可以

数据长度

有限制(URL 的最大长度是 2048 个字符)

无限制

编码类型

application/x-www-form-urlencoded

application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。

对数据类型的限制

只允许 ASCII 字符

没有限制。也允许二进制数据

安全性

不安全

安全

可见性

数据在 URL 中对所有人都是可见的

数据不会显示在 URL 中

1.解决中文乱码:

1.使用POST提交的解决方案:

第一种方式:设置请求编码

request.setCharacterEncoding("UTF-8");

或者

设置响应编码

response.setCharacterEncoding("UTF-8");

第二种:设置jsp页面的编码

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>

2.使用get提交的解决方案:

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

2.通过配置文件(一劳永逸)

conf——>server.xml

<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"URIEncoding="UTF-8" />

2.资源跳转和数据传递:

1.setAttribute和getAttribute

在JSP中为了方便数据使用,会通过request对象的属性进行保存和读取

这就要使用request对象的两个方法

四大作用域的对象都能够使用这两个方法

方法

注意

例如

void setAttribute(String name,Object o)

保存数据,该方法没有返回值,参数name表示属性名称,参数o表示属性的值,为Object类型

request.setAttribute("mess","注册失败")

public Object getAttribute(String name);

获取数据,该方法的返回值类型是Object类型,根据属性名获取值。在读取保存数据的时候,需要将数据类型转换为最初的类型。

String name =(String)request.getAttribute("mess");

注意:

  1. 如果请求对象中没有与参数名对应的属性,getAttribute会返回null值,所以我们在使用时要做非空判断,否则会出现空指针异常。
  2. getAttribute返回值类型是Object类型,而最初存入的数据是其他类型,就需要数据类型转换

2.重定向sendRedirect("URL"):

当客户端浏览器提交请求到服务器时,服务器JSP的处理结果是要客户端重新向服务器请求一个新的地址。重定向通常用于在处理完某个请求后,将用户引导到一个新的页面。这种技术在许多场景中都非常有用,例如表单提交后的结果页面跳转、登录验证后的页面跳转等。

重定向是基于response的response.sendRedirect("URL") 方法

注意:当页面跳转到指定页面时,本次请求数据将会丢失

response.sendRedirect("url")

3.使用转发实现页面跳转getRequestDispatcher

和重定向不同的是,转发可以使数据在多个页面中共享

请求转发是在服务器内部完成的,客户端不会感知到页面的变化。这意味着浏览器地址栏中的 URL 不会改变

request.getRequestDispatcher("path").forward(request,response);

4.转发和重定向比较

区别:

1.转发url没有发生变化,而重定向会

2.转发不会重新发送请求,重定向会

3.转发可以携带参数,而重定向,不可以不能够共享request,response

4.转发只可跳转当前项目路径,而重定向可以跳转任意url,转发只能在同一个WEB应用中使用,可以共享request范围内的数据

3、九大内置对象包含四大作用域:

3.1九大内置对象:

1.Cookie:

方法

说明

public void addCookie(Cookie cookie)

添加数据

public Cookie[] getCookies()

获取数据

public void setMaxAge(int expiry)

设置有效期

一个cookie只能记住一个键值对

// 创建cookie对象
Cookie usernameCookie = new Cookie("username", username);
Cookie passwordCookie = new Cookie("password", password);// 将 Cookie 添加到响应中
response.addCookie(usernameCookie);
response.addCookie(passwordCookie);

前后端分离,前端怎么存,JSP是属于后端的

前端就用Cookie

记住密码传过来的值要么是null要么是value

例子:前端cookie记住用户名和密码:

中文字段在传入的时候要编码

取出的时候要解码

//获得传过来的jzmmString jzmm = request.getParameter("jzmm");//cookie记住密码if (jzmm!=null){Cookie cookie1 = new Cookie("id",request.getParameter("id"));cookie1.setPath("/");String procode1 = URLEncoder.encode(procode);Cookie cookie2 = new Cookie("procode",procode1);cookie2.setPath("/");response.addCookie(cookie1);response.addCookie(cookie2);}

index页面读取cookie

cookie都是数组,因为浏览器默认生成一个cookie

<%String id = "";String procode="";// 获取cookieCookie[] cookies = request.getCookies();for (Cookie cookie:cookies){if (cookie.getName().equals("id")){id=cookie.getValue();}if (cookie.getName().equals("procode")){procode=URLDecoder.decode(cookie.getValue());}}
%>

2.response对象:

响应对象

重定向

response.sendRedirect("url")

3.out对象

out.print("内容");

3.2.四大作用域:

1.ContentType:

只作用在本页面,它的有效范围只在当前jsp页面里。是四大作用域里范围最小的

getAttribute的返回类型是Object

如果使用转发或者重定向离开本页面,数据不能用

    //存入数据pageContext.setAttribute("name","阿梦");//取出数据String name = pageContext.getAttribute("name").toString();

2.Request:

范围是一次请求,从客户端到服务器的一次过程

使用转发数据也能用

是JSP的内置对象,所以可以在JSP中直接使用

保存了用户的请求数据,通过调用相关方法就可以实现请求数据的读取

获取数据常用方法:

方法

说明

String getParameter(String name)

获取指定名称的请求参数值。

String[] getParameterValues(String name)

获取指定名称的请求参数的所有值

void setCharacterEncoding(String charset)

指定每个请求的编码

RequestDispatcher getRequestDispatcher(String path)

返回一个RequestDispatcher对象,该对象的forward( )方法用于转发请求

    //存入值request.setAttribute("name","阿梦");//获取值String name = request.getAttribute("name").toString();

如果是String转int

//id是int类型
int id = Integer.parseInt(request.getParameter("id"));

案例:在注册页面中输入的数据在JSP页面中显示

表单

<form name="dataform" action="doUser.jsp" method="post"><table  class="tb"><tr><td align="center" colspan="2" style="text-align: center" class="text_tabledetail2">用户注册</td></tr><tr><td  class="text_tabledetail2">用户名</td><td><input type="text" name="username"></td></tr><tr><td  class="text_tabledetail2">密码</td><td><input type="password" name="password"></td></tr><tr><td  colspan="2" style="text-align: center"><button type="submit" class="page-btn" name="save">注册</button></td></tr></table>
</form>

jsp页面

<%String username = request.getParameter("username");//读取用户名out.print("用户名"+username);String password = request.getParameter("password");out.print("密码"+password);
%>

3.session对象

如果把变量放到session里,就说明它的作用域是session,它的有效范围是当前会话。

只要用户不关闭浏览器,使用同一个浏览器都可以访问到

用其他浏览器访问不到

session工作方式:

当服务器接收到客户端的请求时,服务器会先检查是否已经为这个客户端创建了session,判断方法是通过唯一标识“sessionid”来实现,如果客户端的请求中带有"sessionid"服务器就会将session读出来,否则会重现创建一个session,并生成对应的sessionid,在首次相应过程中返回到客户端保存

方法

说明

例子:

void setAttribute(String name, Object value);

在请求中保存属性,以key-value的方式保存对象值

session.setAttribute("userName", "张三丰");

Object getAttribute(String name);

在请求中获得属性,通过key获取对象值

String userName=(String)session.getAttribute("userName");

String getId();

获取sessionid

void invalidate();

设置session对象失效

属性是加“”的。

       //存入session,前头是属性,后头是值session.setAttribute("username", username);session.setAttribute("password", password);

 //存入值
session.setAttribute("name","张三");
//输出sessionIDout.print(session.getId());//获取值
String name = session.getAttribute("name").toString();//清空session中name键中的值session.removeAttribute("name");
//设置60秒非session活动时间后清除session中的值
session.setMaxInactiveInterval(60);
//设置所有session失效
session.invalidate();//servlet中获取session:
HttpSession session=request.getSession();//获取session对象

4.Application

 //存入值
application.setAttribute("name","张三");//获取值
String name = application.getAttribute("name").toString();servlet中获取:
ServletContext application = this.getServletContext();// 获取application
计数器:

application里面也能装好多东西,所以我们判断的时候要判断指定的key是否为空

 int count=1;if (application.getAttribute("count")!=null){count = Integer.parseInt(application.getAttribute("count").toString());count++;}application.setAttribute("count",count);out.print("<h1>访问次数: " + count + "</h1>");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/3405.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【java batik_使用BATIK解析SVG生成PNG图片】

矢量图的介绍及应用场景 矢量图是什么意思&#xff1f; 矢量图&#xff0c;也称为向量图&#xff0c;英文名字是Vector graphics。 矢量图是一种基于矢量的图形&#xff0c;由一系列的线段和曲线组成。由数学公式和算法生成的。这意味着矢量图可以在任何分辨率下清晰地显示&…

针对物联网边缘设备基于EIT的手部手势识别的1D CNN效率增强的组合模型压缩方法

论文标题&#xff1a;Combinative Model Compression Approach for Enhancing 1D CNN Efficiency for EIT-based Hand Gesture Recognition on IoT Edge Devices 中文标题&#xff1a;针对物联网边缘设备基于EIT的手部手势识别的1D CNN效率增强的组合模型压缩方法 作者信息&a…

0.STM32F1移植到F0的各种经验总结

1.结构体的声明需放在函数的最前面 源代码&#xff1a; /*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //开启USART1的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructu…

【AIGC】ChatGPT提示词Prompt高效编写技巧:逆向拆解OpenAI官方提示词

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;OpenAI官方提示词的介绍OpenAI官方提示词的结构与组成如何通过分析提示词找到其核心组件 &#x1f4af;OpenAI官方提示词分析案例一&#xff1a;制定教学计划案例二&…

Leetcode 62. 不同路径 动态规划+空间优化

原题链接&#xff1a;Leetcode 62. 不同路径 二维数组&#xff1a; class Solution { public:int uniquePaths(int m, int n) {int res 0;int box[m][n];for (int i 0; i < m; i) {box[i][0] 1;}for (int j 0; j < n; j) {box[0][j] 1;}for (int i 1; i < m;…

app的登录破解 frida jadx

今天收到了一个APP让我研究一下登录 登录已经研究完成 下面则是我的整体思路 为了安全考虑这个app我就不说是那个了 我就说整体的思路 仅供交流学习 严谨非法使用开始进行抓包 手机使用代理连接charles 之后开始点击app登录 进行抓包下面则是我抓到的包 抓包之后j进行改包 也…

【IEEE/CCF-C类】1区顶刊变水刊?发文量暴涨1600+,光速审稿,圆你顶刊梦!

&#x1f525; &#x1f525; &#x1f525; &#x1f525; 本期小编解析的是一本由IEEE旗下多个学会联合出版的计算机领域的TOP期刊《IEEE Internet of Things Journal》&#xff0c;该期刊自2014年创刊&#xff0c;专注于物联网&#xff08;IoT&#xff09;领域的研究…

django高校学生信息管理系统-计算机毕业设计源码02553

django高校学生信息管理系统 摘 要 本研究旨在设计和实现基于Django框架的高校学生信息管理系统&#xff0c;涵盖了系统用户、学生信息管理、教师信息管理、课程分类管理、开课信息管理、选课信息管理、课表信息管理、成绩信息管理、系统管理、网站公告管理和校园资讯等多个功能…

特殊矩阵的压缩存储

一维数组的存储结构 ElemType arr[10]; 各数组元素大小相同&#xff0c;且物理上连续存放。 数组元素a[i]的存放地址 LOC i * sizeof(ElemType)。&#xff08;LOC为起始地址&#xff09; 二维数组的存储结构 ElemType b[2][4];二维数组也具有随机存取的特性&#xff08;需…

中立性DEA交叉效率评价方法

今天推出中立性DEA模型的计算工具 参考文献&#xff1a;《中立性DEA交叉效率评价方法》袁剑波&#xff0c;吴立辉&#xff0c;魏思 中立性DEA交叉效率评价方法 在数据包络分析&#xff08;DEA&#xff09;对决策单元效率评价的方法中&#xff0c;对抗性DEA交叉效率方法把所有…

【Visual Studio】解决 CC++ 控制台程序 printf 函数输出中文和换行符显示异常

问题描述 C&C 控制台程序 printf 函数输出中文和换行符 \n 显示异常。 #include <stdio.h>int main() {int choice;printf("菜单:\n");printf("1. 选项一\n");printf("2. 选项二\n");printf("3. 选项三\n");printf("…

【dvwa靶场:XSS系列】XSS (Stored)低-中-高级别,通关啦

更改name的文本数量限制大小&#xff0c; 其他我们只在name中进行操作 【除了低级可以在message中进行操作】 一、低级low <script>alert("假客套")</script> 二、中级middle 过滤了小写&#xff0c;咱们可以大写 <Script>alert("假客套…

【Linux】深入理解进程控制:从创建到终止和进程等待

文章目录 进程创建fork函数如何用fork函数创建子进程写实拷贝 进程终止错误信息exit_exit 进程等待waitwaitpid 总结 进程创建 fork函数 fork 函数是 Unix/Linux 系统中用于创建新进程的系统调用。调用 fork 后&#xff0c;当前进程&#xff08;父进程&#xff09;会被复制&a…

【java】对象的内存存储

目录 对象在内存中的分配设计到的内存结构(理论)类中对象的内存解析创建类的一个对象&#xff0c;属性赋值创建类的多个对象&#xff0c;属性赋值 对象在内存中的分配设计到的内存结构(理论) 栈&#xff1a;方法内定义的变量&#xff0c;存储在栈中 堆&#xff1a;new出来的结…

【wrl2stl】WRL文件转STL文件-Python

之前有一篇博客写了Avizo自动化批量导出wrl文件&#xff1a;【Avizo&Python】离散颗粒的分割、网格化与单颗粒批量自动保存wrl文件_avizo python-CSDN博客 还有一篇写了wrl转为xyz格式文件&#xff1a; Wrl文件转XYZ文件-Python_python 打开wrl三维模型-CSDN博客 在这篇…

【Linux系统编程】第三十九弹---探索信号处理的奥秘:阻塞信号与sigset_t的深入剖析及实战

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、信号处理 2、阻塞信号 2.1、信号其他相关常见概念 2.2、在内核中的表示 2.3、sigset_t 2.4、信号集操作函数 3、完整…

零基础Apifox测试FastAPI接口入门

文章目录 一、FastAPI部分二、Apifox部分1、安装Apifox2、创建接口3、更改测试环境4、发送请求 一、FastAPI部分 python使用fastapi编写接口内容&#xff08;文件名&#xff1a;text.py&#xff09;&#xff1a; from fastapi import FastAPI import uvicornapp FastAPI()ap…

Linux终端退出程序后,TCP地址仍被占用

报错如下&#xff1a; Error on binding: Address already in use 这是一个正在运行的服务器&#xff0c;运行在linux的终端。上一次我使用CtrlZ退出这个程序&#xff0c;再次./my_server想运行这个程序时&#xff0c;出现这个报错。这是由两点原因&#xff1a; 1、守护进程或…

嵌入式通信协议:IIC简明学习笔记

IIC学习笔记 IIC特点 1.适合 小数据场合使用&#xff0c;传输距离短。 2.只能有一个主机。 3.标准IIC速度为100kHZ&#xff0c;高速IIC一般可达400kHZ以上。 4.SCL和SDA都需要接上拉电阻&#xff08;大小由速度和容性负载决定&#xff0c;一般在3.3k-10k之间&#xff09;。 5…

基于anaconda的python3.6安装opencv4.1.15

opencv-python一些新版本由于部分函数涉及专利问题&#xff0c;如sift和surf&#xff0c;有些功能不能很好地被使用&#xff0c;所以最好使用opencv-python 3.4.1.15版本的。 下载地址分别为&#xff1a; 1、https://pypi.tuna.tsinghua.edu.cn/simple/opencv-python/ 查找…