初識Jsp,JavaBean,Servlet以及一個簡單mvc模式的登錄界面


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>

登陸頁面

登錄成功頁面:

登錄失敗頁面:

包的分類以及封裝設計;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM