jsp與tomcat相關知識整理

來源:互聯網
上載者:User

一、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>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.