一、JSP中的兩種include的區別
1、<%@include file="..."%>
2、<jsp:include page="..."/>
或者
<jsp:include page="...">
<jsp:param name="..." value="..."/>
</jsp:include>
其中方法1是先包含後處理,方法2是先處理再包含。
當用方法1時如果被包含的檔案內有和主檔案相同的變數定義,則會出錯;方法2是將被包含檔案中的代碼處理後僅將結果包含進來。推薦使用方法2。
二、關於Tomcat伺服器虛擬目錄的配置
開啟Tomcat的安裝目錄,進入conf/server.xml,在</host>上方加入
<Context path="/虛擬目錄名" docBase="虛擬目錄路徑"/>
三、equls和==在Java中區別
equls是對內容的比較,==是對地址的比較。
技巧:在使用equls時應該使用 "字串".equls(變數名)形式,可避免使用 變數名.equls("字串") 在當變數名為null時會發生空指向異常。
四、JSP九種內建對象(內建對象 類型 範圍)
·與Servlet有關的隱含對象
config javax.servlet.ServletConfig page
page java.lang.Object page
·與Input/Output有關的隱含對象
request javax.servlet.http.HttpServletRequest request
response javax.servlet.http.HttpServletResponse page
out javax.servlet.jsp.JspWtiter page
·JSP執行時,提供有關Context的隱含對象
pageContext javax.servlet.jsp.PageContext page
session javax.servlet.http.HttpSession session
application javax.servlet.ServletContext application
·與Error有關的隱含對象
exception java.lang.Throwable page
五、兩種跳轉的區別
1、<jsp:forward page="..."/>
·地址欄不改變(伺服器端跳轉)
·執行到跳躍陳述式後立刻五條件跳轉,之後的代碼不再執行
·如果使用forward跳轉,一定要在跳轉之前釋放所有資源
·使用forward時,request設定的屬性依然能保留在下一個頁面(setAttribute)
·通過<jsp:param name="..." value="..."/>傳遞參數
2、response.sendRedirect(“...”);
·地址欄改變(用戶端跳轉)
·所有代碼執行完畢之後再跳換
·不能儲存request屬性(地址改變了,用戶端跳轉)
·通過對URL地址修正傳遞參數
此外,在Servlet中使用這條語句實現jsp:forward跳轉
Resquest.getRequestDispatcher("xxx.jsp").forwaor(req,resp);
六、web.xml的其他配置
<servlet>
<servlet-name>mldn</servlet-name>
<jsp-file>/WEB-INF/sdemo.jsp</jsp-file>(檔案的路徑)
<init-param>
<param-name>xxx</param-name>
<param-value>aaa</param-value>
</init-param>
<init-param>
<param-name>yyy</param-name>
<param-value>bbb</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>mldn</servlet-name>
<url-pattern>/lxh</url-pattern>(瀏覽器中對應的地址,映射到上面的檔案路徑)
</servlet-mapping>
<welcome-file-list>(預設首頁的設定)
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
init-param中的值通過config.getInitParameter("xxx")取得。
七、對資料庫操作順序
<%@ page import="java.sql.*"%>
1、載入驅動程式
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;
2、串連資料庫
Connection conn = DriverManager.getConnection("jdbc:odbc:XXX") ;
3、操作資料庫
Statement stmt = conn.createStatement() ;
stmt.executeUpdate("...") ;(插入、刪除、更改)
ResultSet rs = stmt.executeQuery("...") ;(查詢)
while(rs.next())
{
int id = rs.getInt("id");
Steing name = rs.getString("name");
...
int id = rs.getInt(1);
Steing name = rs.getString(2);
}
4、關閉資料庫
rs.close()
stmt.close() ;
conn.close() ;
八、PreparedStatement
sql = "Insert INTO person (name,password,age) VALUES (?,?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1,XXX);
pstmt.setString(2,YYY);
pstmt.setInt(3,ZZZ);
pstmt.executeUpdate();
九、游標和ResultSet參數(JDBC 2.0)
唯讀游標
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs.afterLast(); //游標移動到最後,等於rs.absolute(-1);
rs.absolute(3); //從第四條開始輸出
rs.previous(); //向前滾動
可更新
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(sql) ;
rs.last() ;
rs.updateString("name","...") ;
rs.updateString("password","...") ;
rs.updateRow() ;
插入
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(sql) ;
rs.moveToInsertRow() ;
rs.updateString("name","...") ;
rs.updateString("password","...") ;
rs.insertRow() ;
刪除
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(sql) ;
rs.absolute(4) ;
rs.deleteRow() ;
以上操作都是將全部資料取出來在記憶體中定位,效能較差,不推薦使用,瞭解即可
十、批處理
try
{
stmt = conn.createStatement();
conn.setAutoCommit(false); //取消自動認可
stmt.addBatch("Insert INTO person (name,password,age) VALUES ('LXH_A','zzzzzz',28)");
stmt.addBatch("Insert INTO person (name,password,age) VALUES ('LXH_B','zzzzzz',28)");
stmt.addBatch("Insert INTO person (name,password,age) VALUES ('LXH_C','zzzzzz',28)");
stmt.addBatch("Insert INTO person (name,password,age) VALUES ('LXH_D','zzzzzz',28)");
stmt.addBatch("Insert INTO person (name,password,age) VALUES ('LXH_E','zzzzzz',28)");
stmt.addBatch("Insert INTO person (name,password,age) VALUES ('LXH_F','zzzzzz',28)");
stmt.addBatch("Insert INTO person (name,password,age) VALUES ('LXH_G','zzzzzz',28)");
stmt.addBatch("Insert INTO person (name,password,age) VALUES ('LXH_H','zzzzzz',28)");
stmt.executeBatch(); //執行批處理語句
//如果沒有異常,則執行此段代碼
conn.commit(); //提交事務,真正向資料庫中插入資料
}
catch(Exception e)
{
try
{
conn.rollback(); //將資料庫復原
}
catch(Exception e1)
{}
out.println("操作資料庫失 敗!!!");
}
十一、如何應用修改後的JavaBean
1、重啟Tomcat伺服器
2、修改Tomcat的conf/server.xml檔案,在
<Context path="/虛擬目錄名" docBase="虛擬目錄路徑" reloadable="true"/>
中加入紅色部分屬性。但會降低伺服器效能,一般只在開發中使用。
十二、使用JavaBean
<jsp:useBean id="xxx" scope="yyy" class="zz.zz.zz.zz" />
<jsp:setProperty name="xxx" property="*" />
·name為已經聲明過的JavaBean對象
·property為*表示自動匹配,也可指定單個變數
<jsp:setProperty name="xxx" property="a" param="b" />
·將獲得的b的值傳給a
<jsp:setProperty name="xxx" property="a" value="..." />
·將自訂的值傳給a
<jsp:getProperty name="xxx" property="a" />
·取得變數a的值
scope四種範圍:
page,只在當前頁有效,適用於操作資料庫
request,屬性只儲存在一次伺服器跳轉中,使用<jsp:forward>才可
session,屬性儲存在一次會話中,適用於開發購物車等
application,屬性公有,此對象在整個伺服器只執行個體化一次
十三、smartupload組件使用
HTML:
<form action="xxx.jsp" method="post" ENCTYPE="multipart/form-data">
JSP:
<jsp:useBean id="smart" scope="page" class="xx.xx.xx">
<%
// 1、初始化
smart.initalize(pageContext);
// 2、準備上傳
smart.upload();
// 3、儲存上傳的檔案
smart.save("/upload");
%>
*對於上傳圖片,因為一般比較大,只能使用post提交方式
如果表單被封裝(使用ENCTYPE),則無法使用request直接取得輸入參數,此時必須使用smartupload:
將smartupload.jar拷貝到tomcat/common/lib下
取得上傳檔案的副檔名稱:smart.getFiles().getFile(0).getFileExt();
儲存檔案:smart.getFiles().getFile(0).saveAs("/upload");
十四、開啟Tomcat的目錄列表功能
開啟conf/web.xml,找到
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
將listings下面的false改成true開啟。
十五、設定Tomcat的管理密碼
編輯conf目錄的tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="admin"/> //添加
<role rolename="manager"/> //添加
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
<user username="..." password="..." roles="admin,manager"/> //添加
</tomcat-users>