JSP 笔记整理

1、JSP必须依附项目(站点) – ⼀一个站点包括WEB-INF目录(必须大写) 

     – WEB-INF目录中包括web.xml文件 

     – JSP文件与WEB-INF同级目录 

     JSP文件必须包括 – <%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8“ %>
2、JSP 的六种标签
    
     伪指令标签<%@    %>    会对整个页面产生作用
          page <%@ page %>    
          include <%@ include file=""  %>
          taglib <%@ taglib prefic="c" %>   //如JSTL  
 
 
     注释标签<%--    ---%>
     
     动作标签<jsp:action Name/>
          jsp:include
               <a href="JSP2.jsp?ID=123">     jsp1
          在jsp2中写入 <jsp:include page="JSP3.jsp">  jsp2
          在jsp3中写入 request.getparameter("ID")

     你要理解你的页面的关联的关系,其实jsp3已经被jps2包含进来了,所以其实jsp3在jsp2内,属于jsp2的子页,
     那么当你超链接到jsp2的时候同时也加载了jsp3,子页也能够接收到其他链接传递到父页的参数(其实你可以将jsp3看成jsp2的一部分就可以了) 
     在同一个页面的请求都是可以获取得到的
          jsp:forward  

          <jsp:forward page="">

       
                <jsp:useBean id="pro" class="beans.product.ProductManager" scope="page" />
        
           表达式标签<%=   %>  不能使用分号结尾
     
     声明标签<%!   %>
     
     脚本标签<%      %>
 
3、jsp 生命周期:
 
         jspInit() -> _jspService() -> jspDestroy()
 
          转换:将JSP源文件转换成对应的Servlet源文件
          编译:编译java源文件为类(class)文件
          装载:将类文件加载至内存
          创建:创建一个Servlet类实例对象
          初始化:调用int() 方法,_jspService();
          服务:调用_jspServlet()方法,最终调用Servelet类的service()方法,将请求和响应传递对应的doXXX()方法。
          销毁:调用 jspDestroy() 方法,最终调用 Servlet 类的destroy() 方法,销毁 Servlet
 
4、page伪指令属性 
     import 属性(相当于java中的import)
     session属性 <%@page session="true/false" %>
     language
     extends
     contentType 属性指定页面响应的MIME类型和字符编码
     pageEncoding属性用于指定JSP页面字符编码格式
     <%@ language="java"  contentType =“text/html;charset=UTF-8”  pageEncoding="UTF-8" %>

5、JSP转换Servlet
     声明标签:转换为Servlet类成员
     脚本标签:转换为_jspService()中的代码
     HTML代码:转换为_jspService()中的out.write()
     表达式标签:转换为_jspService()中的out.write()

     <%! %> 声明标签  声明变量、方法,可以先使用后声明。   在Servlet中  转换成 成员变量、方法
     <%  %> 声明变量、方法,必须先声明再使用。   在Servlet中转换成 局部变量、方法。
     <jsp:useBean id="" class="类名" />
6、JSP容器在_jspService()方法中声明并初始化9个内置对象
     out
     application
     session
     request
     reponse
     page
     pageContext   //封装jsp上下文信息,管理jsp作用域中的对象访问。
     config
     exception
7、jsp页面共有4种作用域范围
     Application
     Session
     Request 会话作用域  forward() include()
     Page  当前页面
8、session.setAttribute(“user”,request.getParameter());<jsp:useBean>

9、静态包含在
     在jsp源文件转换成对应的Servlet源文件时将当前JSP文件和其中包含的所有其他文件合并成一个Servlet文件
     jsp的include伪指令 实现静态包含 <%@include file=" " %> file属性不能是动态表达式,不能向被包含文件传递参数

10、动态包含 包含和被包含文件各自独立编译.执行。
     使用jsp的include动作指令和forward动作指令实现动态包含。
     include允许当前页面将客户端请求暂时转交给所包含的对象,一旦对象执行完毕依然返回当前JSP页面。
     <jsp:include page=" " flush="true">

include伪指令与include动作指令

 

include伪指令

include动作指令

规则

<%@include %>

<jsp:include />

编译时间

较慢(资源必须被解析)

较快

执行时间

较快

较慢(因为每次请求资源必须被 解析)

灵活性

较差(页面内容必须固定)

较好(页面在运行时可动态选择)

动作发生的时间

页面转换期间

请求期间

被包含的内容

文件的内容

页面的输出

产生Servlet数目 

1

n

 



11、forward动作指令允许将客户请求转发到另 ⼀一个资源文件,即每当遇到此动作指令就 停止执行当前的JSP,转而执行被转发的指 定资源
 语法格式:<jsp:forward page=“地址”/> 

12动态指令的参数传递
  •  
    使用<jsp:param name=“” value=“”/>可以 传递⼀一个或多个参数给动态页面
    接受用<% request.getParameter(""); %>
    <%=sd   %>

     
  •  
    与include动作指令、forward动作指令⼀一起 使用
     
13、
     Servlet中 <jsp:include page=“a.jsp” />  相当于 request.getRequestDispatcher(“a.jsp").include(request, response)    
  Servlet中 <jsp:forward page=“/a.jsp” />相当于 request.getRequestDispatcher(“/a.jsp").forward(request, response)


14、<%@include file=" " %> 静态包含

15、Cookie cookie = new Cookie("userID", "aValue");
       将Cookie 放到Http响应中  response.addCookie(cookie); 
 
 
16、从客户端读取Cookie
     调用request.getCookies 得到Cookie对象组成的数组
     String cookieName="userID";
     Cookie[] cookies = request.getCookies();
     if(cookies != null){
          for(int i=0; i<cookies.length; i++){
               Cookie cookie = cookies[i];
          if(cookieName.equals(cookie.getName())){
             }
         }
     }          
 
 
17、request.getSession 获取 HttpSession的对象
 
          HttpSession session = request.getSession();
     getAttribute();
     setAttribute("","");
     removeAttribute();
     removeAttribute();
     invalidate();
 
18、String username = request.getParamter("usename");
 
19、表达式限制调用Java方法。
     ${pageContext.request.getMothod() }  非法
     <%= request.getMothod()%> // 很正常
 
20、EL内置对象
     pageContext 用于访问jsp内置对象
     pageScope代表page作用域
 
21、Sendredirect 是不同的request,send后的语句会继续执行,需要到客户端的往返,地址栏有变化,可以传参数。
22、Forword 后的语句不会继续传给客户端。速度块,服务器内部转换。地址栏没有变化。
 
23、<jsp:useBean id= "相当于Bean的对象名(cb)" class='Bean的地址"> 
        </jsp:usrBean>
       等同于<%@ import=""  %>
                   <% CounterBean cb = new Bean(); %>
         <jsp:setProperty name = "cb" property="count"  value=" 23"/>  property="" 指的是Bean中的属性
          相当于<% cb.setCount(Interger.parseInt("23"))%> 
          <jsp:getProperty name="cb" property="count" />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/yakun/p/chenyakun.html