Jsp (Java Server Pages)相关知识九大内置对象和四大作用域
一.初识JSP
Jsp页面的组成:静态内容、指令、表达式、小脚本、声明、标准动作、注释等元素构成
Url:统一资源定位符
Url组成:协议、主机名(包括端口号)、路径
1.注释的方式:
1.HTML注释:在浏览器页面可以看见,不安全
<!----html注释----->
2.Jsp注释:在浏览器页面看不见
<%--jsp注释--%>
3.在jsp脚本中注释:在浏览器页面看不见
<%//单行注释%>
<%/*多行注释*/%>
二.脚本元素:
Jsp声明-->java文件的成员方法<%!%>
Jsp小脚本-->java文件中的jspService方法的一段代码<%%>
Jsp表达式-->java文件中的jspService方法中的一段代码,<%=变量或者表达式%>;
三.指令
1.Page指令
Page指令是针对当前页面进行设置的知名,通常位于jsp页面的顶端,一个页面可以包含多个page指令,page指令只对当前jsp页面有效。
1.Page指令中如果使用import要导入多个包时,使用“,”分隔
2.Page指令中contentType=“text/html;charset=utf-8”
3.isErrorPage 取值为true时,表示这是一个处理异常的页面
4.Jsp脚本<%%>中间的java代码必须符合我们java代码的书写格式
用户首次访问页面时 Web容器处理jsp文件请求需要经过的3个阶段
Jsp执行过程
(1)翻译阶段:用户第一次通过浏览器来访问jsp的时候。Tomcat负责把jsp转化成为java文件
(2)编译阶段:服务器把java文件编译成为class文件
(3)执行阶段:首先对生成的java类进行实例化
调用实例化后对象的_jspService()方法输出html给浏览器
(4)浏览器渲染html数据
如果jsp文件没有修改,用户再次请求页面,不用再次翻译和编译,如果文件有改动,则会重新翻译和编译
2. include指令
Include指令表示,,在JSP编译时插入一个包含文本或代码的文件包含的文件可以是jsp页面.html网页.文本文件等,include指令只有一个file属性,表示被包含文件的路径,一个jsp页面可以有多个include指令
01静态包含:
静态包含
静态包含就是讲内容进行了直接替换,就好比程序中定义的变量一样.
语法:
<%@ include file=”应用文件路径 %”>
02动态包含:
(1)不传参数:
<jsp:include page=”{要包含的文件路径|<%=表达式%>}” flush=”true|flase”/>
(2)传递参数:
<jsp:include page=”{要包含的文件路径|<%=表达式%>}” flush=”true|flase”>
<jsp:param name=”参数名称” value=”参数内容”(常量)/>(可以向被包含页面中传递多个参数)
<jsp:param name=”参数名称” value=”<%=参数内容%>”(变量)/>
</jsp:include>
静态包含,遇到同名变量时,先包含后处理,会出现异常
动态包含,遇到同名变量时,先处理后包含,不会出现异常
二.Jsp内置对象
内置对象:内置对象就是由web容器加载的一组ServletAPI的实例,这些实例由JSP规范进行了默认的初始化操作,可以直接在JSP中使用(注意:jsp的内置对象名称均是jsp的保留字,不得当做自定义变量名使用)
不经常使用的内置对象
pageContext 内置对象的集大成者,可以通过pageContext获取到其他的内置对象
Config 指定jsp页面初始配置的对象 Servlet会使用
Page 当前jsp实例化的对象,使用的方法非常有限,一般很少使用
Exception 用来处理页面异常,以后的异常基本都是在java代码中处理,所以很少使用
经常使用的内置对象
Session
Application
Out
Request
response
是由web容器创建的一组对象
1.Jsp内置对象Out
是jspWriter类的实例,作用是用于向浏览器输出数据
01.Out对象经常使用的方法:
(1).void Print(object c)向客户端打印数据(将各种类型的数据转换成字符串);
(2)、 void write(charset) 向客户端打印字符相关的数据(字符、字符数组、字符串);
(3)、void println(Object c) 向客户端打印数据(将各种类型的数据转换成字符串)并换行。
2.request对象主要用于处理客户端的请求
客户请求访问服务器,会携带一些数据,比如客户端的信息,用户填写的信息,提交给服务器,服务器拿到数据后,会分析整理,整理成request对象,然后提交给jsp页面。
01.Request对象的常用方法:
方法名称 |
说明 |
String getParemeter(String name) |
根据表单组件名称获取提交数据 参数中的name必须和input中name属性相对应; |
String[] getParemeterValues(String name) |
获取表单组件对应多个值时的请求数据。 |
Void setCharacterEncoding(String charset) |
指定每个请求的编码,不包括URL编码,可解决使用post方式提交的乱码问题 |
RequestDispatcher gerRequestDispatcher(String path) |
返回一个RequestDispatcher对象,该对象的forward()方法用于转发请求 |
02.页面乱码分析:
(1)jsp页面本身的编码;
即page指令里面
注意:一旦指定了一种编码格式 另外一种编码格式不指定的话 默认都采用已经指定的编码格式。
pageEncoding:页面本身的编码;
contentType:指定的是浏览器渲染页面的时候采用的编码格式;
(2)浏览器渲染页面采用的编码;和页面本身的编码格式一致
(3)服务器保存数据采用的编码(request)
服务器默认编码是使用ISO-8859-1来保存数据
解决方法:
对于post方式:
设置读取请求信息的字符编码为UTF-8
在获取请求信息前设置request.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8")设置的是request内部保存数据的格式,不包括url
对于get方式:
Get方式提交的数据在URL里面
1.改变request获取出来的数据的编码
这种方式开发中不推荐使用,使用这种方式,每个数据都必须要进行转码,在实际编码中使用这种方式处理,比较麻烦
2.改变url编码(推荐使用)
3.response 用于响应客户请求并向客户端输出信息
01.常用方法
方法名称 |
说明 |
Void addCookie(Cookie cookie) |
向客户端添加Cookie |
Void setContentType(String type) |
设置HTTP响应的contentType类型 |
Void setCharacterEncoding(String charset) |
设置响应所采用的字符编码类型 |
Void sendRedirect(String location) |
将请求重新定位到一个新的URL上(重定向) |
02.页面重定向
Void sendRedirect(String location)
客户端将重新发送请求到指定的URL,客户端浏览器显示的地址是重定向的地址,客户端可以查看到发起了两次请求
<%
String name=request.getParameter("userName");
String pass=request.getParameter("pass");
if("admin".equals(name)&&"admin".equals(pass)){
response.sendRedirect("welcome.jsp");
}else{
out.print("用户名或密码不正确");
}
%>
状态码
302代表告诉浏览器该重定向一个url了
404代表找不到页面
200,代表0K
重定向页面使用request.getParameter获取不到数据的原因:
客户端带着数据来请求页面时,请求页面告诉浏览器该去请求另一个页面,这时候第一 次请求中的数据就失效了,第二次请求时便只携带了客户端的信息,不带客户信息
解决方法:
1.当第一次请求失效的时候,把数据进行保存,使用数据作为参数发起第二次请求
Get请求的参数是放在url里面的,所以可以使用这种方式来解决,这和表单的提交方式没有关系,"welcome.jsp?userName="+name
第一个请求的页面
<%
String name=request.getParameter("userName");
String pass=request.getParameter("pass");
if("admin".equals(name)&&"admin".equals(pass)){
response.sendRedirect("welcome.jsp?userName="+name);
}else{
out.print("用户名或密码不正确");
}
%>
第二次请求的页面再使用request.getParameter(“参数”)来获取
<% String name=request.getParameter("userName"); %>
<h1>欢迎<%=name %>访问!</h1>
03.转发
2.能不能只发一次请求,来完成页面的跳转
使用转发,客户端浏览器显示的是用户直接请求的页面的url,并且客户端浏览器显示只发送一次请求,整个过程是都是在服务器内部完成的
使用转发来取代重定向实现页面跳转
转发的实现使用Request.getRequestDispatcher(ul);方法来实现
客户端用户直接请求的页面
<%
String name=request.getParameter("userName");
String pass=request.getParameter("pass");
if("admin".equals(name)&&"admin".equals(pass)){
RequestDispatcher rd=request.getRequestDispatcher("welcome.jsp");
rd.forward(request, response);
}else{
out.print("用户名或密码不正确");
}
%>
目标页面:
<% String name=request.getParameter("userName"); %>
<h1>欢迎<%=name %>访问!</h1>
转发和重定向的区别:
相同点:
转发和重定向都是能够实现页面的跳转
不同点:
转发过程:web服务器内部将一个request请求的处理权交给另一个资源,属于同一个访问请求和响应过程,所以request对象的信息不会丢失
转发是在服务器端发挥作用,通过RequestDispatcher对象的forward()方法将提交的信息在多个页面间进行传递;
转发是在服务器内部控制权的转移,客户端浏览器的地址栏不回显示出转向后的地址。
重定向过程:web服务器向浏览器返回一个响应,浏览器接受此响应后再发送一个新的http请求到服务器,这属于两次不同的请求,则上一次请求的request数据将丢失。
重定向是在客户端发挥作用,通过新的请求实现页面转向,其通过浏览器重新请求地址,在地址栏中可以显示转向后的地址。
在URL中参数的拼接 get传参方式
<a href="result.jsp?color=red">red</a>
4.Session会话机制 用于区分客户端
每个session会话都会有一个sessionID ,同一个session对象sessionID相同
Session和浏览器窗口
通过超链接打开的新窗口,新窗口的session与其父窗口的session相同
Sessionid是通过键值对的形式保存在本地的Cookie中
01、Session对象的常用方法:
方法名称 |
说名 |
String getId() |
获取sessionid |
Void setMaxInactiveInterval(int interval) |
设定session的非活动时间(即最大失效时间) |
Int getMaxInactiveInterval() |
获取session的非活动时间(以秒为单位) |
Void invalidate() |
设置session对象失效(用户退出时使用) |
Void setAttribute(String key,Object value) |
以key/value的形式保存对象值 |
Object getAttribute(String key) |
通过key获取对象值 |
Void removeAttribute(String key) |
从session中删除指定名称(key)所对应的对象 |
02session对象的实例:
控制页面代码:
<%
request.setCharacterEncoding("UTF-8");
String userName=request.getParameter("userName");
String passwrod=request.getParameter("passwrod");
boolean flag=false;
//这个if是判断账号和密码是否正确
if("admin".equals(userName)&&"admin".equals(passwrod)){
flag=true;
//用户名和密码正确时,将用户信息保存到session
session.setAttribute("test", userName);
}else{
out.print("你输入的账号或密码不正确");
}
//这是判断用户是否是直接在浏览器输入control.jsp进入的
if(flag){
request.getRequestDispatcher("welcome.jsp").forward(request,response);
}else{
response.sendRedirect("login.jsp");
}
%>
主页面的代码:
<%
//从session中获取用户信息
Object obj=session.getAttribute("test");
if(obj==null){
//使用转发,目的是让用户浏览器窗口的url也变成login.jsp
response.sendRedirect("login.jsp");
return;
}
%>
欢迎<%=obj %>登陆
2session失效
会话超时:会话超时是指两次请求的时间间隔超过了服务器允许的最大时间间隔.
01.手动设置失效: invalidate()
02.超时失效: 通过setMaxInactiveInterval()方法,单位是秒
03.修改配置文件: 通过项目下的web.xml或Tomcat目录下的/conf/web.xml
文件,单位是分钟
<session-config>
<session-timeout>10</session-timeout>
</session-config>
5 application内置对象
作用:用于同一个应用中的所有用户之间的数据共享
01 常用方法:
方法名称 |
说明 |
Void setAttribute(String key,Object value) |
以key/value的形式将对象储存到application中 |
Object getAttribute(String key) |
通过key获取application中存储的对象 |
String getRealPath(String path) |
返回相对路径的真实路径 |
三.四大作用域
四大作用域:page作用域,request作用域,session作用域,application作用域.
四.Cookie
Cookie是web服务器保存在客户端的一系列文本信息
Cookie的作用 对特定对象的追踪,实现各种个性化服务.实现登录
创建cookie
Cookie newCookie= new Cookie(String key,String value);
写入cookie
Response.addCookie(newCookie);
读取cookie
Cookie cookies[]=request.getCookies();
Jsp (Java Server Pages)相关知识九大内置对象和四大作用域的更多相关文章
- 转载:jsp九大内置对象和四大作用域
摘要: JSP的九大内置对象: page,application,session,request,response,out,exception,config,pageContext. JSP的四个作用 ...
- JavaWeb中jsp九大内置对象 和四大作用域
九大内置对象为 page request response session exception config application out pageContext no 内置对象 类型 1 pag ...
- JSP九大内置对象和四大作用域和Servlet的三大作用域对象
一.JSP九大内置对象:内置对象(又叫隐含对象,有9个内置对象):不需要预先声明就可以在脚本代码和表达式中随意使用 内置对象特点: 由JSP规范提供,不用编写者实例化. 通过Web容器实现和管理 所有 ...
- servlet的三大作用域对象和jsp的九大内置对象及其四大作用域对象
servlet的三大作用域对象: request(HttpServletRequest) session(HttpSession): application(ServletContext):tomca ...
- jsp九大内置对象和四大作用域
看到网上一些Jsp内置对象介绍的都不是很全,今天我把各位大神的整理了一下. JSP九大对象:内置对象(又叫隐含对象,有9个内置对象):不需要预先声明就可以在脚本代码和表达式中随意使用. 一.reque ...
- jsp的九大内置对象和四大作用域(转)
定义:可以不加声明就在JSP页面脚本(Java程序片和Java表达式)中使用的成员变量 JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应): 1.request对象(作用域) 客户端的 ...
- jsp的九大内置对象和四大作用域
定义:可以不加声明就在JSP页面脚本(Java程序片和Java表达式)中使用的成员变量? JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应):? 1.request对象(作用域)? 客户 ...
- Jsp语法九大内置对象和四大作用域
一.JSP 原理:JSP其实就是一个servlet. Servlet负责业务逻辑处理,JSP只负责显示.开发中,JSP中不能有一行JAVA代码 二.JSP语法 1. JSP模板元素:JSP中HTML标 ...
- AJPFX详解jsp的九大内置对象和四大作用域
定义:可以不加声明就在JSP页面脚本(Java程序片和Java表达式)中使用的成员变量 JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应): 1.request对象(作用域) 客户端的请 ...
随机推荐
- Alpha、伪Beta 发布个人感想与体会
1.Alpha版本 在Alpha版本发布时,我在Fantacy组,那时的体会我已在前面写过,现在回想起来,我觉得自己的决定似乎做的并不是很糟糕,因为来到新的团队里,我学到了很多东西,认识了很多技术很好 ...
- python2.7.x的字符串编码到底什么鬼?(中文和英文的处理)
一直以来我其实一直对python的编码弄得非常晕,能正常编码,也能处理一些情况.但是始终不明白有些问题究竟为何出,原因是什么,为什么要这样用. 今天晚上正好好好研究了一番解答了自己心中的困惑. Q:p ...
- js 錯誤
try{ //需要被檢測是否拋出錯誤 } catch(err) { //錯誤處理代碼 } try.catch成對出現 throw:拋出錯誤 當錯誤發生時,javascript引擎停止運行,并生成一個錯 ...
- 一对一 只需将另一个表的id设置为主键和外键即可
一对一 只需将另一个表的id设置为主键和外键即可
- BZOJ5361[Lydsy1805月赛]对称数——主席树+随机化
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=5361 好神的一道题啊! 容易看出来是要用维护权值的数据结构,因此树链剖分首先pass掉. ...
- 任意目录下启动tomcat
DOS中启动tomcat 1.将tomcat的bin目录添加到Path变量中 2.添加catalina_home变量 3.命令行输入catalina run ojbk
- (伪)再扩展中国剩余定理(洛谷P4774 [NOI2018]屠龙勇士)(中国剩余定理,扩展欧几里德,multiset)
前言 我们熟知的中国剩余定理,在使用条件上其实是很苛刻的,要求模线性方程组\(x\equiv c(\mod m)\)的模数两两互质. 于是就有了扩展中国剩余定理,其实现方法大概是通过扩展欧几里德把两个 ...
- HNOI2018滚粗记
day 0 最近发现机房的人都有些焦虑(除了一些神犇)自己也被影响地紧张起来 唉,不知道是不是一种好的心态,紧张是必然的... 随便打了点板子(\(FFT,SA,LCT\)) 很棒一个都没考 day ...
- 面试官问我,使用Dubbo有没有遇到一些坑?我笑了
17年的时候,因为一时冲动没把持住(当然最近也有粉丝叫我再冲动一把再更新一波),结合面试题写了一个系列的Dubbo源码解析.目前公众号大部分粉丝都是之前的粉丝,这里不过多介绍. 根据我的面试经验而言, ...
- Stack Overflow:研究发现访问PHP和 Android的流量更可能来自低收入国家
Stack Overflow 的数据科学家 David Robinson 发现,软件行业的分工让不同发达地区的程序员依赖于不同的编程语言.软件已经是一个全球性的行业,也有高端低端之分,最高端的是数据 ...