1. 程式人生 > >【javaWeb】第49天—— WEB實戰專案

【javaWeb】第49天—— WEB實戰專案

回顧:
註解:
格式:
@interface 註解名{}
jdk中三個註解
自定義註解:
註解屬性:
介面中的方法
型別:
基本型別
String
Class
Annotation
Enum
以上型別的一維陣列
若一個註解有屬性,使用的時候的必須有值
元註解
@Retention 保留到那個階段
source
class
runtime
@Target 作用在那個部分上
type
method
filed
////////////////////////////////
檔案上傳:
servlet3.0
沒有web.xml
內嵌檔案上傳功能
支援註解開發
….

    註解開發:
        @WebServlet(urlPatterns={"/demo1","/demo2"})
        @WebListener
        @WebFilter(urlPatterns={"/demo1","/demo2"})

檔案上傳要求
    瀏覽器要求
        1.提交方式post
        2.提供檔案上傳元件 input type="file"
        3.表單enctype屬性的值 multipart/form-data
    servlet3.0伺服器要求
        在servlet上添加註解 @MultipartConfig
        普通上傳元件:
            request.getParameter()
        檔案上傳元件
            Part part=request.getPart(name值)
            獲取檔案的名稱
                part.getHeader("content-disposition");然後擷取就可以  
            獲取檔案的流
                part.getInputStream()
            對拷流
            刪除臨時檔案
                part.delete()
    檔案上傳注意問題:
        檔案重名:隨機名稱
        檔案安全:
        檔案目錄:
            使用者
            時間
            數量
            隨機
/////////////////////////////////////

動態代理:
jdk中Proxy
前提:要求代理物件和被代理物件要實現介面

    Object Proxy.newProxyInstance(ClassLoader loader,Class[] interfaces,InvoctaionHandler h);
        引數:
            ClassLoader loader:一般使用的被代理物件使用的loader  被代理物件.getClass().getClassLoader()
            Class[] interfaces:一般使用的被代理物件實現的所有介面 被代理物件.getClass().getInterfaces()
            InvoctaionHandler:介面 執行處理類
                裡面有一個方法需要實現 
                    Object invoke(Object proxy,Method method,Object... args)
                    引數:
                        proxy:代理物件,不要使用
                        method:當前執行的方法
                        args:當前方法所需要的引數

////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
商城的實體:
使用者
訂單
商品
分類
/////////////////////////////////////////
準備工作:
資料庫和表
create database store28;
use store28;

    CREATE TABLE `user` (
      `uid` varchar(32) NOT NULL,
      `username` varchar(20) DEFAULT NULL,
      `password` varchar(100) DEFAULT NULL,
      `name` varchar(20) DEFAULT NULL,
      `email` varchar(30) DEFAULT NULL,
      `telephone` varchar(20) DEFAULT NULL,
      `birthday` date DEFAULT NULL,
      `sex` varchar(10) DEFAULT NULL,
      `state` int(11) DEFAULT NULL,
      `code` varchar(64) DEFAULT NULL,
      PRIMARY KEY (`uid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
專案
    包結構
        com.itheima.web.servlet
        com.itheima.web.filter
        com.itheima.service         ---service 的介面
        com.itheima.service.impl    ---service 的實現類
        com.itheima.dao             ---dao的介面   
        com.itheima.dao.impl        ---dao的介面   
        com.itheima.domain
        com.itheima.utils
        com.itheima.constant

    jar包
        驅動
        c3p0
        dbuitls
        beanutils
        jstl
        郵件
    工具類和配置檔案
        datasourceutils 和 c3p0配置檔案
        uuidutils
        uploadutils
        md5uitls
        mailutils

    前臺頁面
        將頁面拷貝到專案中

//////////////////////////////////////////////
使用者模組:
註冊
傳送郵件的方式傳送啟用碼
啟用
登入
退出

////////////////////////////////////////////
通用servlet設計

只定義一個Userservlet
    重寫doget和dopost

例如新增使用者的時候
    以前: /store/addUser
    現在: /store/user?method=add

    修改使用者的時候
    以前: /store/updateUser
    現在: /store/user?method=update

在userservlet中doget方法中
    Stirng m=request.getParameter("method");
    if("add".equals(m)){
        add(HttpServletRequest,HttpServletResponse)
    }else if("update".equals(m)){
        update(HttpServletRequest,HttpServletResponse)
    }else if(){

    }


我們可以直接重寫service方法即可
    在service方法中寫上面的判斷程式碼即可
//////////////////////////////////////////////
BaseServlet extends HttpServlet{}

其他的servlet繼承baseServlet


在baseservlet中重寫service方法
    1.獲取請求的方法
    2.找到相應的子類 父類中的this代表的是子類
        Class clazz=this.getClass()
    3.子類呼叫方法
        通過方法名稱 獲取一個指定的方法 
            Method m=clazz.getMethod(方法名,HttpServletRequest.class,HttpServletResponse.class)
        方法執行
            m.invoke(this,HttpServletRequest,HttpServletResponse);

以前在servlet中 我們執行方法之後無非 請求轉發 重定向 列印資料 
    請求轉發  reuqest.getRequestDispatcher().forward()

    繼續完善我們baseservlet中service
        在第3步,方法執行返回值,
        現在我讓所有的方法都返回一個字串  add update
            字串代表的是請求轉發的路徑
            若該方法不轉發只需要返回一個null
        String s=(String)m.invoke(this,HttpServletRequest,HttpServletResponse);
        if(s!=null){
            reuqest.getRequestDispatcher(s).forward(...);
        }
//////////////////////////////////
案例1-使用者註冊

步驟實現:
    1.在index.jsp上點選 註冊頁面 跳轉到register.jsp
    2.點選註冊 
        <a href="/store/user?method=registUI"></a>

    3.在userservlet中編寫一個registUI 方法
        請求轉發到 register.jsp即可.
完成註冊
    1.regist
        封裝資料
            設定id
            設定state
            設定code
        呼叫service 完成註冊操作
        請求轉發 /jsp/msg.jsp
    2.userservice中的service
        呼叫dao
        傳送啟用郵件
    3.userdao dao 新增一條資料

注意:封裝資料的時候報了一個錯誤
    是因為 字串裝成時間型別的是出現錯誤
        BeanUtils不支援字串裝成時間
解決方案:
    自定義轉化器
        1.編寫一個類 實現Conventer介面
        2.實現方法
            convert(轉換成的型別,前臺頁面傳入的字串)
        3.註冊轉化器 在封裝資料之前註冊
            ConvertUtils.register(new MyConventer(), Date.class);

擴充套件:
使用演算法加密密碼
md5加密 不對稱的加密,不可逆
在資料庫中可以使用 md5(欄位|值)
java中api

////////////////////////////////
電子郵箱:就是在郵件伺服器上開啟的一塊空間
伺服器:提供郵件服務
協議:規定資料的格式

傳送郵件的協議:smtp
接受郵件的協議:pop / pop3    imap

/////////////////////////////////
本地的伺服器 :
郵件伺服器
設定域名 store.com
新增幾個賬戶 (普通使用者)
jack
tom
新增一個管理員賬戶
service

.///////////////////////////////////

.///////////////////////////////////
案例2-使用者啟用
郵箱的連線點選
http://localhost/store/user?method=active&code=824736A172A04023A7D71A498B8F6DF1
需要在UserServlet編寫一個active
獲取啟用碼
呼叫service完成啟用
頁面跳轉, 請求轉發 jsp/msg.jsp
userService中
active(code)
1.通過啟用碼獲取一個使用者
使用者有可能為空
2.若不為空,修改使用者的state 將0改成1
///////////////////////////////////////

案例3-使用者登入
步驟分析:
1.在index.jsp上登入連線 點選 跳轉到login.jsp
可以通過userservlet進行請求轉發 loginUI
2.修改頁面上的form表單 method 每個標籤新增name屬性
action:/store/user?method=login
3.login操作:
獲取使用者名稱和密碼
呼叫service 獲取一個user
判斷使用者是否為空
若為空:
若不為空
繼續判斷是否啟用
只有啟用的時候,將使用者放入session中
4.頁面重定向到首頁上
展示使用者名稱 退出 我的訂
//////////////////////////////
案例4-使用者退出
步驟分析:
點選使用者退出,
/store/user?method=logout
編寫logout方法
幹掉session
頁面重定向

相關推薦

javaWeb49—— WEB實戰專案

回顧: 註解: 格式: @interface 註解名{} jdk中三個註解 自定義註解: 註解屬性: 介面中的方法 型別:

javaWeb51—— WEB實戰專案

回顧: 分類資訊展示 包含 ajax .get(url,params,function(data),type);.get(url,params,function(data),type);.post(url,params,f

javaWeb70——maven2

Maven第二天 一、回顧 1.什麼是maven? 它是一個軟體開發的管理工具,主要管理的工作是:依賴管理,專案構建 2.使用maven的好處? 能夠集中管理jar包,提供一鍵構建 3.maven的安裝及配置 配置:MAVEN_HOME,PATH路徑配置 本地倉庫: 執行:mvn -v

javaWeb69——maven第一

Maven第一天 一、maven的好處? 1.使用傳統的web專案開發的crm大小 2.同樣的專案使用maven,它的大小 小結:同樣的專案使用maven工程來實現,它的專案原始碼很小,可以初步推斷它裡面一定沒有jar 包,繼續思考,沒有jar包的專案怎麼可能執行呢? 分析jar包查

javaWeb68——SSH練習

crm練習 課程內容 課程目標 1. 通過SSH框架完成基本功能的開發 使用者模組 功能一:使用者註冊功能 1. 可以先判斷登入名是否已經存在 2. 要給密碼使用MD5進行加密操作 功能二:使用者登入功能 1. 登入功能要注意

javaWeb66——SSH練習

crm練習 課程內容 課程目標 1. 通過SSH框架完成基本功能的開發 使用者模組 功能一:使用者註冊功能 1. 可以先判斷登入名是否已經存在 2. 要給密碼使用MD5進行加密操作 功能二:使用者登入功能 1. 登入功能要注意

javaWeb66——SSH練習

crm練習 課程內容 課程目標 1. 通過SSH框架完成基本功能的開發 使用者模組 功能一:使用者註冊功能 1. 可以先判斷登入名是否已經存在 2. 要給密碼使用MD5進行加密操作 功能二:使用者登入功能 1. 登入功能要注意

javaWeb64——SSH練習第二

crm練習 課程內容 課程目標 1. 通過SSH框架完成基本功能的開發 使用者模組 功能一:使用者註冊功能 1. 可以先判斷登入名是否已經存在 2. 要給密碼使用MD5進行加密操作 功能二:使用者登入功能 1. 登入功能要注意

javaWeb64——SSH練習第一

svn的使用 課程回顧:SSH三大框架整合 1. 回顧SSH開發需要的jar和配置檔案 * Struts2框架 * web.xml和struts.xml * Hibernate框架 * hibernate.cfg.xml * Customer.hbm.xml

javaWeb63——Spring框架的4

Spring框架的第四天 課程回顧:Spring框架第三天 1. AOP註解方式 * 編寫切面類(包含通知和切入點) * 開啟自動代理 2. JDBC模板技術 * Spring提供模板技術,資料庫的操作 * 以後編寫DAO層,都可以繼承JdbcDaoSupport類(

javaWeb63——Spring框架的3

Spring框架的第三天 課程回顧:Spring框架第二天 1. IOC的註解方式 * @Value * @Resource(name="") 2. 整合JUnti單元測試 * 先有Junit4執行環境 * 匯入spring-test.jar包 3. Spring的

javaWeb63——Spring框架的2

Spring框架第二天 課程回顧:Spring框架第一天 1. 概述 * IOC和AOP 2. 框架的IOC的入門 * 建立applicationContext.xml,引入約束,<bean/> * 配置檔案<bean id="" class="" n

javaWeb63——Spring框架的1

今天課程:Spring框架第一天 Spring框架的學習路線 1. Spring第一天:Spring的IOC容器之XML的方式,Spring框架與Web專案整合 2. Spring第二天:Spring的IOC容器之註解的方式,Spring的AOP技術 3. Spring第三天:

javaWeb62——Struts框架的3

Struts2第三天 課程回顧:Struts2框架的第二天 1. Servlet的API * ActionContext物件 * ServletActionContext物件 2. 結構型別的跳轉 * 全域性結果 * 區域性結構,type屬性 3. 資料的封裝 *

javaWeb61——Struts框架的2

Struts2的第二天 課程回顧:Struts2框架第一天 1. Struts2框架的概述,前端控制器的模式,核心的過濾器 2. 入門,編寫struts.xml配置檔案 3. 配置檔案 * 配置檔案的載入 4. Action類的編寫和訪問 Struts2的第二天的

javaWeb60——Struts框架的

Struts2第一天 Struts2的學習路線 1. Struts2的入門:主要是學習Struts2的開發流程(Struts2的開發流程、常見的配置、Action類的編寫) 2. Struts2的Servlet的API、引數封裝和攔截器 3. Struts2的

javaWeb54——專案部署(nginx)

回顧: linux: 作業系統,應用伺服器上 常用命令: cd 切換命令 cd / cd ~ cd ../../ c

Oracle0 安裝與配置

篇章概覽 前言 0、安裝與配置 第一天:Oracle使用者管理 1.1、使用者的建立與刪除 1.2、使用者許可權的授予與撤銷 1.3、使用者的口令管理 1.4、常用命令總結 第二天:Oracle基本用法 2.1、Oracle資料型別 2.2、Oracle基

Oracle2 SQL語言基礎

【寫在前面的】 【顯示命令執行時間:set timing on;】 【SQL語言細分】 先來看一下Oracle的SQL語言,Oracle10g釋出於2004年是按照SQL99標準來制定的。 【常用基本資料型別】 【具體操作】 由於Oracle建立一個數據庫

PHP微職位1學習筆記

核心 工程 階段 基礎 基礎篇 php 項目 3.x art 2018年8月22日學習內容:第一節 開班典禮以及課堂體系概述 【基礎預科】1、HTML5(Web設計入門基礎)視頻課程【1~2周】【必學】2、Bootstrap(HTML5前端庫設計開發)視頻課程【1周】【必學