1:JSP
JSP的基本語法:
指令標識page,include,taglib;
page指令標識常用的屬性包含Language用來定義要使用的腳本語言;contentType定義JSP字符的編碼和頁面響應的MIME類型;pageEncoding:jsp頁面的字符編碼;
include指令<%@ include file="path"%>
靜態包含,先包含,后編譯處理;
<jsp:include page="要包含的文件"> 動態包含,先編譯處理,后包含;
腳本標識包含:jsp表達式,聲明標識,腳本程序
jsp表達式<%= %>在里面輸出一個變量或者一個具體的內容
聲明標識<%! %>在里面定義全局變量,方法,類
腳本程序<% %>在里面定義局部變量,編寫語句
jsp的注釋
<!-- -->html注釋,客戶端可見
<%-- --%>jsp注釋 客戶端不可見
//java單行注釋
/* */java多行注釋
動作標識:
<jsp:include page="要包含的文件"> 動態包含,先編譯處理,后包含;
jsp跳轉指令
<jsp:forward>
<jsp:param value="" name="">
</jsp:forward>
服務器內部跳轉,可帶參數。
jap的九大內置對象,pageContext,request,response,session,application,config,out,page,exception;前五個熟練掌握
jsp四種數據保存范圍
page:只在一個頁面中保存數據
request:只在一個請求中保存數據
session:在一次會話范圍內保存數據,僅供單個用戶使用
application:在整個服務器上保存數據,所有用戶共享
response對象
response內置對象用於響應客戶請求,向客戶端輸出信息
功能1自動刷新應用
功能2頁面重定向應用,客戶端跳轉
功能3操作cookie應用
功能4cookie信息是存在客戶端的,session信息是存在服務器的。
2: Javabean 組件引入
JavaBean 是使用 Java 語言開發的一個可重用的組件,在 JSP 開發中可以使用 JavaBean 減少重復代碼,使整個 JSP 代碼的開發更簡潔。
jsp:useBean 創建 javabean
<jsp:useBeanid="實例化對象名稱"scope="保存范圍"class="類完整名稱"/> Scope,一共有 page,request,session 和 application4 個屬性范圍,默認是 page;
jsp:setProperty 設置 javabean 屬性值
<jsp:setPropertyproperty="屬性名稱"name="實例化對象的名稱"value="屬性值"param="參數名稱"/> Property=”*” 自動匹配所有
jsp:getProperty 獲取 javabean 屬性值
<jsp:getPropertyproperty="屬性名稱"name="實例化對象的名稱"/>
javabean 的保存范圍
Javabean 的保存范圍有 page,request,session.application,默認是 page;
javabean 刪除
Page 范圍:pageContext.removeAttribute(“javaBeanName”);
request 范圍:request.removeAttribute(“javaBeanName”);
session 范圍:session.removeAttribute(“javaBeanName”);
application 范圍:application.removeAttribute(“javaBeanName”);
3:servlet 引入
1,在 Servlet 中獲取 session,application
2,客戶端跳轉 response.sendRedirect("目標地址");
3,服務器跳轉:RequestDispatcher rd=request.getRequestDispatcher("目標地址"); rd.forward(request,response);
第一首先創建數據庫和數據表,我在這里使用了sqlyog圖形化界面創建數據庫和數據表。如下圖所示
需要注意的就是數據庫的名稱和數據表的名稱后面需要用,以及id設置為了自增。
第二開始開發,采用mvc的設計模式,分開進行設計;
首先package com.ningmeng.model;對User類進行封裝數據。為了后面方便使用;注意是在不同的包中的
1 package com.ningmeng.model; 2 3 public class User { 4 5 private int id; 6 private String username; 7 private String password; 8 9 10 public User() { 11 super(); 12 } 13 public User(String username, String password) { 14 super(); 15 this.username = username; 16 this.password = password; 17 } 18 public int getId() { 19 return id; 20 } 21 public void setId(int id) { 22 this.id = id; 23 } 24 public String getUsername() { 25 return username; 26 } 27 public void setUsername(String username) { 28 this.username = username; 29 } 30 public String getPassword() { 31 return password; 32 } 33 public void setPassword(String password) { 34 this.password = password; 35 } 36 37 38 }
其次對連接數據庫進行封裝,方便后面調用連接數據庫,這里封裝好數據庫並進行測試是否連接成功;注意是在不同的包中的;
1 package com.ningmeng.util; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.SQLException; 6 7 public class DbUtil { 8 9 private String url="jdbc:mysql://localhost:3306/db_jsp"; 10 private String user="root"; 11 private String password="123456"; 12 private String driver="com.mysql.jdbc.Driver"; 13 14 public Connection getCon() throws Exception{ 15 Class.forName(driver); 16 Connection con=DriverManager.getConnection(url, user, password); 17 return con; 18 } 19 20 public static void getClose(Connection con) throws SQLException{ 21 if(con!=null){ 22 con.close(); 23 } 24 } 25 26 /*public static void main(String[] args) { 27 DbUtil db=new DbUtil(); 28 try { 29 db.getCon(); 30 System.out.println("測試連接數據庫,連接成功"); 31 } catch (Exception e) { 32 // TODO Auto-generated catch block 33 e.printStackTrace(); 34 System.out.println("測試連接數據庫,連接失敗"); 35 } 36 37 }*/ 38 }
對數據封裝好,對連接數據庫封裝好,接下來封裝對數據庫的操作;注意是在不同的包中的;
1 package com.ningmeng.dao; 2 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 8 import com.ningmeng.model.User; 9 10 public class UserDao { 11 12 public User login(Connection con,User user) throws SQLException{ 13 User resultUser=null; 14 String sql="select * from user where username=? and password=?"; 15 PreparedStatement ps=con.prepareStatement(sql);// 16 ps.setString(1, user.getUsername()); 17 ps.setString(2, user.getPassword()); 18 ResultSet rs=ps.executeQuery(); 19 if(rs.next()){ 20 resultUser=new User(); 21 resultUser.setUsername(rs.getString("username")); 22 resultUser.setPassword(rs.getString("password")); 23 } 24 return resultUser; 25 } 26 }
封裝好上面的接下來就進行主要代碼的開發,使用Servlet對數據進行處理和操作;注意在不同的包中
1 package com.ningmeng.web; 2 3 import java.io.IOException; 4 import java.sql.Connection; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 import javax.servlet.http.HttpSession; 11 12 import com.ningmeng.dao.UserDao; 13 import com.ningmeng.model.User; 14 import com.ningmeng.util.DbUtil; 15 16 public class LoginServlet extends HttpServlet{ 17 18 DbUtil db=new DbUtil(); 19 UserDao userDao=new UserDao(); 20 /** 21 * 22 */ 23 private static final long serialVersionUID = 1L; 24 25 @Override 26 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 27 this.doPost(request, response); 28 } 29 30 @Override 31 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 32 String username=request.getParameter("username"); 33 String password=request.getParameter("password"); 34 Connection con=null; 35 try { 36 User user=new User(username,password); 37 con=db.getCon(); 38 User currentUser=userDao.login(con, user); 39 if(currentUser==null){ 40 //System.out.println("no"); 41 request.setAttribute("error", "用戶名或者密碼錯誤"); 42 request.setAttribute("username", username); 43 request.setAttribute("password", password); 44 request.getRequestDispatcher("login.jsp").forward(request, response); 45 }else{ 46 //System.out.println("yes"); 47 HttpSession session=request.getSession(); 48 session.setAttribute("currentUser",currentUser); 49 response.sendRedirect("main.jsp"); 50 } 51 } catch (Exception e) { 52 // TODO Auto-generated catch block 53 e.printStackTrace(); 54 } 55 56 } 57 58 59 }
設置好Servlet的類文件后需要配置xml,代碼如下。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 3 <display-name>web04</display-name> 4 <welcome-file-list> 5 <welcome-file>index.html</welcome-file> 6 <welcome-file>index.htm</welcome-file> 7 <welcome-file>index.jsp</welcome-file> 8 <welcome-file>default.html</welcome-file> 9 <welcome-file>default.htm</welcome-file> 10 <welcome-file>default.jsp</welcome-file> 11 </welcome-file-list> 12 13 <servlet> 14 <servlet-name>LoginServlet</servlet-name> 15 <servlet-class>com.ningmeng.web.LoginServlet</servlet-class> 16 </servlet> 17 <servlet-mapping> 18 <servlet-name>LoginServlet</servlet-name> 19 <url-pattern>/login</url-pattern> 20 </servlet-mapping> 21 </web-app>
最后進行主頁面的開發,創建jsp頁面。需要注意的是action的值是xml的<url-pattern>/login</url-pattern>中/login的值,這點需要注意;
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <form action="login" method="post"> 11 <table> 12 <tr> 13 <th colspan="2">登錄界面</th> 14 </tr> 15 <tr> 16 <td>賬號</td> 17 <td><input type="text" id="username" name="username" value="${username}"></td> 18 </tr> 19 <tr> 20 <td>密碼:</td> 21 <td><input type="text" id="password" name="password" value="${password}"></td> 22 </tr> 23 <tr> 24 <td><input type="submit" value="提交"></td> 25 <td><font color="red">${error}</font></td> 26 </tr> 27 </table> 28 </form> 29 </body> 30 </html>
最后一個為了優化,更好的可視化,一個登錄成功的驗證頁面,如下:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <p>登錄成功</p> 11 當前用戶:${currentUser.username}<br/> 12 當前密碼:${currentUser.password}<br/> 13 </body> 14 </html>
登陸頁面
登錄成功頁面:
登錄失敗頁面:
包的分類以及封裝設計;