<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSP開發的幾代技術</title>
</head>
<body>
<h2>JSP開發的幾代技術</h2>
<a href="jsps/login1.jsp">第一代JSP開發技術1:純JSP技術</a><br/><br/><br/>
<a href="jsps/login2.jsp">第一代JSP開發技術2(model1):JSP+EJB技術</a>
<h4>第二代JSP開發技術(model2):MVC框架=JSP+JaveBean+Servlet技術</h4>
<hr/>
<h2>以下演示jsp中bean標記的使用</h2>
1、聲明JavaBean對像-必須使用完整類名<br/>
<jsp:useBean id="u" class="cn.hncu.ejb.User" scope="session"></jsp:useBean>
<!-- 以上聲明相當於:
User u = new User();
session.setAttribute("u",u);
scope的可選值爲:page|request|session|application
-->
<%
u.setName("jack");
out.println(u.getName());
%>
<br/>
2、訪問JavaBean的屬性<br/>
<jsp:getProperty property="name" name="u"/><br/>
<jsp:setProperty property="age" name="u" value="23"/>
<jsp:getProperty property="age" name="u"/>
<h4> 使用"jsp:setProperty"標記爲birthday(複雜類型)設置屬性:</h4>
<!--注意,如果僅僅只把User中的birthDay變量改爲birth,下面的屬性名不要用"birth",
因爲底層是根據下面property中的取值生成對應的setter-getter方式名,再到JavaBean中調用對應方式。
< jsp:setProperty property="birth" name="u" value="2016-09-26"/>是錯的
-->
<jsp:setProperty property="birthDay" name="u" value="2016-09-26"/>
<jsp:getProperty property="birthDay" name="u"/>
<% out.println( u ); %> <br/>
3、通過param屬性給JavaBean賦值<br/>
<jsp:useBean id="u2" class="cn.hncu.ejb.User" scope="session"></jsp:useBean>
<form action="jsps/a.jsp">
姓名1:<input type="text" name="nm"/><br/>
姓名2:<input type="text" name="name"/><br/>
年齡:<input type="text" name="age"/><!-- 提供字符串到int類型的轉換 --><br/>
<input type="submit" value="註冊"/>
</form>
</body>
</html>
使用JSP的原則
在項目的開發中(除非這個公司是個菜鳥公司),JSP只用做展示,所有的用戶操作,都是從JSP頁面將請求發給Servlet處理,Servet在處理完成後,再轉發給其他JSP頁面。這就是基本的MVC設置模式,也即Model1。
在JSP頁面中,一般不會出現<% ..%>這樣的java代碼塊。需要輸出時使用jsp的自定義的標籤來處理,這樣JSP就更像是HTML頁面了。(此技術後面會講)。
第一代JSP開發技術1:純JSP技術
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<!-- 處理表單的JSP可以用單獨的JSP來實現 -->
<!--
<form action="login1.jsp">提交給自己處理
-->
<form action="login1Serv.jsp">
Name:<input type="text" name="name" /><br/>
<input type="submit" value="登錄">
</form>
</body>
</html>
登陸失敗
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<!-- 處理表單的JSP可以用單獨的JSP來實現,可以寫在login1.jsp頁面中 -->
<%
request.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
if(name!=null && name.startsWith("hncu")){//在這裏訪問後臺(用普通類寫或直接在這裏寫訪問後臺的代碼)
session.setAttribute("user", name);
response.sendRedirect(request.getContextPath()+"/jsps/suc.jsp");
}else{
out.println("登錄失敗!");
}
%>
</body>
</html>
登陸成功
第一代JSP開發技術2(model1):JSP+EJB技術
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<!-- 處理表單的JSP可以用單獨的JSP來實現 -->
<form action="login2Serv.jsp">
Name:<input type="text" name="name" /><br/>
<input type="submit" value="登錄">
</form>
</body>
</html>
登陸失敗
<%@page import="cn.hncu.ejb.User"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<!-- 處理表單的JSP可以用單獨的JSP來實現 -->
<%
request.setCharacterEncoding("utf-8");
//EJB = 企業級JavaBean = 包含業務邏輯的JavaBean
//把用戶提交的登錄參數收集並封裝成JavaBean
String name = request.getParameter("name");
User u = new User();
u.setName(name);
//調用EJB中的業務邏輯層代碼
User user = u.login();
if(user!=null){//在這裏訪問後臺(用普通類寫或直接在這裏寫訪問後臺的代碼)
session.setAttribute("user", user);
response.sendRedirect(request.getContextPath()+"/jsps/suc.jsp");
}else{
out.println("登錄失敗!");
}
%>
</body>
</html>
登陸成功
第二代JSP開發技術(model2):MVC框架=JSP+JaveBean+Servlet技術:http://blog.csdn.net/xanlv/article/details/52822352
jsp中bean標記的使用
JavaBean簡介
JavaBean是一種可重用的軟件組件。
一個JavaBean具有以下標準:
必須是一個公共的類。
一個公開的無參的構造。
getXxx和setXxx方法。
在JSP中訪問JavaBean的語法:
聲明JavaBean對像-必須使用完整類名
< jsp:useBean id=”u” class=”cn.hncu.ejb.User” scope=”session”>< /jsp:useBean>
注:一般情況下,我們保留< jsp:useBean/>的body部分爲空,如果不爲空,則只有初始化此Bean時執行,如:
< jsp:useBean id=”u” class=”cn.hncu.ejb.User” scope=”session”>
這是body部分,只會在初始化時執行一次
< /jsp:useBean>
訪問JavaBean的屬性
< jsp:setProperty property=”age” name=”u” value=”23”/>
< jsp:getProperty property=”age” name=”u”/>
也可以在頁面上使用Java代碼直接訪問它的屬性和其他方法。
JavaBean的範圍
JavaBean的scope屬性決定的Bean的範圍,默認爲page範圍。
當聲明瞭一個Bean並將它放到某個範疇之後,在同一個範圍內再次使用< jsp:useBean../>將不再創建。而是直接給你返回已經創建過的Bean的實例。此過程可以通過查看容器翻譯的源代碼得知。
通過param屬性給JavaBean賦值:
JavaBean可以接收用戶通過參數提交的數值,並直接封裝到JavaBean中。
以下JavaBean的屬性全部爲String類型。
以下接收用戶的三個參數直接賦值:注意保持與參數指定的名相同
< jsp:setProperty property=”name” name=”u” param=”nm”/>
一次設置全部屬性:
< jsp:setProperty name=”u2” property=”*”/>注意不能使用param
注意:一次設置全部的參數,其內部通過反射加以實現,所以,
在你向Bean傳遞參數時,必須與JavaBean的屬性名高度一致。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>設置bean中的屬性</title>
</head>
<body>
<h2>演示jsp中bean標記的使用</h2>
<h4> 利用請求表單上傳的參數來設置bean中的屬性 </h4>
<jsp:setProperty property="name" name="u" param="nm"/>
u:${u}<br/><br/>
<h4>自動裝配bean: 把表單參數名與bean中屬性名一一對應地進行讀參且設置屬性</h4>
<jsp:setProperty name="u2" property="*"/>
u2:${u2}
</body>
</html>
調用JavaBean的其他方法
在JavaBean中除了可以通過標籤調用它的的屬性之外,還可以直接在scriptlet直接調用它的其他方法。
這種方式比較適合較小的項目。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
歡迎你,<%=session.getAttribute("user")%> <br/>
<h2>以下是用戶相應的操作界面</h2>
<h2>以下是用戶相應的操作界面</h2>
</body>
</html>