jsp数据交互(一).2
-
01.什么是JSP内置对象(jsp核心)?
Java 内置对象
Java 作用域
解析:jsp内置对象是web容器创建的一组对象。我们都知道tomcat这款软件可以看成是一种web容器,所以我们可以知道所谓的内置对象都是由tomcat创建的。使用内置对象无需使用new关键字,直接使用即可。也就意味着只要你敢启动tomcat,在内存中已经驻留了N多内置对象。
01.什么是内置对象?
解析:就是web容器创建一组对象,这组对象在tomcat服务器启动的时候加载到内存,可以被用户直接使用。
02.Jsp中九大内置对象
03.使用request对象的登录案例
login.jsp页面
do.jsp页面
welcome.jsp页面
北京欢迎您!<%=request.getAttribute("name")%>
04.JSP内置对象session
1.为什么使用session
当一个请求发送到Web服务器时,无论其是否是第一次来访,服务器都会把它当做第一次来对待。在实际开发中,往往希望服务器能够识别已访问过的用户。session对象可以做到,因此我们要使用session。
2.什么是会话
就Web开发来说,一个会话就是用户通过浏览器与服务器之间进行的一次通话,它可以包含浏览器与服务器之间的多次请求、响应过程。简单地说就是在一段时间内,一个用户与Web服务器的一连串相关的交互过程。
在一个会话中,用户可能多次请求访问一个网页,也有可能请求访问同一个服务器的其他资源。当用户向服务器发出第一次请求时,服务器会为该用户创建唯一的会话,会话将一直延续到用户访问结束。注意:浏览器关闭可以导致会话结束!
3.向session作用域中写入数据
session.setAttribute("username","张三");
设置session的失效时间
session.setMaxInactiveInterval(60*30);
获取sessionId:
<%=session.getId()%>
4.使用session对象实现权限控制
解析:所谓的权限控制,就是防止用户直接在地址栏中输入主界面地址,跳过登陆而操作业务数据。
5.Session对象的失效
session.removeAttribute()适用于清空指定的属性
session.invalidate()是清除当前session的所有相关信息05.重定向
如果想从一个页面重定向到另一个目标页面,这个时候使用的是response.sendRedirect(“目标地址”);
06.转发
如果想从一个页面重定向到另一个目标页面,这个时候使用的是转发操作,
request.getRequestDispatcher("main.jsp").forward(request,response);
重定向和转发:
01.从客户端发送的请求数量来看,重定向是向服务器发送了两次请求。而转发是服务器内部进的操作,只发送了一次请求,request对象中的数据可以保留 。
02.从URL显示的角度来说:重定向这两次请求都是直接受浏览器干预的。也就是说重定向后url地址栏里看到的地址发生变化了。而转发是由服务器内部从一个资源页面定位到另一个资源页面,并没有经过浏览器干预,所以url地址栏没有发生改变。
结论:要想在request中保存数据,那么就使用转发,否则使用重定向。
重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL,而当使用转发时,该URL会保持不变。重定向的速度比转发慢,因为浏览器还得发出一个新的请求。同时,由于重定向方式产生了一个新的请求,所以经过一次重定向后,request内的对象将无法使用。
怎么选择是重定向还是转发呢?通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。但是由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。如果你不想看到这样的情况,则选择重定向。转发和重定向的区别
不要仅仅为了把变量传到下一个页面而使用session作用域,那会无故增大变量的作用域,转发也许可以帮助你解决这个问题。
重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。
转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。重定向过程:
客户浏览器发送http请求----》
web服务器接受后发送302响应要求客户浏览器发送一个新的http请求----》
客户端浏览器接受此响应后再发送一个新的http请求到服务器----》
服务器根据此请求寻找资源并发送给客户,
它可以重定向到任意URL,
不能共享request范围内的数据。
转发过程:
客户浏览器发送http请求----》
web服务器接受此请求后调用内部的一个方法在容器内部完成请求处理和转发动作----》
将目标资源发送给客户,它只能在同一个web应用中使用,可以共享request范围内的数据。
07.Include指令
解析:网站中可能多处需要对用户的登陆身份进行校验,例如添加数据和修改数据都需要用户登陆后进行操作。那么可以将判定用户是否已经通过验证的代码提取到一个单独的页面中,在其他的页面中可以引入该页面代码进行判定。
在jsp中有两种包含,静态包含<%@include file="xxx.jsp"%>和动态包含<jsp:include page="xxx.jsp">,下面说一下它们之间的区别
1、<%@include file="xxx.jsp"%>为jsp中的编译指令,其文件的包含是发生在jsp向servlet转换的时期,而<jsp:include page="xxx.jsp">是jsp中的动作指令,其文件的包含是发生在编译时期,也就是将java文件编译为class文件的时期2、使用静态包含只会产生一个class文件,而使用动态包含会产生多个class文件
3、使用静态包含,包含页面和被包含页面的request对象为同一对象,因为静态包含只是将被包含的页面的内容复制到包含的页面中去;而动态包含包含页面和被包含页面不是同一个页面
08.提交表单数据乱码解决方案
通过form表单给服务器提交数据的时候,如果提交的是中文数据,那么可能会出现乱码,如果表单的请求方式是post请求,那么可以使用如下方案解决乱码:
在调用getParameter()之前,设置请求对象request的编码方式。
<% request.setCharacterEncoding("utf-8");%>
002.如果是通过get方式提交的form,两种处理乱码方案:
01.通过new String(str.getBytes(“iso-8859-1”),”utf-8”);
这种方式的缺点,每获取到一个用户提交的数据就要进行一道转换
02.通过conf下的server.xml文档的
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"URIEcoding=”utf-8” />
不推荐使用第二种方式,但是要了解,因为真正的开发中,我们接触不到服务器。
09.常见的错误码(响应)
404:服务器上找不到请求资源页面
500:服务器内部错误
200 OK 服务器成功处理了请求(这个是我们见到最多的)
301/302 Moved Permanently(重定向)请求的URL已移走。Response中应该包含一个Location URL, 说明资源现在所处的位置
304 Not Modified(未修改)客户的缓存资源是最新的, 要客户端使用缓存
404 Not Found 未找到资源
501 Internal Server Error服务器遇到一个错误,使其无法对请求提供服务
很有用的
已定义范围
分类
1XX (临时响应)
100-101
信息提示
2XX 200(服务器成功响应)
200-206
成功
3XX (302:临时重定向) 303:永久重定向
300-305
重定向
4XX 403:Forbidden:(禁止) 404:(页面不存在)
400-415
客户端错误
5XX 代码错误或者异常
500-505
服务器错误
10.Application原理与应用
01.application对象的作用域范围是整个应用服务,而它在应用中所承担的责任就类似于一个全局变量。只要服务启动,则application对象就会存在。
02.在一个应用中只有一个application,每一个用户都会共享这一个application对象。
03.通过统计网站访问次数来讲解application的用法
代码如下:
- <%
- Integer count=(Integer)application.getAttribute("count");
- if(count!=null){
- count=count+1;
- }else{
- count=1;
- }
- application.setAbbribute("count",count);
- %>
- 您是第<%=count%>位访问者
11.对象作用域
实例代码:- <span style="font-size:14px;"><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>My JSP '1.jsp' starting page</title>
- </head>
- <body>
- <%
- pageContext.setAttribute("page", "我最小");
- request.setAttribute("request", "我是3");
- session.setAttribute("session", "我是2");
- application.setAttribute("application", "我最大");
- request.getRequestDispatcher("/myarea/2.jsp");
- %>
- </body>
- </html></span>
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <body>
- <%=pageContext.getAttribute("page") %>
- <%=request.getAttribute("request") %>
- <%=session.getAttribute("session") %>
- <%=application.getAttribute("application") %>
- <%
- response.sendRedirect(path+"/myarea/3.jsp");
- %>
- </body>
- </html>
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>My JSP '3.jsp' starting page</title>
- </head>
- <body>
- <%=pageContext.getAttribute("page") %>
- <%=request.getAttribute("request") %>
- <%=session.getAttribute("session") %>
- <%=application.getAttribute("application") %>
- </body>
- </html>
12.Cookie
解析:cookie是Web服务器保存在客户端的一系列文本信息,根据域名和端口号区分是否保存成一个文件,文件大小为4k。注意:http://localhost:8080/news和http://localhost:8080/news/util会形成两个cookie文件。
作用:对特定对象的追踪、统计网页浏览次数、简化登录
获取指定key值cookie的核心代码
- <span style="font-size:18px;"><%
- Cookie[] cookies = request.getCookies();
- if(cookies!=null){
- for(int i=0;i<cookies.length;i++){
- if(cookies[i].getName().equals("uname")){
- response.sendRedirect(path+"/welcome.jsp");
- }
- }
- }
- %></span>
13.cookie和session的对比
1.session是在服务器端保存用户信息,cookie是在客户端保存用户信息2.session中保存的值是Object类型,cookie保存的值是String类型3.session随会话的结束而将其存储的数据销毁,cookie可以长期保存在客户端4.cookie通常用户保存不重要的用户的信息,重要的信息使用session保存14.JavaBean1.什么是JavaBean01.JavaBean组件本质上就是一个Java类,只是这个类需要遵循一些编码的约定02.从功能上分类:封装数据、封装业务。03.一般满足的需求:JavaBean是一个公有类,并提供无参的公有的构造方法。属性私有。具有公有的访问属性的getter和setter方法。04.JSP和JavaBean- //引入JavaBean
- <%@ page="org.jbit.news.bean.*" %>
- //使用JavaBean
- <%
- User user=new User();
- user.setUname("luky");
- user.getPwd();
- %>
jsp数据交互(一).2的更多相关文章
- JSP数据交互
JSP数据交互 一.jsp中java小脚本 1.<% java代码段%> 2.<% =java表达式%>不能有分号 3.<%!成员变量和函数声明%>二.注释 1 ...
- #学习笔记#JSP数据交互
#学习笔记#JSP数据交互 数据库的使用方式: 当用户在第一个页面的查询框输入查询语句点提交的时候我们是用什么样的方式完成这个查询的? 答:我们通过在第一个页面提交表单的形式,真正的数据库查询时在 ...
- JSP/Servlet开发——第二章 JSP数据交互(一)
1. JSP内置对象:JSP内置对象是 Web 容器创建的一组对象: ●JSP常用的内置对象:out.request.application.session.response等: ●内置对象不需要 ...
- 第二章 jsp数据交互(一)
JSP如何处理客户端的请求? 解析:通过jsp内置对象 表单数据被提交到了jsp页面! 什么是JSP内置对象(jsp核心)? Java 内置对象 Java 作用域 解析:jsp内置对象是web容器创 ...
- JSP———数据交互【1】
JSP的内置对象 不用声明就可以在JSP页面中使用 request对象 内置对象 request 封装了用户提交的信息,主要用于处理客户端请求 <FORM action="tom.js ...
- JSP数据交互(二)和Servlet基础
01.Application原理与应用 01.application对象的作用域范围是整个应用服务,而它在应用中所承担的责任就类似于一个全局变量.只要服务启动,则application对象就会存在. ...
- jsp数据交互(一),九大内置对象
九大内置对象 九大内置对象 内置对象 类型 说明 作用域 request javax.servlet.ServletRequest 请求对象——在 一次请求/一个Request请求周期 中传递数据,请 ...
- JSP数据交互——九大内置对象及其方法详解(一)
①既然说到JSP内置对象,那么什么是JSP内置对象呢? 解析:JSP内置对象,就是在编写JSP页面时,不需要做任何声明就可以直接使用的对象. 如下代码片段: <% int[] value ...
- JSP数据交互(一)
1.JSP内置对象 请求对象:request 输出对象:out 响应对象:response 应用程序对象:application 会话对象:session 页面上下文对象:pageContext 页面 ...
随机推荐
- 解决Nextcloud 无法删除目录
1)进入维护模式 sudo -u www php /www/wwwroot/192.168.40.159/occ maintenance:mode --on 2)使用mysql命令行工具,在nextc ...
- vue-cli3.x npm create projectName 报错: Unexpected end of JSON input while parsing near......
npm 版本与node版本还有webpack版本之间的问题 清理缓存,“ npm cache clean --force " 一切OK
- Java多线程同步工具类之CyclicBarrier
一.CyclicBarrier使用 CyclicBarrier从字面上可以直接理解为线程运行的屏障,它可以让一组线程执行到一个共同的屏障点时被阻塞,直到最后一个线程执行到指定位置,你设置的执行线程就会 ...
- java多线程死锁
进程(线程)同步的基本概念 进程之间的制约关系 1. 直接制约关系(进程同步) 这个关系主要源于进程合作,例如,有一个输入进程A通过单缓冲向进程B提供数据,当该缓冲空时,进程B因为不能获得所需数据而被 ...
- 模拟实现 Tomcat 的核心模块:NIO,HTTP,容器和集群
如果你想看 Tomcat 源码但又无从入手,不妨从这个项目开始,代码量不多,但包含了 Tomcat 的核心处理流程,并且源码中有相当丰富的注释.相信通过此项目你能了解: NIO 基本编程.HTTP 协 ...
- 【朝花夕拾】Android自定义View篇之(五)Android事件分发机制(上)Touch三个重要方法的处理逻辑
前言 转载请注明,转自[https://www.cnblogs.com/andy-songwei/p/10998855.html]谢谢! 在自定义View中,经常需要处理Android事件分发的问题, ...
- There is no getter for property named 'username' in 'class Model1.User'-----报错解决
There is no getter for property named 'username' in 'class Model1.User' -----Model Model1.User'中没有名为 ...
- springboot集成mockito与powermock
mockito大家都比较熟悉了,存在或者不存在,都不要紧,mockito让你有一种只要一出手,就知道有没有的感觉.但是它也不是万能的,比如静态方法.私有方法,它就无能为力了.这是为什么呢?当然不是 ...
- Docker环境下的前后端分离项目部署与运维(十二)使用Portainer管理Docker
安装 docker hub地址:https://hub.docker.com/r/portainer/portainer/ # 每台服务器都要安装 docker pull portainer/port ...
- Python 爬虫从入门到进阶之路(十八)
在之前的文章我们通过 scrapy 框架 及 scrapy.Spider 类做了一个<糗事百科>的糗百爬虫,本章我们再来看一下相较于 scrapy.Spider 类更为强大的 CrawlS ...