j2EE 之 jsp阶段总结

JSP:
java server page java服务端页面,由sun定义的web开发技术;
jsp=jsp页面元素+jsp指令+html标记
 
jsp页面元素有:
   1.jsp声明; <%! int i=2; %>    //声明一个变量并赋值;
   2.jsp表达式; <%=i %>
   3.jsp代码段; <% out.write("hello"); %>
         jsp指令有:
  3个编译指令:
      1.page; <%@ page language="java" pageEncoding="utf-8"  import="java.util.*" %>
      2.include; <%@ include file="header.jsp" %>
      3.taglib; <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefi="c" %>//引入标签库;
  
  1.page指令:
   language: jsp页面的语言,固定为java 
   contentType:相应流的内容类型;
 pageEncoding:jsp页面本身的字符编码;默认与contentType中的类型一致
 buffer:响应流的缓存区的大小
   import:导入java包,多个包可使用逗号隔开,import可出现多次
 errorPage:指定发生异常时跳转的jsp页面
 isErrorPage:指定当前页面是否为错误页面,默认为false
  2.include指令:
 file="页面路径";【此处的绝对路径是包名+类名的上一级目录如:src,用法和错误页面的路径相同】 form,超链接,重定向则需加工程名;
  被包含的页面不应该有完整的html元素,如:<html><body><head>等,包含的页面中已经有了
  3.taglib指令:
   jsp页面引入标签库的语法;<%@ taglib uri="标签库的标识符" prefix="前缀" %>
 



  9个内置对象:
1.request :请求对象;
2.response:相应对象;
3.out:响应对象关联的输出流;
4.page:当前页面对应的servlet实例,this;
5.config:获取servlet的初始化参数;
6.pageContext:页面上下文对象,获取当前页面的相关信息;
7.session:回话对象;
8.application:应用程序对象;
9.exception:异常对象;


  在tomcat中部署web应用的方式:
1.应用程序打包成war文件(web档案文件)
2.把war文件放到webapp目录下,
3.手动启动服务器
4.地址栏中输入输入相应的web应用程序的页面;
  把数据绑定到pageContext对象上,在当前页能够传递数据;
   在header.jsp 中:pageContext.setAttribute("gao",20);
   在页面正文将其取出来:Integer i=(Integer)pageContext.getAttribute("gao");int j=i;


  eclipse内置的浏览器,错误页面没有出现,在360浏览器上就可以出现;浏览器的内核实现不一样;有差异;

session:
 会话,可以保证在一次回话中来传递数据,维持状态,(http协议是无连接,无状态的)
session占用服务器的内存;
 会话原理:
1.浏览器第一次访问服务器,服务器创建回话对象,生成回话ID;
2.响应流会把回话ID(通过响应头)发送到浏览器端;(set-cookie:JSESSIONID=回话ID);
3.浏览器端会把 cookie保存到在浏览器端;
4.再次访问服务器,带着保存的cookie访问服务器,(cookie:JSESSIONID=回话ID)
5.服务器通过cookie中的回话ID找到对应的回话对象,再与请求对象关联;
 
获取会话:
1.HttpSession session=request.getSession();
2.在jsp页面中,session就是内置对象;
使用会话:
session.setAttribute("un",userName);
String name=(String)session.getAttribute("un");

常用方法:getId(): 返回会话ID
getCreationTime(): 返回创建会话的时间(毫秒值)
getLastAccessedTime():返回最后一次访问的时间;
isNew(): 会话对象是否是新创建的;
invalidate(): 会话对象不可用;
getMaxInactiveInterval():会话的最大间隔时间;
setMaxInactiveInterval():设置回话的最大的时间间隔;

application:
应用程序
1. application.getInitParamter("un"); //读取web应用的初始化参数;
2. application.getRealPath(uri); //获取/JSP/logfile.txt对应的物理路径;
3. application.getResourceAsStream(uri) //获取对应的字节输入流;
4. application.setAttribute("name",userName);//在应用程序中传递数据;

cookie:
小甜饼,web服务器传递给浏览器的一小段文本,cookie通过浏览器来维护的;
cookie的运行原理:
response.addCookie(new Cookie("un",userName));把cookie通过
 响应头(set-cookie:un=userName;JSESSIONID=回话ID;...)发送到浏览器端,
 浏览器把这些cookie保存到本地文件中,当再次访问服务器页面端时,通过把
 请求头(cookie:un=userName;JSESSIONID=回话ID...)把所有cookie传到服务器端,
 cookie[] cookies=request.getCookies();
cookie的生存期:
1.默认cookie的生存期和session一样,与session同生死;默认cookie又称为会话cookie;
2.可以设置cookie的生存期,cookie.setMaxAge(int maxAge)//时间是秒
删除cookie:
cookie.setMaxAge(0);
response.addCookie(cookie);
cookie的路径包含在访问路径的uri下时,这时会将访问路径下的所有cookie通过请求头传递到服务器端;


cookie的限制:大小不超过4k,个数不超过300个,内容只能是字符串,浏览器可以禁用;
cookie与session的区别:
1.session在服务器端的内存中,cookie在本地主机上,由浏览器维护;
2.session中的绑定的数据可以是任意的,cookie中绑定的数据只能是字符串;
3.JSSESSIONID是通过cookie传到浏览器端的;在响应头中是set-cookie:JSESSIONID=***********;
 在请求头中的格式是:cookie:JSESSIONID=*********;


EL表达式:
将不同的值绑定到不同的作用域上,然后,在从作用域上取值;


jsp Expression Language,jsp表达式语言,输出javaBean的属性,简化jsp页面的编写;


 el表达式操作的javaBean 都是有作用域的, 若果没有标明作用域,那么就从小到大依次寻找
(pageContext《request《session《application)找到为止,不再向后找,找不到返回空串;


什么是javaBean?
一个可复用的java类,一般没有main方法,提供无参构造器,私用成员,公有的get 和set方法;

javaBean的属性:
    ${bean.value} :bean-》getValue()-》bean.value; 
简化了get方法的使用;

输出数组或集合中的元素:
数组:${arr[2]};
list:${list[2]};
map:${map1['key']} //里面可以是单引号,也可以是双引号
当map集合的key为Integer类型时,el表达式输不出对应的value;


el中的运算符:
1.算术运算符:+ - * /
2.比较运算符:eq ne gt ge lt le  (== != > >= < <=)
3.逻辑运算符:and or not  (&& || !)
4.empty运算符:${empty bean}
通过el表达式输出请求参数,请求头的值,cookie对象:
1.${param.un}
2.${header['accept']}
3.${cookie['JSESSIONID']}  //返回的事cookie对象;

jstl:
 jsp Standard Tag library,jsp标准标签库,替换代码段;替换选择,循环,代码段;
 
jstl标签库:
1.核心标签库:uri=“http://java.sun.com/jsp/jstl/core” prefix="c"
2.格式化标签库:uri="http://java.sun.com/jsp/jstl/format" prefix="fmt"
1.核心标签库:
<c:forEach items=""   集合
  var="" 变量
  begin="" 开始位置
  end="" 结束位置
  step="" 步长
  varStatus="" 每一个迭代的状态
>

       <c:if test="" ></c:if>


<c:choose >
<c:when test="">标签体</c:when>
<c:when test="">标签体</c:when>
</c:choose>

<c:set var="" value="" scape=""></c:set>

<c:remove var="" scope=""></c:remove>


<c:out value="" escopeXml="" ></c:out>
    
需要记住的是:${ }这种el表达式不能忘记;

2.格式化标签库:
1.uri="http://java.sun.com/jsp/jstl/format"  prefix="fmt"
<fmt:formatDate value="" pattern="yyyy-MM-dd HH:mm:ss"></fmt:formatDate> //日期格式化
<fmt:formatNumber value="" pattern="#.00"></fmt:formatNumber>            //格式化数字,保留两位小数,四舍五入;

过滤器filter的使用:
1.filter-过滤器:对servlet进行拦截,添加额外的功能,如添加日志,安全控制;
2.filter中的方法;init(FilterConfig config)  //完成相应的初始化操作
 doFilter(ServletRequest request,ServletResponse response ,FilterChain chain)
//完成相关的过滤操作;
 destroy() //销毁阶段调用;
  3.过滤器的运行原理:
  1.加载web应用时,servlet引擎创建过滤器实例,调用inint();
  2.访问某个servlet或jsp页面时,servlet引擎找到相应的过滤器,依次添加附加功能,filter1-》filter2-》servlet
  3.servlet的service()处理完成后,filter2-》filter1原路返回;

4.实现过滤器的步骤;
 1.写过滤器类,实现接口filter;
 2.在doFilter() 里面实现先关的操作;
 3.在web.xml中配置过滤器,


页面跳转的两种方式:
1.请求转发;
request.getRequestDispatcher(uri).forward(request,response);
  请求转发页面之间公用一个request对象,(A--->B)A,B公用一个request对象;
form.jsp---->ForwardServlet(获得表单上的数据,绑到request对象上,转发到另一个页面)
-->result.jsp(通过el表达式显示request上的数据)或者将数据封装到响应包中,输出到浏览器端;
地址栏中的路径不变;

2.重定向:
response.sendRedirect(uri);
两次请求,两次向相应,不共用request对象;
不能通过request对象来传递数据;
地址栏中的地址发生改变;
两种页面跳转怎么选择?
需要用request绑定数据传递到目标页面时,使用请求转发否则使用重定向;

写绝对路径时需要加上工程名的有:<form action="/工程名">,<a href="/工程名">,response.sendRedirected("/工程名");
写绝对路径时不需要加上工程名的有:request.getRequestDispatcher("/JSP/result.jsp").forward(request,response);





 







 































































你可能感兴趣的:(j2EE 之 jsp阶段总结)