JSP
第三章 JSP語法
-
HTML創建表單表格
<form action="<%=request.getContextPath() %>/loginservlet" method="post" > ... 賬戶: <input type="text" name="userid" id="userid" > 密碼: <input type="Password" name="userpwd" id="userpwd"> <input type=submit> <input type=reset> </form>
<form name="form1" method="post" action="login_deal.jsp"> 用戶名:<input name="username" type="text" /><br /> 密碼:<input name="pwd" type="password" id="pwd" /><br /> <input type="submit" name="Submit" value="提交" /> <input type="reset" name="Submit2" value="重置" /> </form>
request.setCharacterEncoding(“utf-8"); String username= request.getParameter("username"); String pwd= request.getParameter("pwd"); out.println("用戶名爲:"+username); if ( pwd!=null && pwd!=“” ) { int int_pwd = Integer.parseInt(pwd); out.println("密碼爲:"+int_pwd); }
<%String path=request.getContextPath();%> <a href="<%=path%>/a.jsp">aaa</a>
-
腳本元素:
-
指令元素:
<%@ %>
-
動作元素:
< jsp:useBean >
、< jsp:setProperty >
、< jsp:getProperty >
、< jsp:include >
、< jsp:forward >
、< jsp:param >
-
< jsp:forward page = “next.jsp”/>
發起頁面內容不能顯示到瀏覽器中,程序直接跳轉next.jsp,顯示內容。運行後形成2個.java文件,2個.class文件
-
< jsp:include page = “next.jsp”/>
發起頁面和目標頁面都能顯示在瀏覽器中。程序顯示兩個文件內容。運行後形成2個.java文件,2個.class文件。
運行時把兩個.class文件內容顯示到瀏覽器中,動態聯編。
PS:動態聯編,兩個文件之間不共享同名變量,因爲是兩個獨立的類。
-
<jsp:param name=“參數 ” value=“值"/>
用來提供key/value 的信息,不單獨使用 -
<jsp:useBean id="Goods" scope="page" class="handle.shangping"/>
id
:變量名scope
: 存儲範圍,page
: 頁面直接使用,scope指定範圍內,id指定的實例不存在,則生成實例class
: 完整類名 -
<jsp:setProperty>
通常與<jsp:useBean>
標識一起使用,它將調用Bean中的setXxx()方法給Bean的簡單或索引屬性賦值。賦的值可以是請求中攜帶的參數。
-
-
<%@include page=”文件”%>
與<jsp:include></jsp:include>
的區別- 執行時間上:
- 前者在翻譯階段
- 後者在請求處理階段
- 引入內容不同
- 前者引入靜態文本(html,jsp),在JSP頁面被轉化成
servlet
之前和它融和到一起。 - 後者引入執行頁面或servlet所生成的應答文本。
- 前者引入靜態文本(html,jsp),在JSP頁面被轉化成
- 執行時間上:
第四章 內置對象
HTTP–無狀態的
request
對象獲取客戶瀏覽器的請求response
對客戶瀏覽器進行響應session
保存着會話期間所需要傳遞的數據信息,基於用戶,隨用戶的斷開而消失,可在多個頁面之間傳遞一個用戶的特定信息application
提供應用程序在服務器中運行時的全局信息,實現用戶之間共享數據,基於服務器,隨服務的關閉而消失,可在一個頁面上保留多個用戶的信息out
-
重定向
response
對象中的sendRedirect(url)
方法兩次請求和響應,不是一個
request
,地址變化 -
定時刷新
response.setHeader("Refresh","1");
response.setHeader(“Refresh”,“3;url=index.jsp");
跳轉新頁面
第五章JavaBean
分離靜態工作部分和動態工作部分。
1. 值Bean
嚴格遵循了JavaBean
的命名規範,通常用來封裝表單數據、數據庫數據,作爲信息的容器
2. 工具Bean
可以不遵循JavaBean
規範,通常用於封裝業務邏輯,數據操作等,例如連接數據庫,對數據庫進行增、刪、改、查和解決中文亂碼等操作。
3. JavaBean
規範
-
實現
java.io.Serializable
接口:實現對象在網絡不同操作系統中傳輸、對象存儲等。 -
JavaBean
是一個public
的類 -
類中必須存在一個
public
無參的構造函數 -
如果類的成員變量的名字是xxx(通常private),則類中可(不必須)使用兩個方法:
-
public
類型getXxx()
:用來獲取屬性xxx -
pubic void setXxx(類型 值)
:用來修改屬性xxx
-
4. JavaBean
屬性
- 簡單屬性(Simple):
getxxx() / setxxx()
- 索引屬性(Indexed): 通常爲數組類型的屬性
- 綁定屬性(Bound)
- 約束屬性(Constrained)
5. Bean的存放目錄:
Bean
的源文件連同包放在src
下,編譯成功的Bean連同包放在站點\WEB-INF\classes
目錄下。
6. 使用
-
用
<jsp:usebean>
定義要用的JavaBean -
用
<jsp:setproperty>
存儲屬性值 -
用
<jsp:getproperty>
提取屬性值 -
<jsp:useBean id="Goods" scope="page" class="handle.shangping"/>
id
:變量名scope
: 存儲範圍,page
: 頁面直接使用,scope指定範圍內,id指定的實例不存在,則生成實例取值 獲取方式 描述 page 頁面直接使用 創建的JavaBean實例只能夠在當前的JSP文件中使用,包括通過include靜態指令包含的頁面中有效 request request對象的getAttribute方法獲取 創建的JavaBean實例可以在請求範圍內進行存取 session session對象的getAttribute方法獲取 創建的JavaBean實例可以在session範圍內進行存取 application application對象的getAttribute方法獲取 創建的JavaBean實例可以在application範圍內進行存取 class
: 完整類名 -
<jsp:setProperty>
通常與<jsp:useBean>
標識一起使用,它將調用Bean中的setXxx()方法給Bean的簡單或索引屬性賦值。賦的值可以是請求中攜帶的參數。<%-- 單獨用 --%> <jsp:useBean ……/> <jsp:setPropery ……/> <%-- 作爲子標籤:只有bean實例是新創建的情況才執行setProperty --%> <jsp:useBean ……> <jsp:setPropery ……/> </jsp:useBean>
-
<jsp:getProperty name="Bean實例名" property="propertyName"/>
讀取屬性值,輸出到頁面
第六章 Servlet
1. 生命週期
- 客戶端請求服務器,服務器加載
Servlet
,並創建一個Servlet
實例; - 容器調用
Servlet
的init()方法; - 容器封裝請求響應對象,調用
service()
方法; - 請求處理結束後,將結果返回給容器;
- 容器將結果返回給客戶端進行顯示;
Web
服務器關閉時,調用destroy()
銷燬Servlet實例。
2. 會創建doGet / doPost
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, I0Exception {
doGet(request, response);
}
3. 獲取客戶端提交的信息
4. 調用JavaBean
處理結果返回客戶端
第八章
JavaWeb
應用程序
<%--login.jsp--%>
<form action="<%=request.getContextPath() %>/loginservlet" method="post" >
用戶名:<input name="username" type="text" /><br/>
密碼:<input name="pwd" type="password" id="pwd" /><br/>
<input type="submit" name="Submit" value="提交" />
<input type="reset" name="Submit2" value="重置" />
</form>
//loginservlet.java
@WebServlet("/loginservlet")
public class loginservlet extends HttpServlet {
public loginservlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getSession().invalidate();//清除session的所有信息
response.sendRedirect(request.getContextPath() + "/index.jsp");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String userid = request.getParameter("userid");
String userpwd = request.getParameter("userpwd");
UserDao uDao = new UserDao();
if (uDao.queryByUserNameAndPass(userid, userpwd))
response.sendRedirect(request.getContextPath() +"sy444/index.jsp");
else
response.sendRedirect(request.getContextPath() +"sy444/login.jsp");
}
}
//UserDao.java
public class UserDao {
//根據用戶名和密碼查找,如果找到返回true,否則返回false
public boolean queryByUserNameAndPass(String u_name,String u_pass) {
Connection conn = null;
ResultSet rs = null;
PreparedStatement stmt = null;
try {
conn = JdbcUtils.getCon();
// ②創建連接。
String sql ="SELECT * from user where username=? and password=?";
// ③創建執行SQL語句的對象。
stmt = conn.prepareStatement(sql);
stmt.setString(1,u_name);
stmt.setString(2,u_pass);
// ④執行查詢數據。
rs = stmt.executeQuery();
// ⑤處理查詢結果。
if (rs.next()) {
return true;
}
} catch (SQLException e) { }finally {JdbcUtils.release(stmt, rs, conn);}
return false;
}
public shangping selsectOne(int id) {
Connection conn = null;ResultSet rs = null;PreparedStatement stmt = null;
shangping goods = new shangping();
try{
conn = JdbcUtils.getCon();
String sql ="SELECT * from shangping WHERE id = ?";
stmt = conn.prepareStatement(sql);
stmt.setInt(1,id);
rs = stmt.executeQuery();
while(rs.next()) {
String name = rs.getString("name");
int price = rs.getInt("price");
int number = rs.getInt("number");
String picture = rs.getString("picture");
goods = new shangping(id,name,price,number,picture);
}
return goods;
} catch (SQLException e) { }finally {JdbcUtils.release(stmt, rs, conn);}
return null;
}
public boolean addIt(shangping goods, int Num){
Connection conn = null;
ResultSet rs = null;
PreparedStatement stmt = null;
try{
conn = JdbcUtils.getCon();
String sql ="insert into car values(? , ? )";
stmt = conn.prepareStatement(sql);
stmt.setInt(1,goods.getId());
stmt.setString(2,goods.getName());
int ans = stmt.executeUpdate();
if(ans>0) return true;
else return false;
} catch (SQLException e) { }finally {JdbcUtils.release(stmt, rs, conn);}
return false;
}
public boolean updateit(int id, int num){
Connection conn = null;
ResultSet rs = null;
PreparedStatement stmt = null;
try{
conn = JdbcUtils.getCon();
String sql ="update car set num=? where id=?";
stmt = conn.prepareStatement(sql);
stmt.setInt(1,num);
stmt.setInt(2,id);
int ans = stmt.executeUpdate();
if(ans>0) {
return true;
}else {
return false;
}
} catch (SQLException e) { }finally {JdbcUtils.release(stmt, rs, conn);}
return false;
}
public boolean delit(int id){
Connection conn = null;ResultSet rs = null;PreparedStatement stmt = null;
try{
conn = JdbcUtils.getCon();
String sql ="delete from car where id=?";
stmt = conn.prepareStatement(sql);
stmt.setInt(1,id);
int ans = stmt.executeUpdate();
if(ans>0) {
return true;
}else {
return false;
}
} catch (SQLException e) { }finally {JdbcUtils.release(stmt, rs, conn);}
return false;
}
}
//JdbcUtils
public class JdbcUtils {
// 加載驅動
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) { }
}
// 創建連接
public static Connection getCon() {
Connection conn = null;
String url = "jdbc:mysql://localhost:3306/php?useUnicode=true&characterEncoding=UTF-8";
try {
conn = DriverManager.getConnection(url, "root", "mysqll");
} catch (SQLException e) { }
return conn;
}
// 釋放資源
public static void release(Statement st, ResultSet rs, Connection con) {
try {
if (rs != null)
rs.close();
} catch (SQLException e) { }
try {
if (st != null)
st.close();
} catch (SQLException e) { }
try {
if (con != null)
con.close();
} catch (SQLException e) { }
}
}