整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          當Java遇見了Html-Jsp……

          方微信:動力節點java學院

          官方微博:動力節點

          一、什么是Jsp

          jsp是一種基于文本的程序,全名java server page,其特點是html和java程序共存。執行時jsp會被運行容器編譯,編譯后的jsp跟servlet一樣,因此jsp是另一種形式的servlet。

          二、jsp頁面組成

          jsp 頁面包括以下內容:

          • 靜態內容

          • 指令

          • 表達式

          • 小腳本

          • 聲明

          • 注釋

          1.指令:

          • page指令: 通常位于jsp頁面的頂端,同一個頁面可以有多個page指令。

          • include指令:將一個外部文件嵌入到jsp文件中。

          • taglib指令 :使用標簽定義新的自定義標簽。

          1.1其中page指令語法:

          <%@ page 屬性=“屬性值”>

          屬性默認值
          languagejava
          import“”

          1.2 include 指令

          <%@ include file="url" %>

          1.3 動作

          • include動作

            <jsp:include page="url" flush="true"/>

            include 動作和include指令區別

            描述 | include指令 | include 動作

            --- | --- | ---

            語法 | < % @ include file=""/> | < jsp:include page="url" flush="true"/>

            發生時間 | 頁面轉換期間 | 請求期間

            包含內容 | 文件實際內容 | 頁面的輸出

            轉化servlet | 一個servlet | 2個servlet

            編譯時間 | 較慢 | 較快

            執行時間 | 稍快 |較慢--每次資源必須被編譯

            forward動作

            <jsp:forward page="url"/>

            ==request.getRequestDispatcher("/url").forward(res,resp);

            param動作

            <jsp:param name="參數名" value="參數值"/>常常與<jsp:forward>一起使用

            例子:

            <jsp:forward page="user.jsp">

            <jsp:param name="email" value="1233@154.com"/></jsp:forward>

            2.jsp注釋

          • html注釋

            <!-- html注釋 -->//客戶端可見

          • jsp 注釋

            <%-- jsp注釋 --%>//客戶端不可見

          • jsp 腳本注釋 //客戶端不可見

          //單行注射

          /** 多行注釋*/

          3.jsp腳本

          在jsp頁面中執行的java代碼,語法:

          <% java 代碼 %>

          4.jsp聲明

          在jsp頁面定義變量或者方法,語法

          <%! java 代碼 %>

          舉例:

          <%!

          String s="adele"; int add(int x,int y){ return x+y;

          }

          %>

          5.jsp表達式

          在jsp頁面執行的表達式,語法:

          <% =表達式 %>// 表達式不以分號結尾

          舉例:

          <%!

          String s="adele";%><h2> hello,<%=s %> </h2>

          三、jsp生命周期

          CC36B22A-503E-4C29-98BB-3B58038C140E.png

          jspService()是用來處理客戶端請求的,對于每一個請求,服務器會創建一個新的線程來處理該請求。以多線程方式執行大大降低對系統的資源需求,提高系統的并發量和縮短了響應時間,servlet是常駐在服務器內存中。

          它同servlet 一樣,jsp 實例初始化和銷毀也會調用sevlet的init() 和destroy();

          另外jsp還有自己的初始化方法_jspInit();_jspDestroy();

          <%@ page language="java" contentType="text/html";charset="utf-8">

          <%!

          public void _jspInit(){

          }public void _jspDestroy(){

          }

          %>

          四、javaben的使用

          動作元素:

          動作元素為請求處理階段提供信息。

          Paste_Image.png

          在jsp頁面使用javaben

          • 像普通的java類一樣,創建javabean;

          • 在jsp使用動作標簽來使用 javaben

          相關標簽如下:

          <jsp:useBwan id="" class="" scope="" />

          <jsp:setProperty name="javabean 是例" property="*"/>(跟表單關聯)

          <jsp:setProperty name="javabean 是例" property="javaben 屬性名"/>(跟表單關聯)

          <jsp:setProperty name="javabean 是例" property="javaben 屬性名" value=""/>(手動設置)

          <jsp:setProperty name="javabean 是例" property="javaben 屬性名" param="request對象參數"/>(跟request參數關聯)

          <jsp:getProperty name="" property=""/>

          舉個例子:

          首先用戶 在login.jsp提交表單,然后用戶在dologin.jsp 根據動作標簽獲取參數。

          login.jsp

          <form name="loginForm" action="dologin.jsp?mypass=999999" method="post">

          <table>

          <tr>

          <td>用戶名:</td>

          <td><input type="text" name="username" value=""/></td>

          </tr>

          <tr>

          <td>密碼:</td>

          <td><input type="password" name="password" value=""/></td>

          </tr>

          <tr>

          <td colspan="2" align="center"><input type="submit" value="登錄"/></td>

          </tr>

          </table>

          </form>

          dologin.jsp

          <body>

          <jsp:useBean id="myUsers" class="com.po.Users" scope="page"/>

          <h1>setProperty動作元素</h1>

          <hr>

          <!--根據表單自動匹配所有的屬性 -->

          <%--

          <jsp:setProperty name="myUsers" property="*"/>

          --%>

          <!--根據表單匹配所有部分的屬性 -->

          <%--

          <jsp:setProperty name="myUsers" property="username"/>

          --%>

          <!--根表單無關,通過手工賦值給屬性 -->

          <%--

          <jsp:setProperty name="myUsers" property="username" value="lisi"/>

          <jsp:setProperty name="myUsers" property="password" value="888888"/>

          --%>

          <!--通過URL傳參數給屬性賦值 -->

          <jsp:setProperty name="myUsers" property="username"/>

          <jsp:setProperty name="myUsers" property="password" param="mypass"/>

          <!-- 使用傳統的表達式方式來獲取用戶名和密碼 -->

          <%--

          用戶名:<%=myUsers.getUsername() %><br>

          密碼:<%=myUsers.getPassword() %><br>

          --%> <!-- 使用getProperty方式來獲取用戶名和密碼 -->

          用戶名:<jsp:getProperty name="myUsers" property="username"/> <br>

          密碼:<jsp:getProperty name="myUsers" property="password"/><br>

          <br>

          <br>

          <a href="testScope.jsp">測試javabean的四個作用域范圍</a>

          <%

          request.getRequestDispatcher("testScope.jsp").forward(request, response); %>

          </body>

          javaben 四大作用域

          • page ,僅當前頁面有效

          • request ,通過httpRequest.getAttribute()獲取jvabean對象

          • session ,通過httpSession.getAttribute() 獲取javabean對象

          • application,通過application.getAttribute方法獲取javabean 對象。

          五、cookie

          1.概述:

          由于http協議的無狀態,無法保存用戶的狀態,所以需要用session和cookie.

          cookie 是web服務器保存在客戶端的一系列文本信息。它的作用時記錄一些用戶的行為,簡化登陸,但是容易泄露用戶信息。

          2.jsp創建和使用cookie

          • 創建cookie

          Cookie cookie=new Cookie(String ,Object);

          • 寫入cookie

          response.addCookie(cookie);

          • 讀取 cookie

          Cookie[] cookies=request.getCookies();

          3.cookie的常用方法

          • setMaxAge();

          • setValue();

          • getName();

          • getValue();

          • getMaxAge();

          舉個列子: 使用cookie記住用戶登陸的賬號密碼;

          登陸界面:

          <body>

          <h1>用戶登錄</h1>

          <hr>

          <%

          request.setCharacterEncoding("utf-8");

          String username="";

          String password = "";

          Cookie[] cookies = request.getCookies(); if(cookies!=null&&cookies.length>0)

          { for(Cookie c:cookies)

          { if(c.getName().equals("username"))

          {

          username = URLDecoder.decode(c.getValue(),"utf-8");

          } if(c.getName().equals("password"))

          {

          password = URLDecoder.decode(c.getValue(),"utf-8");

          }

          }

          } %>

          <form name="loginForm" action="dologin.jsp" method="post">

          <table>

          <tr>

          <td>用戶名:</td>

          <td><input type="text" name="username" value="<%=username %>"/></td>

          </tr>

          <tr>

          <td>密碼:</td>

          <td><input type="password" name="password" value="<%=password %>" /></td>

          </tr>

          <tr>

          <td colspan="2"><input type="checkbox" name="isUseCookie" checked="checked"/>十天內記住我的登錄狀態</td>

          </tr>

          <tr>

          <td colspan="2" align="center"><input type="submit" value="登錄"/><input type="reset" value="取消"/></td>

          </tr>

          </table>

          </form>

          </body>

          處理登陸邏輯的jsp

          <body>

          <h1>登錄成功</h1>

          <hr>

          <br>

          <br>

          <br>

          <%

          request.setCharacterEncoding("utf-8"); //首先判斷用戶是否選擇了記住登錄狀態

          String[] isUseCookies = request.getParameterValues("isUseCookie"); if(isUseCookies!=null&&isUseCookies.length>0)

          { //把用戶名和密碼保存在Cookie對象里面

          String username = URLEncoder.encode(request.getParameter("username"),"utf-8"); //使用URLEncoder解決無法在Cookie當中保存中文字符串問題

          String password = URLEncoder.encode(request.getParameter("password"),"utf-8");

          Cookie usernameCookie = new Cookie("username",username);

          Cookie passwordCookie = new Cookie("password",password);

          usernameCookie.setMaxAge(864000);

          passwordCookie.setMaxAge(864000);//設置最大生存期限為10天

          response.addCookie(usernameCookie);

          response.addCookie(passwordCookie);

          } else

          {

          Cookie[] cookies = request.getCookies(); if(cookies!=null&&cookies.length>0)

          { for(Cookie c:cookies)

          { if(c.getName().equals("username")||c.getName().equals("password"))

          {

          c.setMaxAge(0); //設置Cookie失效

          response.addCookie(c); //重新保存。

          }

          }

          }

          } %>

          <a href="users.jsp" target="_blank">查看用戶信息</a>

          </body>

          使用cookie獲取用戶信息:

          <body>

          <h1>用戶信息</h1>

          <hr>

          <%

          request.setCharacterEncoding("utf-8");

          String username="";

          String password = "";

          Cookie[] cookies = request.getCookies(); if(cookies!=null&&cookies.length>0)

          { for(Cookie c:cookies)

          { if(c.getName().equals("username"))

          {

          username = URLDecoder.decode(c.getValue(),"utf-8");

          } if(c.getName().equals("password"))

          {

          password = URLDecoder.decode(c.getValue(),"utf-8");

          }

          }

          } %>

          <BR>

          <BR>

          <BR>

          用戶名:<%=username %><br>

          密碼:<%=password %><br>

          </body>

          3.cookie和 session的區別

          sessioncookie
          在服務端保存信息在客戶端保存信息
          保存的 object類型保存的是 string 類型
          隨會話結束,銷毀數據可以長期保存在客戶端中
          重要信息不重要信息

          如有問題請下方留言
          來源:互聯網

          SP:Java Server Pages。JSP是一種網頁的編碼格式,不同于HTML的是JSP中是由 HTML中的標簽指令 和 Java邏輯代碼 拼湊而成, 其中的Java代碼類似于JavaScript中的邏輯代碼, 但相對比來說JSP中的Java代碼更方便閱讀和書寫.

          一:JSP的運行原理

          當JSP頁面被運行時,WEB容器會把請求交給JSP引擎處理,會將JSP翻譯成一個_jspServlet,然后按照Servlet的調用方式來進行調用,

          瀏覽器向服務器發請求,不管訪問的是什么資源,其實都是在訪問Servlet,所以當訪問一個jsp頁面時,其實也是在訪問一個Servlet,服務器在執行jsp的時候,首先把jsp翻譯成一個Servlet,所以我們訪問jsp時,其實不是在訪問jsp,而是在訪問jsp翻譯過后的那個Servlet,

          二:Tomcat

          Tomcat在Web中的作用:

          Tomcat是Web中的容器,

          當客戶在Web服務器中輸入請求的時候, 如果請求的動態頁面, 那么Web服務器會創建一個Servlet來處理, Servlet就是Java代碼, 只是在服務器端的Java代碼, Servlet通過配置文件來攔截客戶所發出的請求, 并進行相應的處理, 最后反饋到客戶端.

          在這一系列的請求中,Web服務器是如何創建出Servlet來對請求進行處理? 而Tomcat的作用就是幫助Web服務器來創建Servlet的

          Tomcat是應用(java)服務器,它只是一個Servlet容器,是Apache的擴展,處理動態頁面的部分

          Tomcat各個文件夾的含義

          • bin:二進制執行文件。里面最常用的文件是startup.bat
          • conf:配置目錄。里面最核心的文件是server.xml。可以在里面改端口號等。默認端口號是8080,也就是說,此端口號不能被其他應用程序占用。
          • lib:庫文件。tomcat運行時需要的jar包所在的目錄
          • logs:日志
          • temp:臨時產生的文件,即緩存
          • webapps:web的應用程序。web應用放置到此目錄下瀏覽器可以直接訪問
          • work:編譯以后的class文件。

          當我們通過瀏覽器訪問index.jsp時,服務器首先將index.jsp翻譯成一個index_jsp.class,在Tomcat服務的work\Catalina\localhost\項目名\org\apache\jsp 目錄下可以看到index_jsp.class的源代碼文件index_jsp.java

          index_jsp這個類是繼承 org.apache.jasper.runtime.HttpJspBase這個類的,通過查看Tomcat服務器的源代碼,可以知道在apache-tomcat-6.0.20-src\java\org\apache\jasper\runtime目錄下存HttpJspBase這個類的源代碼文件

          HttpJspBase 類是繼承 HttpServlet 的,所以 HttpJspBase 類是一個 Servlet ,而 index_jsp 又是繼承 HttpJspBase類的,所以index_jsp類也是一個Servlet,所以當瀏覽器訪問服務器上的index.jsp頁面時,其實就是在訪問index_jsp這個Servlet,index_jsp這個Servlet使用_jspService這個方法處理請求。

          三:Jsp中的HTML代碼和Java代碼如何發送到客戶端

          1:jsp中的代碼是由 Java代碼 和 HTML 代碼組成的 但是兩種不同的代碼是如何實現他們的作用的?

          在客戶端發出請求時(請求的是動態代碼) 但是客戶端卻只能看到HTML代碼, Java代碼是客戶端看不到的

          原因是: 請求的JSP頁面中,所有的代碼是通過了Web服務器(在Tomcat下)編譯后的Servlet代碼, 在jsp中編寫的java代碼和html代碼都會被翻譯到_jspService方法中去,在jsp中編寫的java代碼會原封不動地翻譯成java代碼,如<%out.print("HelloJsp");%>直接翻譯成out.print("Hello Jsp");,而HTML代碼則會翻譯成使用out.write("<html標簽>\r\n");的形式輸出到瀏覽器。在jsp頁面中編寫的html排版標簽都是以out.write("<html標簽>\r\n");的形式輸出到瀏覽器,瀏覽器拿到html代碼后才能夠解析執行html代碼。

          當執行_jspService方法處理請求時,就會執行在jsp編寫的java代碼了,所以Jsp頁面中的java代碼服務器是通過調用_jspService方法處理請求時執行的。(_jspService中的Java代碼是實現動態頁面的邏輯基礎)

          dmin.html

          <!DOCTYPE html>
          <html>
          <head>
          <meta charset="utf-8">
          <title>簡歷設置</title>
          </head>
          <body>
          <form action="index.jsp" method="get" >
          <table>
          <tr>
          <td>姓名</td>
          <td><input type="text" name="username"></td>
          </tr>
          </table>
          <input	type="submit" name="submit" value="提交">
          </form>
          </body>
          </html>

          index.jsp


          主站蜘蛛池模板: 无码乱人伦一区二区亚洲| 国产人妖视频一区二区 | 亚洲国产成人久久综合一区| 无码人妻精品一区二区三区9厂 | 亚洲国产成人精品无码一区二区| 一区二区三区视频| 在线精品国产一区二区| 国产亚洲一区二区在线观看| 免费无码一区二区| 国产精品视频一区| 亚洲视频一区网站| 国产福利一区二区三区在线观看| 日韩人妻一区二区三区免费| 日韩在线不卡免费视频一区| 韩日午夜在线资源一区二区| 丰满人妻一区二区三区免费视频| 日韩一区二区三区不卡视频| 亚洲av成人一区二区三区在线播放| 一区二区三区福利视频免费观看| 手机看片一区二区| 亚洲中文字幕无码一区| 国产成人一区二区三区视频免费 | 国产成人一区二区三区视频免费| 久草新视频一区二区三区| 成人无码精品一区二区三区| 国产成人精品一区二区三在线观看| 亚洲日韩国产一区二区三区| 搡老熟女老女人一区二区| 国产乱码精品一区三上| 精品亚洲A∨无码一区二区三区| 国产一区二区三区播放| 国99精品无码一区二区三区| 色久综合网精品一区二区| 国产福利微拍精品一区二区 | 久久亚洲日韩精品一区二区三区| 免费播放一区二区三区| 美女免费视频一区二区| 日韩精品无码中文字幕一区二区| 3D动漫精品啪啪一区二区下载| 一区二区中文字幕在线观看| 精品国产区一区二区三区在线观看|