码迷,mamicode.com
首页 > Web开发 > 详细

JSP 学习笔记

时间:2017-06-26 23:52:08      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:返回   ddc   ble   对象   获取   作用   访问   文本文件   items   

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类型

 

JSP 学习笔记

标签:返回   ddc   ble   对象   获取   作用   访问   文本文件   items   

原文地址:http://www.cnblogs.com/sjmbug/p/7082867.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!