一 Java Web開發模式的變遷css
1 最初的Java web服務器端編程技術是Servlet,利用Servlet就能夠開發出一個Web應用程序。html
2 爲了解決Servlet缺陷,SUN推出了JSP技術。可是開發人員又走向了另外一個極端就是徹底放棄了Servlet。java
在JSP頁面混合使用HTML標記和java代碼編寫的腳本元素標記來開發Web程序。採用這種方法雖然能夠編寫JSP頁面變得簡單,直觀,然而,他只適合於業務流程簡單,系統規模較小的應用系統。mysql
若是系統較大的話,就會出現兩個嚴重的缺點:web
1) 頁面嚴重缺少可讀性。sql
2) 沒有將頁面表現和業務邏輯實現分開,使維護難度增長了。數據庫
在JSP中使用JavaBean能夠實現頁面與邏輯業務分開。編程
3 SUN公司將在Web應用開發中使用JSP+JavaBean技術。===JSP模式1 (適用於規模較小,業務邏輯簡單的web應用開發)。設計模式
4 SUN在java web開發中引入了MVC架構模式,利用Servlet,JSP,JavaBean技術(講servlet做爲MVC架構模式中的控制器,JSP做爲視圖,javabean做爲模型)===JSP模式2()這也不是絕對完美的。服務器
二 在JSP中使用JavaBean
一個標準的JavaBean組件具備如下幾個特徵
1 package com.cy.bean; 2 3 import java.io.Serializable; 4 5 /*JavaBean 類必須是一個公共類,並將其訪問屬性設置爲 public。*/ 6 /*JavaBean應該是可序列化(serializable)的,即實現java.io.Serializable 接口 */ 7 8 public class User implements Serializable { 9 private static final long serialVersionUID = 1L; 10 /* 一個JavaBean類不該有公共實例變量,類變量都爲private */ 11 private int id; 12 private String name; 13 private String pwd; 14 private int postion; 15 16 /* JavaBean 類必須有一個空的構造函數,(系統會默認一個無參構造器,若是沒有其餘的構造器) */ 17 public User() { 18 super(); 19 } 20 21 /* 要訪問這些類變量,應該經過一組存取方法(getXxx 和 setXxx)來訪問, */ 22 public int getId() { 23 return id; 24 } 25 26 public void setId(int id) { 27 this.id = id; 28 } 29 30 public String getName() { 31 return name; 32 } 33 34 public void setName(String name) { 35 this.name = name; 36 } 37 38 public String getPwd() { 39 return pwd; 40 } 41 42 public void setPwd(String pwd) { 43 this.pwd = pwd; 44 } 45 46 public int getPostion() { 47 return postion; 48 } 49 50 public void setPostion(int postion) { 51 this.postion = postion; 52 } 53 54 }
爲了在JSP頁面中使用JavaBean,SUN在JSP規範中提供了三種標準動做。
<jsp:useBean id=「beanName」 //變量名 scope=「page|request|session|application」 //做用範圍 class=「className」 //類全路徑/>
1 <jsp:useBean id="user" class="com.cy.bean.User" scope="request"></jsp:useBean>
id:表明bean的引用名,id在一個頁面中必須是一個惟一的值;User user = new User();
scope: 指定JavaBean生存的做用域
class: 指定JavaBean的包名及類名
type:id的引用的數據類型,默認狀況下,它與class的類型相同。
<jsp:getProperty name="beanname" property="propertyname"/>
1 <jsp:getProperty property="name" name="user"/>
property: 指的是返回JavaBean中的相對應的屬性名
name: <jsp:useBean>動做中指定的id名,
<jsp:setProperty name="BeanName" property="屬性名" param="參數名"/>
<jsp:setProperty name="BeanName" property="屬性名" value="屬性值" />
<jsp:setProperty name="BeanName" property="*"/>
1 ----.jsp 2 <jsp:setProperty property="name" name="user" param="username"/> 3 <jsp:setProperty property="pwd" name="user" param="pwd"/> 4 5 6 ----.html 7 username:<input type="text" name="username"/> 8 pwd :<input type ="password" name="pwd"/>
name: bean的名稱
property:JavaBean相對應的屬性
value設置屬性的值
param將property指定的屬性名的值設置爲一個請求參數的值
property="*"用來設置全部與所獲得的參數同名的屬性值
三 JSP開發模式1
1 package com.cy.bean; 2 3 import java.io.Serializable; 4 5 6 7 public class UserBean implements Serializable { 8 private static final long serialVersionUID = 1L; 9 10 private String name; 11 private String pwd; 12 13 public UserBean () { 14 super(); 15 } 16 17 18 public String getName() { 19 return name; 20 } 21 22 public void setName(String name) { 23 this.name = name; 24 } 25 26 public String getPwd() { 27 return pwd; 28 } 29 30 public void setPwd(String pwd) { 31 this.pwd = pwd; 32 } 33 34 35 }
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>login.html</title> 5 6 <meta name="keywords" content="keyword1,keyword2,keyword3"> 7 <meta name="description" content="this is my page"> 8 <meta name="content-type" content="text/html; charset=UTF-8"> 9 10 <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> 11 12 </head> 13 14 <body> 15 <form action="/java_web/CheckUser.jsp" method="post"> 16 username:<input type="text" name="username"/> 17 pwd :<input type ="password" name="pwd"/> 18 <input type="submit" value="submit"/> 19 </form> 20 </body> 21 </html>
1 package com.cy.bean; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.sql.Statement; 8 9 public class CheckUserBean { 10 11 public boolean checkUser(User user) { 12 13 String name = user.getName(); 14 String pwd = user.getPwd(); 15 Connection conn = null; 16 Statement st = null; 17 ResultSet rs = null; 18 String url = "jdbc:mysql://localhost:3306/demo"; 19 String user1 = "root"; 20 String password = "1234"; 21 String sql = "select * from t_user where user_name='" + name 22 + "' and user_password='" + pwd + "'"; 23 try { 24 Class.forName("com.mysql.jdbc.Driver"); 25 conn = DriverManager.getConnection(url, user1, password); 26 st = conn.createStatement(); 27 rs = st.executeQuery(sql); 28 29 if (rs.next()) { 30 return true; 31 } 32 } catch (Exception e) { 33 e.printStackTrace(); 34 } finally { 35 try { 36 rs.close(); 37 st.close(); 38 conn.close(); 39 } catch (SQLException e) { 40 e.printStackTrace(); 41 } 42 } 43 44 return false; 45 46 } 47 }
1 <%@ page language="java" import="java.util.*,com.cy.bean.*" pageEncoding="utf-8"%> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5 %> 6 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 8 <html> 9 <head> 10 <base href="<%=basePath%>"> 11 12 <title>My JSP 'CheckUser.jsp' starting page</title> 13 14 <meta http-equiv="pragma" content="no-cache"> 15 <meta http-equiv="cache-control" content="no-cache"> 16 <meta http-equiv="expires" content="0"> 17 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 18 <meta http-equiv="description" content="This is my page"> 19 <!-- 20 <link rel="stylesheet" type="text/css" href="styles.css"> 21 --> 22 23 </head> 24 25 <body> 26 <%CheckUserBean cub=new CheckUserBean(); %> 27 <jsp:useBean id="user" class="com.cy.bean.User" scope="request"></jsp:useBean> 28 <jsp:setProperty property="*" name="user"/> 29 <%if(cub.checkUser(user)) {%> 30 <jsp:forward page="success.jsp"></jsp:forward> 31 <%}else{%> 32 <jsp:forward page="fail.jsp"></jsp:forward> 33 <%} %> 34 </body> 35 </html>
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5 %> 6 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 8 <html> 9 <head> 10 <base href="<%=basePath%>"> 11 12 <title>My JSP 'success.jsp' starting page</title> 13 14 <meta http-equiv="pragma" content="no-cache"> 15 <meta http-equiv="cache-control" content="no-cache"> 16 <meta http-equiv="expires" content="0"> 17 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 18 <meta http-equiv="description" content="This is my page"> 19 <!-- 20 <link rel="stylesheet" type="text/css" href="styles.css"> 21 --> 22 23 </head> 24 25 <body> 26 <jsp:useBean id="user" class="com.cy.bean.User" scope="request"></jsp:useBean> 27 28 歡迎你:<jsp:getProperty property="name" name="user"/> 29 </body> 30 </html>
1 package com.cy.bean; 2 3 import java.io.Serializable; 4 5 public class User implements Serializable { 6 7 private String name; 8 private String pwd; 9 10 public String getName() { 11 return name; 12 } 13 14 public void setName(String name) { 15 this.name = name; 16 } 17 18 public String getPwd() { 19 return pwd; 20 } 21 22 public void setPwd(String pwd) { 23 this.pwd = pwd; 24 } 25 26 }
1 package com.cy.servlet; 2 3 import java.io.IOException; 4 import java.sql.Connection; 5 import java.sql.DriverManager; 6 import java.sql.ResultSet; 7 import java.sql.SQLException; 8 import java.sql.Statement; 9 10 import javax.servlet.ServletException; 11 import javax.servlet.http.HttpServlet; 12 import javax.servlet.http.HttpServletRequest; 13 import javax.servlet.http.HttpServletResponse; 14 15 import com.cy.bean.User; 16 // 須要鏈接數據庫 17 public class LoginServlet extends HttpServlet{ 18 19 @Override 20 protected void doGet(HttpServletRequest req, HttpServletResponse resp) 21 throws ServletException, IOException { 22 req.setCharacterEncoding("utf-8"); 23 resp.setCharacterEncoding("utf-8"); 24 resp.setContentType("text/html;charset=utf-8"); 25 26 /*使用一個Servlet來處理請求 */ 27 String name = req.getParameter("username"); 28 String pwd = req.getParameter("pwd"); 29 30 31 32 Connection conn = null; 33 Statement st = null; 34 ResultSet rs = null; 35 String url="jdbc:mysql://localhost:3306/demo"; 36 String user = "root"; 37 String password ="1234"; 38 String sql = "select * from t_user where user_name='"+name+"' and user_password='"+pwd+"'"; 39 40 //System.out.println(sql); 41 try { 42 Class.forName("com.mysql.jdbc.Driver"); 43 conn = DriverManager.getConnection(url,user,password); 44 st = conn.createStatement(); 45 rs = st.executeQuery(sql); 46 if(rs.next()){ 47 48 /* 在Servlet中填充Bean*/ 49 User u = new User(); 50 u.setPwd(pwd); 51 u.setUsername(name); 52 53 54 /*在Servlet中,將Bean存儲到請求、會話或者Servlet上下文中*/ 55 req.getSession().setAttribute("user", u); 56 57 /*將請求轉發到JSP頁面*/ 58 req.getRequestDispatcher("/welcome.jsp").forward(req, resp); 59 }else{ 60 req.getRequestDispatcher("/index.jsp").forward(req, resp); 61 } 62 } catch (Exception e) { 63 e.printStackTrace(); 64 }finally{ 65 try { 66 rs.close(); 67 st.close(); 68 conn.close(); 69 } catch (SQLException e) { 70 e.printStackTrace(); 71 } 72 } 73 74 } 75 76 @Override 77 protected void doPost(HttpServletRequest req, HttpServletResponse resp) 78 throws ServletException, IOException { 79 doGet(req, resp); 80 } 81 82 }
這裏還寫了一個簡單的util
1 package com.cy.util; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.sql.Statement; 8 9 public class DBUtil { 10 private static String url = "jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=utf-8"; 11 private static String user = "root"; 12 private static String pwd = "1234"; 13 private DBUtil(){}; 14 static{ 15 try { 16 Class.forName("com.mysql.jdbc.Driver"); 17 } catch (ClassNotFoundException e) { 18 e.printStackTrace(); 19 } 20 21 } 22 23 public static Connection getConn() throws SQLException{ 24 return DriverManager.getConnection(url,user,pwd); 25 } 26 27 public static void closeRe(Connection conn,Statement st,ResultSet rs){ 28 if(rs!=null){ 29 try { 30 rs.close(); 31 } catch (SQLException e) { 32 e.printStackTrace(); 33 }finally{ 34 if(st!=null){ 35 try { 36 st.close(); 37 } catch (SQLException e) { 38 e.printStackTrace(); 39 }finally{ 40 if(conn!=null){ 41 try { 42 conn.close(); 43 } catch (SQLException e) { 44 e.printStackTrace(); 45 } 46 } 47 } 48 } 49 } 50 } 51 } 52 53 public static void closeRe(Connection conn,Statement st) { 54 if(st!=null){ 55 try { 56 st.close(); 57 } catch (SQLException e) { 58 e.printStackTrace(); 59 }finally{ 60 if(conn!=null){ 61 try { 62 conn.close(); 63 } catch (SQLException e) { 64 e.printStackTrace(); 65 } 66 } 67 } 68 } 69 70 } 71 72 }
在web.xml配置Servlet
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 5 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 6 <display-name></display-name> 7 <welcome-file-list> 8 <welcome-file>index.jsp</welcome-file> 9 </welcome-file-list> 10 11 <servlet> 12 <servlet-name>login</servlet-name> 13 <servlet-class>com.cy.servlet.LoginServlet</servlet-class> 14 </servlet> 15 16 <servlet-mapping> 17 <servlet-name>login</servlet-name> 18 <url-pattern>/login</url-pattern> 19 </servlet-mapping> 20 21 </web-app>
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5 %> 6 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 8 <html> 9 <head> 10 <base href="<%=basePath%>"> 11 12 <title>My JSP 'welcome.jsp' starting page</title> 13 14 <meta http-equiv="pragma" content="no-cache"> 15 <meta http-equiv="cache-control" content="no-cache"> 16 <meta http-equiv="expires" content="0"> 17 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 18 <meta http-equiv="description" content="This is my page"> 19 <!-- 20 <link rel="stylesheet" type="text/css" href="styles.css"> 21 --> 22 23 </head> 24 25 <body> 26 welcome頁碼顯示數據 27 <jsp:useBean id="user" type="com.cy.bean.User" scope="session"></jsp:useBean> 28 <p>歡迎你:<jsp:getProperty property="name" name="user"></jsp:getProperty></p> 29 </body> 30 </html>
1 package com.cy.servlet; 2 3 import java.io.IOException; 4 5 import javax.servlet.ServletException; 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 10 import com.cy.bean.User; 11 12 public class DemoServlet extends HttpServlet { 13 14 @Override 15 protected void doGet(HttpServletRequest req, HttpServletResponse resp) 16 throws ServletException, IOException { 17 req.setCharacterEncoding("utf-8"); 18 String name = req.getParameter("username"); 19 String pwd = req.getParameter("pwd"); 20 21 User user = new User(); 22 user.setPwd(pwd); 23 user.setUsername(name); 24 req.getSession().setAttribute("user1", user); 25 String uri = req.getRequestURI(); 26 req.getRequestDispatcher(uri).forward(req, resp); 27 } 28 29 @Override 30 protected void doPost(HttpServletRequest req, HttpServletResponse resp) 31 throws ServletException, IOException { 32 doGet(req, resp); 33 } 34 35 }
1 package com.cy.filter; 2 3 import java.io.IOException; 4 5 import javax.servlet.Filter; 6 import javax.servlet.FilterChain; 7 import javax.servlet.FilterConfig; 8 import javax.servlet.ServletException; 9 import javax.servlet.ServletRequest; 10 import javax.servlet.ServletResponse; 11 import javax.servlet.http.HttpServletRequest; 12 13 import com.lovo.bean.User; 14 15 public class DemoFilter implements Filter { 16 17 public void destroy() { 18 // TODO Auto-generated method stub 19 20 } 21 22 public void doFilter(ServletRequest arg0, ServletResponse arg1, 23 FilterChain arg2) throws IOException, ServletException { 24 HttpServletRequest req = (HttpServletRequest)arg0; 25 User user = new User(); 26 String name = req.getParameter("username"); 27 String pwd = req.getParameter("pwd"); 28 user.setPwd(pwd); 29 user.setUsername(name); 30 req.getSession().setAttribute("user", user); 31 arg2.doFilter(req, arg1); 32 } 33 34 public void init(FilterConfig arg0) throws ServletException { 35 // TODO Auto-generated method stub 36 37 } 38 39 }
在web.xml中配置部署Filter,servlet
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 5 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 6 <display-name></display-name> 7 <welcome-file-list> 8 <welcome-file>index.jsp</welcome-file> 9 </welcome-file-list> 10 11 <filter> 12 <filter-name>jsp</filter-name> 13 <filter-class>com.cy.filter.DemoFilter</filter-class> 14 </filter> 15 <filter-mapping> 16 <filter-name>jsp</filter-name> 17 <url-pattern>/*</url-pattern> 18 </filter-mapping> 19 30 31 </web-app>
小結: