JSP腳本元素
Jsp聲明語法:<%! %>
jsp聲明只在當前頁面有效,並且jsp聲明中不能使用jsp內置對象。在其內聲明的變量或方法為實例方法或實例變量
Jsp中Java代碼塊語法:<% %>
jsp中嵌入的java代碼塊稱Scriptlet,默認為與jsp對應的Servlet類的service()方法中的代碼塊。Scriptlet位置由page指令中的method確定method值可以為service(),doGet(),doPost()等。在其內聲明的變量為局部變量
Jsp中的表達式語法:<%= %>用於在頁面上輸出表達式或變量的值
JSP內置對象
對象 類型
request javax.servlet.HttpServletRequest
response javax.servlet.HttpServletResponse
pageContext javax.servlet.jsp.PageContext
application javax.servlet.ServletContext
out javax.servlet.jsp.JspWriter
config javax.servlet.ServletConfig
page java.lang.Object(類似於java中的this關鍵字)
session javax.servlet.HttpSession
exception java.lang.Exception
JSP的異常處理:
Jsp和Java一樣在運行時也有可能拋出異常,在發生異常的頁面中可以添加如下代碼
<%@ page errorPage="errorpage.jsp" %>
當前頁面發生異常跳轉至errorpage.jsp進行異常處理
在errorpage.jsp頁面中添加如下語句聲明此頁面是處理異常的頁面
<%@ page isErrorPage="true" %>
在處理異常的頁面可以直接訪問exception內置對象,獲取異常信息
<% exception.printStackTrace(new PrintWriter(out)); %>
JSP請求轉發:
request.getRequestDispatcher("success.jsp").forward(request,response);
特點:地址欄不改變,我們稱為請求轉發,發起的是同一次請求,數據未丟失
response.sendRedirect("success.jsp");
特點:地址欄改變,我們稱為重定向,發起的是兩次請求,數據丟失
中文亂碼解決方式:
post提交方式:通過request.setCharacterEncoding("utf-8");
get提交(url傳參)方式:String str= new String(request.getParameter("uName").getBytes("iso-8859-1"),"utf-8");
關於JSP預編譯:通過特殊的請求參數jsp_precomplie,它的值可以true或false;請求為ture那麼Servlet容器僅僅對客戶端請求的JSP文件進行預編譯,即將JSP文件轉化為Servlet類,但不運行Servlet;
1.http://localhost:8080/helloapp/hello.jsp?jsp_precomplie=true
2.找到Tomcat目錄下work目錄對應項目helloapp下的hello_jsp.class文件
將其復制到WEB-INF/classes對應的子目錄中
3.在web.xml文件中配制hello_jsp類
<servlet>
<servlet-name>hi</servlet-name>
<servlet-class>org.apache.jsp.hello_jsp</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>hi</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>