JSP总结
静态网页
在网站设计中,纯粹HTML(标准通用标记语言下的一个应用)格式的网页通常被称为“静态网页”,静态网页是标准的HTML文件,它的文件扩展名是.htm、.html 。静态网页是网站建设的基础,早期的网站一般都是由静态网页制作的。静态网页是相对于动态网页而言,是指没有后台数据库、不含程序和不可交互的网页。
动态网页
网页文件里包含了程序代码,通过后台数据库与WEB服务器的信息交互,由后台数据库提供实时数据更新和数据查询服务。动态网站体现在网页一般是以asp,jsp,php,aspx等结束。
两者区别
网页制作使用的制作语言:静态网页使用语言:超文本标记语言(标准通用标记语言的一个应用); 动态网页使用语言:超文本标记语言+ASP或超文本标记语言+PHP或超文本标记语言+JSP等。
程序是否在服务器端运行,是重要标志。在服务器端运行的程序、网页、组件,属于动态网页,它们会随不同客户、不同时间,返回不同的网页, ASP、PHP、JSP、ASPnet、CGI等。运行于客户端的程序、网页、插件、组件,属于静态网页,例如 html 页、Flash、JavaScript、VBScript等等,它们是永远不变的。
常用的动态网页技术
ASP(Active Server Page)
ASP技术是基于.NET平台的一种动态网页技术。它有非常强大的后台处理能力,但却有一些安全性、稳定性、跨平台性的问题。ASP只支持Windows平台,对Linux、Unix不支持。
PHP(Hypertext Preprocessor)
PHP原始为Personal Home Page的缩写,已经正式更名为(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP是HTML内嵌式的语言,这一点类似于ASP,并且PHP可以跨平台。但PHP的数据库接口不规范。但是对每种数据库接口的开发都不同极大地加重了开发者的负担,并且缺少企业级应用的支持。
JSP/Servlet(Java Server Page)
JSP技术在基于java的平台上广泛地使用,是进行Java web开发的一种核心组件。JSP页面由HTML代码和嵌入在其中的Java脚本组成。JSP可以一次编写,到处运行。这一点JSP比PHP技术更有优势,在不同的系统平台上运行,代码不用做任何修改。
什么是JSP
JSP (Java Server Pages) 是java服务页面,可以在HTML中嵌入Java脚本代码。
JSP页面元素:
静态内容:HTML静态文本
指 令:以"<%@" 开始,以"%>" 结束
小脚本:<%Java代码%>
表达式:<%=Java表达式%>
声明:<%! 方法%>
注释 :<!-- 客户端可以查看到-->,<%-- 客户端不能查看到--%>
JSP(一) 三大指令
① page 指令
通过设置内部的多个属性定义整个页面的属性
语法:
<%@ page 属性1="属性值" 属性2="属性值1,属性值2"… 属性n="属性值n"%>
② include 指令(静态包含)
将一些共性的内容写入一个单独的文件中,然后通过include指令引用该文件
include(静态包含):这种会将两个页面编译成一个class,里面的资源可以共享。(先包含再编译)
③ taglib 指令
在JSP页面中导入JSTL标签库,替换JSP中的Java代码片段
语法:
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="别名"%>
JavaBean
JavaBean的优势
解决代码重复编写,减少代码冗余
功能区分明确
提高了代码的维护性
JavaBean 分为: 数据Bean 和 业务Bean
数据Bean : 私有的属性,默认的空构造,set、get方法 就是Java中的属性类
业务Bean : 使用数据Bean。
JSP(二)七大动作
jsp动作(action)是指在运行期间的命令,常见的有:
jsp:useBean
jsp:setProperty
jsp:getProperty
jsp:include
jsp:forward
jsp:param
jsp:plugin
① include
include 动态包含(分别编译):用jsp:include动作实现,它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。flush属性: 用true ,表示页面可刷新。默认为false;在使用include命令时除非该命令被执行到,否则它是不会被Tomcat等JSP Engine编译。
语法: <jsp: include page="页面路径" flush="true" />
jsp:include(动态包含):这种会编译成两个独立的class,里面的资源无法共享。(先编译再包含)
include(静态包含):这种会将两个页面编译成一个class,里面的资源可以共享。(先包含再编译)
静态include和动态include的区别?
相同点:都会将页面引入到另一个页面中。
不同点:
静态include会将引用的jsp文件和当前的jsp文件生成为一个class文件,所以jsp中的变量是可以互相访问,两个页面中应尽量避免命名冲突。
动态include会生成两个完全不同的class文件,所以jsp中的变量不可以互相访问。
静态包含不能传参
适用场合:
静态include不会检查所含文件的变化,适用于包含静态页面,直接将内容先包含后处理。
动态include总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数,先编译之后再进行处理。
② useBean
useBean动作(jsp页面使用javaBean的第二种方式),作用域默认为page(本页面有效)
语法: <jsp:useBean id="对象名" class="包名.类名" scope="作用范围(page/request/application/session)"/>
scope属性用于指定JavaBean实例对象所存储的域范围,其取值只能是page、request、session和application四个值中的一个,其默认值是page。
③ getProperty
getProperty动作(name为useBean动作中的id).从对象中取出属性值:
语法: <jsp:getProperty name="javaBean对象" property="javaBean对象属性名" />
④ setProperty
setProperty动作(name为useBean动作中的id):
为对象设置属性值:
语法: <jsp:setProperty name="javaBean对象" property="javaBean对象属性名" value="值"/>
⑤ param
param动作:传递参数,到达跳转页面可以通过 request.getParameter("参数名")方式取出参数值
语法: <jsp:include page="转向页面的url" >
<jsp:param name="参数名1" value="参数值1"></jsp:param>
<jsp:param name="参数名2" value="参数值2"></jsp:param>
</jsp:include>
或者:
<jsp:forward page="转向页面的url">
<jsp:param name="参数名1" value="参数值1"></jsp:param>
<jsp:param name="参数名2" value="参数值2"></jsp:param>
</jsp:forward>
⑥ forward 动作:转发页面
语法: <jsp:forward page="login.jsp" /> 相当于 request.getRequestDispatcher("转发页面").forward(request,response);
⑦ plugin
plugin动作:<jsp:plugin>:用于指定在客户端运行的插件,不常用
JSP(三)九大内置对象
JSP内置对象是 Web容器创建的一组对象
JSP内置对象的名称是JSP的保留字,JSP内置对象是可以直接在JSP页面使用的对象,无需使用“new”,直接使用。
JSP中一共预先定义了9个这样的对象,分别为:request、response、session、application、out、pagecontext、config、page、exception。
① request 对象 (作用域: 一次请求)
request 对象是 javax.servlet.httpServletRequest 类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。
常用方法:
String getParameter(String name) 根据表单组件名称获取提交数据
String[] getParameterValues(String name) 获取表单组件对应多个值时的请求数据
void setCharacterEncoding(String charset) 指定每个请求的编码
RequestDispatcher getRequestDispatcher(String path) 返回一个RequestDispatcher对象,该对象的forward( )方法用于转发请求
void setAttribute(String key,Object value) 设置键对应属性值
Object getAttribute(String key) 获取键对应属性值
② response 对象
response 对象是 javax.servlet.http.httpServletResponse 类型的对象。response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。
常用方法:
void sendRedirect (String location) 将请求重新定位到一个不同的URL,即页面重定向
页面的转发
转发的作用:在多个页面交互过程中实现请求数据的共享
转发的实现:RequestDispatcher对象.forward()方法
重定向与转发的区别
区别一:
重定向时浏览器上的网址改变
转发是浏览器上的网址不变
区别二:
重定向实际上产生了两次请求
转发只一次请求
重定向:发送请求 -->服务器运行-->响应请求,返回给浏览器一个新的地址与响应码-->浏览器根据响应码,判定该响应为重定向,自动发送一个新的请求给服务器,请求地址为之前返回的地址-->服务器运行-->响应请求给浏览器
转发:发送请求 -->服务器运行-->进行请求的重新设置,例如通过request.setAttribute(name,value)-->根据转发的地址,获取该地址的网页-->响应请求给浏览器
区别三:
重定向时的网址可以是任何网址
转发的网址必须是本站点的网址
转发
转发是在服务器端发挥作用,通过forward()将提交信息在多个页面间进行传递
客户端浏览器的地址栏不会显示出转向后的地址
转发可以传递参数
语法: request.getRequestDispatcher("转发网址").forward(request,response);
重定向
重定向是在客户端发挥作用,通过请求新的地址实现页面转向
在地址栏中可以显示转向后的地址
重定向不能进行参数传递
语法: response.sendRedirect("重定向网址");
③ session 对象(作用域: 一次会话)
session 对象是 javax.servlet.http.HttpSession 类型的对象。session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。
常用方法:
void setAttribute(String key,Object value) 以key/value的形式保存对象值
Object getAttribute(String key) 通过key获取对象值
void invalidate() 设置session对象失效
String getId() 获取sessionid
void setMaxInactiveInterval(int interval) 设定session的非活动时间
int getMaxInactiveInterval() 获取session的有效非活动时间(以秒为单位)
void removeAttribute(String key) 从session中删除指定名称(key)所对应的对象
④ application 对象(作用域: 一次服务)
application 对象是 javax.servlet.ServletContext 类型的对象。application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。
常用方法:
void setAttribute(String key,Object value) 以key/value的形式保存对象值
Object getAttribute(String key) 通过key获取对象值
void removeAttribute(String name) 根据属性名称删除对应的属性
String getRealPath(String path) 返回相对路径的真实路径
Enumeration getAttributeNames() 获取所的属性名称
String getContextPath() 获取当前Web应用程序的根目录
String getInitParameter(String name) 根据初始化参数名称,获取初始化参数值
⑤ out 对象
out 对象是 javax.servlet.jsp.JspWriter 类型的对象。out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。
⑥ pageContext 对象
pageContext 对象是 javax.servlet.jsp.PageContext 类型的对象。pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。
常用方法:
void setAttribute(String key,Object value) 设置属性值
Object getAttribute(String key) 获取属性值
void removeAttribute(String key) 移除指定属性
pageContext 本身也是一个域对象,可以操作其他三个域对象(request,response,application)的数据
操作其他域对象的方法:
void setAttribute(String key,Object value,int Scope)
Object getAttribute(String key,int Scope)
void removeAttribute(String key,int Scope)
Scope:
PageContext.PAGE_SCOPE;
PageContext.REQUEST_SCOPE;
PageContext.SESSION_SCOPE;
PageContext.APPLICATION_SCOPE;
⑦ config 对象
config 对象是 javax.servlet.ServletConfig 类型的对象。config 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。
⑧ page 对象(作用域: 一个页面)
page 对象是 java.lang.Object 类型的对象。page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 thi ⑨ exception 对象
exception 对象是 java.lang.Throwable 类型的对象。exception 对象的作用是显示异常信息,只有在包含 isErrorPage="true" 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。
常用方法:
String getMessage() 返回描述异常的消息
String toString() 返回关于异常的简短描述消息
void printStackTrace() 显示异常及其栈轨迹
Throwable FillInStackTrace() 重写异常的执行栈轨迹
在页面设置支持中文字符的字符集
乱码处理方式一(以GET方式提交数据时)
<%
//读取用户名和密码
String name = request.getParameter("name");
//对请求数据进行字符编码
name = new String(name.getBytes("ISO-8859-1"), "utf-8");
%>
乱码处理方式二(以POST方式提交数据时)
<%
//设置读取请求信息的字符编码为UTF-8
request.setCharacterEncoding("utf-8");
//读取用户名和密码
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
%>
乱码处理方式三(以GET方式提交数据时)
<!--在Tomcat目录结构\conf\server.xml中设置字符集-->
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
cookie的简介
cookie是Web服务器保存在客户端的一系列文本信息
cookie的作用
对特定对象的追踪
统计网页浏览次数
简化登录
安全性能:容易信息泄露
在JSP中使用cookie
创建cookie对象
Cookie newCookie = new Cookie(String key,Object value);
写入cookie
response.addCookie(newCookie);
读取cookie
Cookie[] cookies = request.getCookies();
常用方法:
void setMaxAge(int expiry) 设置cookie的有效期,以秒为单位
void setValue(String value) 在cookie创建后,对cookie进行赋值
String getName() 获取cookie的名称
String getValue() 获取cookie的值
String getMaxAge() 获取cookie的有效时间,以秒为单位
Session和cookie的区别与联系
cookie是把用户的数据写在用户本地浏览器上, 其他网站也可以扫描使用你的cookie,容易泄露自己网站用户的隐私,而且一般浏览器对单个网站站点有cookie数量与大小的限制。
Session是把用户的数据写在用户的独占session上,存储在服务器上,一般只将session的id存储在cookie中。但将数据存储在服务器对服务器的成本会高。
session是由服务器创建的,开发人员可以在服务器上通过request对象的getsession方法得到session
一般情况,登录信息等重要信息存储在session中,其他信息存储在cookie中
session的实现原理
服务器会为每一个访问服务器的用户创建一个session对象,并且把session对象的id保存在本地cookie上,只要用户再次访问服务器时,带着session的id,服务器就会匹配用户在服务器上的session,根据session中的数据,还原用户上次的浏览状态或提供其他人性化服务。
cookie与session的对比
session
保存在服务器端用户信息
session中保存的是Object类型
随会话的结束而将其存储的数据销毁
保存重要的信息
cookie
在客户端保存用户信息
cookie保存的是 String类型
cookie可以长期保存在客户端
保存不重要的用户信息
---------------------------------------------------------------JSP完结-----------------------------------------------------------