JSP 学习笔记

1,JSP九大内置对象
    请求对象 request
 输出对象 out
    响应对象 response
    应用程序对象 application
    会话对象 session
    页面上下文对象 pageContext
    页面对象 page
    配置对象 config
    异常对象 exception
2,request对象
    String getParameter(String name) 根据表单组件名称获取提交数据
    String[] getParameterValues(String name) 获取表单组件对应多个值时的请求数据 -->需非空验证
    void setCharacterEncoding(String charset) 指定每个请求的编码
    RequestDispatcher getRequestDispatcher(String path) 返回一个RequestDispatcher对象,该对象的forward( )方法用于转发请求
    request 方法转发:
        request.getRequestDispatcher("userCreate.jsp").forward(request, response);
3,response对象
    方法: setAttribute(String name, Object o);
    Object getAttribute(String name); ---> if (userName != null || !userName.equals(""))
    注意:getAttribute()方法如果没有对应的参数名,会返回null值,所以要先做非空判断,不然会出现空指针异常
    并且返回的是 Object 类型,所以要做数据类型转换
    response 重定向
        response.sendRedirect("userCreate.jsp");
4,转发和重定向的区别
    转发
    ?     RequestDispatcher对象
    ?     forward()方法
    1、request.getRequestDispatcher("url").forward(request, response)
    2、<jsp:forward page=“url" />
? 重定向
?      将用户请求重新定位到一个新的URL
    response.sendRedirect("url")

*1):重定向的执行过程:Web服务器向浏览器发送一个http响应->浏览器接收此响应后再发送一个新的http请求到服务器
    ->服务器根据此请求寻找资源并发送给浏览器.它可以重定向到任意URL,不能共享request范围内的数据
2):重定向是在客户端发挥作用,通过请求新的地址实现页面跳转
3):重定向是通过浏览器重新请求地址,在地址栏中可以显示转向后的地址
*4):转发过程:Web服务器调用内部的方法在容器内部完成请求处理和转发动作->将目标资源发送给浏览器,它只能在同一个Web应用中使用,可以共享request范围内的数据
5):转发是在服务器端发挥作用,通过forward()方法将提交信息在多个页面间进行传递
6):转发是在服务器内部控制权的转移,客户端浏览器的地址栏不会显示出转向后的地址
5,session对象
方法:
    setAttribute(String key, Object o);
    getAttribute(String key); ==>进行非空验证 if (userName != null || !userName.equals(""))
    getId();
    Invalidate(); 设置session对象失效
    setMaxInactioveInterval(int interval)
    removeAttribute(String key)
移除session:
    1):程序主动清除:
    session.invalidate();
    session.removeAttribute("userName");
    2):服务器主动清除:
    session.setMaxInactioveInterval(int interval); 以秒为单位
   配置Tomcat web.xml文件
  <session-config><session-timeout>10</session-timeout></session-config>
  -->以分钟为单位
6,cookie对象
1)创建cookie
Cookie cookie = new Cookie("user", URLEncoder.encode(userName, "UTF-8"));
2)写入cookie
response.addCookie(cookie);
3)读取cookie (response接收页面)
Cookie[] cookies = request.getCookies();
String user = "";
if( cookies != null ){
for (int i=0; i<cookies.length; i++){
if ("user".equals(cookies[i].getName())){
user = URLDecoder.decode(cookies[i].getValue(), "UTF-8");
}
}
}
===>建议先对数组进行判断 if( cookies != null )
<%@page import="java.net.URLEncoder"%>
<%@page import="java.net.URLDecoder"%>

常用方法:
setValue(String value);
getName();
getValue();
getMaxAge();
setMaxAge(int expiry); 设置cookie有效期,以秒为单位
7,cookie 与 session 比较
1):session是在服务器端保存用户信息,cookie是在客户端保存用户信息
2):session中保存的是对象,cookie保存的是字符串
3):session对象随会话结束而失效,cookie可以长期保存在客户端
4):cookie通常用于保存不重要的用户信息,重要的信息使用session保存
8,application 对象
方法:
setAttribute(String key, Object o);
getAttribute(String key)
get
例:统计网站的访问人数
request.setCharacterEncoding("UTF-8");
Integer hitcount = (Integer)application.getAttribute("hitcount ");
if (hitcount ==null || hitcount ==0){
application.setAttribute("hitcount ", new Integer(1));
} else {
application.setAttribute("hitcount ", count.intValue()+1);
}
out.print("页面被访问了"hitcount .intValue()+"次"+"<br/>");
或:
if( hitsCount ==null || hitsCount == 0 ){
hitsCount = 1;
}else{
hitsCount += 1;
}
application.setAttribute("hitCounter", hitsCount);
--->最后统一设置
补充:
复位计数器
使用以上方法,在 web 服务器重启后,计数器会被复位为 0,即前面保留的数据都会消失,你可以使用以下几种方式解决该问题:
在数据库中定义一个用于统计网页访问量的数据表 count,字段为 hitcount , hitcount 默认值为0,将统计数据写入到数据表中。
在每次访问时我们读取表中 hitcount 字段。
每次访问时让 hitcount 自增 1。
在页面上显示新的 hitcount 值作为页面的访问量。
如果你需要统计每个页面的访问量,你可以使用以上逻辑将代码添加到所有页面上。

9,对象作用域比较
page: 只在当前页面有效,一旦离开当前页面,则在该范围内创建的对象将无法访问
request 在同一个请求范围内,可以访问该范围的内创建的对象,一旦请求失效,则创建的对象也随之失效
session 在会话没有失效或者销毁前,都可以访问该范围内的对象
application 在整个Web应用服务没有停止前,都可以从application中进行数据的存放

10,页面自动刷新
使用response对象的setIntHeader()方法
public void setIntHeader(String header, int headerValue) -->这个方法通知浏览器在给定的时间后刷新,时间以秒为单位。
// 设置每隔5秒刷新一次
response.setIntHeader("Refresh", 5);
例:
// 获取当前时间
Calendar calendar = new GregorianCalendar();
String am_pm;
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
if(calendar.get(Calendar.AM_PM) == 0){
am_pm = "AM";
}else{
am_pm = "PM";
}
String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
out.println("当前时间为: " + CT + "\n");

11,传递 Checkbox 数据到JSP程序
request.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");
String[] paramNames = request.getParameterValues("web"); --> web 是 Checkbox 的 name 属性值
if (paramNames != null){
for (String para:paramNames){
out.println(para);
}
}

重定向 放入session传递
String[] info = request.getParameterValues("info"); --> info 是 Checkbox 的 name 属性值
List<String> list = new ArrayList<String>();
if (info != null){ ------>注意一定要进行非空验证
for (String str:info){
list.add(str);
}
}
session.setAttribute("list", list);
-->循环读取
<c:forEach var="str" items="${list}" varStatus="status">
<b>${str}</b>
</c:forEach>
-->强化
<c:forEach var="str" items="${list}" varStatus="status">
${str}
<c:set var="end" scope="session" value="${list.get(list.size()-1)}"/> --->设置最后一个元素 ,注意最后一个索引是 list.size()-1
<c:if test="${!end.equals(str)}">,</c:if> ---->如果不是最后一个元素,则加上 ‘,‘
</c:forEach>

JavaBean与其它Java类相比而言独一无二的特征:
提供一个默认的无参构造函数。
需要被序列化并且实现了Serializable接口。
可能有一系列可读写属性。
可能有一系列的"getter"或"setter"方法。

---->设置跳转到指定页面
<%
String urlPath = (String)request.getAttribute("url");
response.setHeader("Refresh", "3,url="+urlPath); %>

12,JSP动作指令
1):Include指令
JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。
<%@ include file="文件相对 url 地址" %>
注意:在JSP文件被转换成Servlet的时候引入文件

2):Page指令
Page指令为容器提供当前页面的使用说明。一个JSP页面可以包含多个page指令。
<%@ page attribute="value" %>
例:<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

3):Taglib指令
<%@ taglib uri="uri" prefix="prefixOfTag" %>
例: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
13,JSP动作元素
1):<jsp:include>
<jsp:include page="相对 URL 地址" flush="true" />
flush 布尔属性,定义在包含资源前是否刷新缓存区。

-->include指令,它是在JSP文件被转换成Servlet的时候引入文件
jsp:include动作不同,插入文件的时间是在页面被请求的时候。

2):<jsp:useBean> --><jsp:useBean id="name" class="package.class" />
<jsp:setProperty> -->
<jsp:getProperty> -->
例:
<jsp:useBean id="user" class="com.entity.User" scope="request" /> ==>id为对象名, class为类完全路径, scope为作用域
<jsp:setProperty property="userId" name="user" value="1"/> ==>property为属性名, name为对象名, value为对象的属性值
<jsp:setProperty property="userName" name="user" value="张三"/>
<jsp:getProperty property="userId" name="user"/><br/> //1
<jsp:getProperty property="userName" name="user"/> //张三
3):<jsp:forward> 动作元素
jsp:forward动作把请求转到另外的页面 转发
<jsp:forward page="相对 URL 地址" />
-->page属性包含的是一个相对URL。page的值既可以直接给出,也可以在请求的时候动态计算,可以是一个JSP页面或者一个 Java Servlet.
4):<jsp:plugin>动作元素
5):<jsp:element> 、 <jsp:attribute>、 <jsp:body>动作元素
6):<jsp:text>动作元素
<jsp:text>模板数据</jsp:text>
例:
<jsp:text> &lt;jsp:forward page="date.jsp" /&gt;</jsp:text>
显示:<jsp:forward page="date.jsp" />
注: JSP 页面 大于小于是 &gt; &lt;

===>
getParameter() 返回String类型
getAttribute() 返回Object类型

时间: 2024-11-12 20:17:41

JSP 学习笔记的相关文章

Servlet&JSP学习笔记

Servlet&JSP学习笔记 */--> Servlet&JSP学习笔记 Table of Contents 1 Web容器 2 内置对象 2.1 内置对象分类 2.1.1 out 2.1.2 request 2.1.3 application 2.1.4 response 2.1.5 session 2.1.6 其他 3 JavaBean 3.1 JSP动作元素 3.2 javabean的四个作用於范围 4 JSP状态管理 4.1 Cookie 4.2 include 指令与动作

Servlet&amp;Jsp学习笔记归纳图(一)

转载请注明出处!!!版权必究!! 以下是Servlet&Jsp的学笔记归纳图,详细内容以及相关代码会在后面整理完成 后给出 使用的是思维导图工具:MindManager 6 最新版本是2013,有兴趣的自己百度下载,功能更多,安装有点麻烦 以下提供版本6绿色版免安装版下载: http://pan.baidu.com/s/1jGqlnXc 本节思维导图文件下载:http://pan.baidu.com/s/1eQGbMSU Servlet&Jsp学习笔记归纳图(一),布布扣,bubuko.c

重温JSP学习笔记--三大指令九大内置对象

最近在温习javaweb的相关基础知识,鉴于我弄丢了记满了整整一本的笔记,决定以后把笔记和一些学习上的心得以及碰到的一些问题统统都放在网上,今天看了一下jsp的相关基础,以下是笔记: JSP三大指令: page    ------>最复杂的一个指令,属性很多,常用的像import,language,pageEncoding等等 include-------->静态包含,一般在一个网站不同网页上把相同的元素单独写在一个jsp中,其他页面直接用该命令导入,能大大减少重复代码提高访问速度 tagli

JSP学习笔记(一):JSP标签

JSP的六大标签,分别是JSP命令标签.JSP申明标签.JSP script标签.JSP输出标签.JSP注释标签.JSP动作标签. 关于标签的具体用法,还是在实际运用中去体验比较可靠,用的过程中学习是一种很重要的方法.

重温JSP学习笔记--与日期数字格式化有关的jstl标签库

上一篇笔记写的主要是JSTL的core标签库,如果想对一些数字或者日期做一些操作或者在网页上显示指定格式的数字或日期,jstl还提供了另一个fmt标签库,这里简单介绍一下: 第一步,导入标签库: <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 格式化时间(在网页面上显示时间): <% Date date=new Date(); pageContext.setAttr

JSP学习笔记(二):JSP四大作用域

一.JSP的9大内置对象(隐式),已经new好了的对象 (1)out:JspWriter的实例,举例: out.print("") out.println("") (2)page:当前JSP页面自己,类似Java中的this用法,用的少 (3)pageContext:page上下文对象. Javax.servlet.jsp.pageContext接口对象,举例: pageContext.setAttribute("x", 100) pageCon

JSP学习笔记(三):解决JSP中文乱码问题

JSP开发应用过程中中文乱码是个比较常见的问题,其根源是:Web容器默认的字符编码格式是ISO-8859-1. 一.ISO-8859-1是不支持中文的.假如在保存JSP页面源码时遇到该错误,只要把JSP命令标签中的键值对"pageEncoding"的值ISO-8859-1改成"utf-8"(或UTF-8),当然是建议改成这样的编码格式,也可以改成GBK.这样就可以顺利保存源代码了. 二.get和post提交表单时遇到中文乱码问题的解决方案: (1)post提交:po

jsp学习笔记一

1.post提交数据是隐式的,get是通过在url里面传递的(可以看一下你浏览器的地址栏),用来传递一些不需要保密的数据. 2.用get时,传输数据的大小有限制 (注意不是参数的个数有限制),为2K:而post没有此限制. 3.还有用GET的时候在SERVLET中要用DOGET方法,用POST就要用DOPOST方法.这是JSP在处理GET和POST的时候在JAVA 角度看的不同. 4.还有一点需要注意哦,通过get方式来获取参数用的方法和通过post方式有些区别: post:request.ge

JSP学习笔记(一):JSP语法和指令

一.语法 1.脚本程序的语法格式: 脚本程序可以包含任意量的Java语句.变量.方法或表达式,只要它们在脚本语言中是有效的. <% 代码片段 %> 2.中文编码问题 如果我们要在页面正常显示中文,我们需要在 JSP 文件头部添加以下代码: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!D