JSP

jsp組成

  • html + java + jsp標簽
  • jsp中無須創(chuàng)建即可使用的對象(9個)
  • java腳本格式
    • <%...%> java代碼片段
    • <%=...%> java表達式
    • <%!...%> 聲明

簡單的例子

  • 一個數(shù)據(jù)提交的表單
<form action="./NumberServlet" method="POST">
    <input type="text" name="num1"/>
    <br/>
    <input type="text" name="num2">
    <br/>
    <input type="submit" name="submit">
  </form> 

  • NumberServlet
  public void doPost(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {

     String s1 = request.getParameter("num1");
     String s2 = request.getParameter("num2");
     
     request.setAttribute("result", s1+s2);
     request.getRequestDispatcher("./jsps/result.jsp").forward(request, response);
   } 
- - -
  • 結(jié)果顯示的jsp
    <body>
      result:  <%=request.getAttribute("result") %>
    </body>
    


jsp原理

  • 第一次訪問jsp的時候回講jsp編譯成java --》 class
  • jsp其實是一個Servlet 。tomcat work下面
  • jsp代碼和編譯后的java代碼
  <body>
    This is my JSP page. <br>
    <a href="./demo">hello</a>
    <%
      int a = 100;
      out.print(a);
      a++;
    %>
    <%
      out.print(a);
    a++;
    %>
    <%!
      int a = 90;
    %>
    <%
      out.print(this.a++);
    %>
  </body>
- - -
    public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
      implements org.apache.jasper.runtime.JspSourceDependent {


        int a = 90;
      
    private static final javax.servlet.jsp.JspFactory _jspxFactory =
            javax.servlet.jsp.JspFactory.getDefaultFactory();

    private static java.util.List<java.lang.String> _jspx_dependants;

    private javax.el.ExpressionFactory _el_expressionfactory;
    private org.apache.tomcat.InstanceManager _jsp_instancemanager;

    public java.util.List<java.lang.String> getDependants() {
      return _jspx_dependants;
    }

    public void _jspInit() {
      _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
      _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());
    }

    public void _jspDestroy() {
    }

    public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
          throws java.io.IOException, javax.servlet.ServletException {

      final javax.servlet.jsp.PageContext pageContext;
      javax.servlet.http.HttpSession session = null;
      final javax.servlet.ServletContext application;
      final javax.servlet.ServletConfig config;
      javax.servlet.jsp.JspWriter out = null;
      final java.lang.Object page = this;
      javax.servlet.jsp.JspWriter _jspx_out = null;
      javax.servlet.jsp.PageContext _jspx_page_context = null;


      try {
        response.setContentType("text/html;charset=utf-8");
        pageContext = _jspxFactory.getPageContext(this, request, response,
              null, true, 8192, true);
        _jspx_page_context = pageContext;
        application = pageContext.getServletContext();
        config = pageContext.getServletConfig();
        session = pageContext.getSession();
        out = pageContext.getOut();
        _jspx_out = out;

        out.write('\r');
        out.write('\n');

  String path = request.getContextPath();
  String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

        out.write("\r\n");
        out.write("\r\n");
        out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\r\n");
        out.write("<html>\r\n");
        out.write("  <head>\r\n");
        out.write("    ");
        out.write("\r\n");
        out.write("    \r\n");
        out.write("    <title>My JSP 'index.jsp' starting page</title>\r\n");
        out.write("\t<meta http-equiv=\"pragma\" content=\"no-cache\">\r\n");
        out.write("\t<meta http-equiv=\"cache-control\" content=\"no-cache\">\r\n");
        out.write("\t<meta http-equiv=\"expires\" content=\"0\">    \r\n");
        out.write("\t<meta http-equiv=\"keywords\" content=\"keyword1,keyword2,keyword3\">\r\n");
        out.write("\t<meta http-equiv=\"description\" content=\"This is my page\">\r\n");
        out.write("\t<!--\r\n");
        out.write("\t<link rel=\"stylesheet\" type=\"text/css\" href=\"styles.css\">\r\n");
        out.write("\t-->\r\n");
        out.write("  </head>\r\n");
        out.write("  \r\n");
        out.write("  <body>\r\n");
        out.write("    This is my JSP page. <br>\r\n");
        out.write("    <a href=\"./demo\">hello</a>\r\n");
        out.write("    ");

        int a = 100;
        out.print(a);
        a++;
      
        out.write("\r\n");
        out.write("    ");

        out.print(a);
      a++;
      
        out.write("\r\n");
        out.write("    ");
        out.write("\r\n");
        out.write("    ");

        out.print(this.a++);
      
        out.write("\r\n");
        out.write("  </body>\r\n");
        out.write("</html>\r\n");
      } catch (java.lang.Throwable t) {
        if (!(t instanceof javax.servlet.jsp.SkipPageException)){
          out = _jspx_out;
          if (out != null && out.getBufferSize() != 0)
            try { out.clearBuffer(); } catch (java.io.IOException e) {}
          if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
        }
      } finally {
        _jspxFactory.releasePageContext(_jspx_page_context);
      }
    }
  }

JSP三大指令

<% @ 指令名 attr1="" attr2="" %>

  • page
    • pageEncoding 指定當前jsp頁面的編碼(只要pageEncoding的編碼和文件的編碼一致就不會由亂碼,jsp-->class的時候會去讀取這個屬性)
    • contentType 添加一個響應頭
    • 這兩個只要一個就可以了
      <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
      ```
    • import
      <%@ page import="class1,class2,class3"%>
    • errorPage isErrorPage
  • include 靜態(tài)包含
    <%@ include file="*.jsp"%>
    jsp編譯成java文件時完成,他們共同生成一個java文件
  • taglib 導入標簽庫
    • prefix 前綴
    • uri 標簽庫的位置
    • <%@taglib prefix="s" uri="/struts-tags"%>

JSP動作標簽

  • <jsp:forward>
  • <jsp:include>
  • <jsp:param>

Cookie

由服務器創(chuàng)建保存到客戶端瀏覽器的一個鍵值對,服務器保存cookie的相應頭:Set-Cookie: key=value Set-Cookie: key1=value1 當瀏覽器請求服務器時,會把該服務器保存的Cookie隨請求發(fā)送給服務器: Cookie: key=value; key1=value1

  • 一個Cookie最大4KB

  • 一個服務器最多向一個瀏覽器保存20個Cookie

  • 一個瀏覽器最多保存300個Cookie

  • Cookie的maxAge cookie.setMaxAge(int)

    • maxAge > 0 瀏覽器會保存到硬盤上 單位 S
    • maxAge < 0 只會保存到內(nèi)存中 默認
    • maxAge = 0 需要刪除該Cookie
  • Cookie的path


    谷歌瀏覽器的cookie

javaWeb Cookie

response.addCookie();
request.getCookies();

JSP中使用Cookie

//保存cookie
Cookie nameCookie = new Cookie("name","dapi");
Cookie numberCookie = new Cookie("number","12101010320");
response.addCookie(nameCookie);
response.addCookie(numberCookie);
    
 //獲取cookie
 Cookie[] cookies = request.getCookies();
 if(cookies != null){
    for(int i=0;i < cookies.length;i++){
    out.print(cookies[i].getName()+"  "+cookies[i].getValue()+"<br/>");
    }
 }

HttpSession

  • 由javaWeb提供用來會話(一個用戶對服務器的連續(xù)請求,多次請求沒有關閉瀏覽器)跟蹤的類
  • session是服務器端對象保存在服務器端
  • HttpSession是Servlet三大域之一(request,session,application)
  • 底層依賴Cookie或者URL重寫
//servlet
request.getSession();
//jsp 可以直接使用 session
session.setAttribute("name", "xx");
session.getAttribute("name");
session.removeAttribute("name");

request.getSession() 首先是會獲取Cookie中的sessionId,如果id不存在,創(chuàng)建session保存sessionid,如果存在則通過id找session,如果沒找到則創(chuàng)建session并將id保存到cookie中。
sessionId保存的時候maxAge為-1
web.xml中可以配置session最大不活動時間
<session-config>
<session-timeout>30</session-timeout>

</session-config>

Url重寫

response.encodeURL(String url);//將cookie --> params


Nothing is certain in this life. The only thing i know for sure is that. I love you and my life. That is the only thing i know. have a good day

:)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 本文目錄: JSP基礎 Cookie HttpSession JSP基礎 JSP(Java Server Page...
    極客圈閱讀 594評論 0 3
  • 一、jsp定義及作用 JSP技術使用Java編程語言編寫類XML的tags和scriptlets,來封裝產(chǎn)生動態(tài)網(wǎng)...
    yzw12138閱讀 1,476評論 0 0
  • 一、JSP基礎 1.1什么是JSP JSP(Java ServerPage)是Java服務器端動態(tài)頁面技術。是su...
    晨星資源閱讀 1,269評論 0 6
  • 一、JSP內(nèi)置對象簡介 JSP內(nèi)置對象是Web容器創(chuàng)建的一組對象,不使用new關鍵字就可以使用的內(nèi)置對象。開發(fā)者可...
    年少懵懂丶流年夢閱讀 3,969評論 0 8
  • 不管身處何地,不管身邊有著多少人..... 我發(fā)現(xiàn)心中最思念的那個人,還是你......
    Dr大鵬閱讀 170評論 0 0

友情鏈接更多精彩內(nèi)容