JSP 学习笔记

Posted 好奇害死猫+1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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类型

 






























以上是关于JSP 学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

JSP 学习笔记

JSP学习笔记-Javabean

JSP学习笔记-JSP内置对象

重温JSP学习笔记--El函数库

JSP 学习总结---学习笔记

jsp学习笔记