未分類

靜態網頁

動態網頁CGI? asp(html+JavaScript+com組件) PHP?

jsp(html+java片段+jsp語法+js)在servlet基礎上發展的

B/S開發模式(browser/server)瀏覽器→服務器

C/S開發模式(client/server)客戶端→服務器


html:行內元素 獨占一行? ? ? 塊級元素

target=? _blank新建選項卡打開 _self當前選項卡打開

在frameset中,可以給target指定一個frame的name

display改變元素的樣式


CSS層疊樣式表

常用的選擇器:

標簽選擇器父子選擇器class類選擇器(.) ID選擇器(以#開頭) 通配符選擇器(*)

浮動float


JavaScript:解釋性語言? 是基于對象和事件驅動

廣泛用于客戶端的web開發的腳本語言,常給html添加動態功能

沒有class(類)

var Fish = new Fish()當做類使用

數字類型布爾類型字符串類型(使用引號)

false 0 “”null undefined NaN都表示false。

null:變量的值為null/賦值為null

undefined:變量沒有值/聲明了變量,沒有賦值

算術運算:

推斷:refer

當if遇到||運算時 從前向后運算? 遇到真的時候返回真的對象 當沒有真 就返回最后一個為假的對象


var input = window.prompt();

window.alert();

document.write();

強轉parseInt();變整型


JS中,函數/方法定義的時候,形參不需要var


數組:foreach: Java中遍歷的是元素? JS中是下標 用in替代:

數組中的鍵值對只能遍歷出來


函數:自定義函數系統函數

調函數只看函數名

function函數調用時可直接賦參數?

用arguments可以for循環出賦予的參數(arguments里存放了通過參數傳來的參數值)


重載:無重載后面的會覆蓋前面的

定義類(原型對象)和對象:

沒有類的概念,類怎么來?創建對象實例可通過構造函數實現

function Car(){}

var c = new Car();

1、①動態綁定屬性 c.name=””;②動態綁定方法 c.run = function(){}

2、有參構造方法中 動態綁定 用 this.替換上面的c.? 不用this用var 是私有的

即在JS中 被this修飾的都是公開的 否則為私有

靜態綁定Car.prototype.屬性或方法 所有對象都擁有了這些屬性和方法


Array直接new 直接放


JSON一種簡潔的方式創建一個對象 var car = {:,:,}

①var str = '{"name":"huangxiaojian","age":"23"}'

JSON.parse(str)? ? age: "23" name: "huangxiaojian"

②var a = {a:1,b:2}? ?

JSON.stringify(a)? ? "{"a":1,"b":2}"



封裝

繼承:①使用對象冒充的方式實現繼承? 多繼承 多重繼承

this.xx =父名;

this.xx();

? ②原型鏈:上面所示的靜態綁定。

多態無態的


JS內建對象

Object對象.constructor,返回代碼? ? Math? ? Date? String? Array? Boolean? Number


系統函數

URL:統一資源定位

URI:統一資源標識符

都能表示網絡資源但前者可以獲取資源

eval();


JS事件驅動機制

document.getElementById(“id號”);

-c→ C


DOM

刪除p標簽:先獲取父節點 再刪除子節點

onsubmit詢問是否提交表單

window.setInterval(“方法”,毫秒)? 每隔多少毫秒 調用一次方法

open(“網站”, “_self”)不新建的打開網站

span.innerText



History列表

Location對象

Navigator對象

Screen對象

Event對象? 事件

Document對象常用函數

document.createElement(“a”)創建一個標簽


了解:Tomcat WebSphere WebLogic

Tomcat:入門級服務器,支持JSP Servlet

WebSphere: IBM專業級應用服務器,支持JSP Servlet 數據庫連接池管理 EJB容器等

WebLogic:世界第一應用服務器,支持數據庫連接池 EJB容器 集群管理


Servlet與CGI(通用網關接口)的區別

Servlet是通過多線程的方法運行service的,一個實例服務于多個請求,實例一般不銷毀。CGI是每次請求都會創建新的進程,服務完后就銷毀


接收、處理、響應

Servlet:

servlet在Web服務器的運行過程:裝入→→初始化→→調用→→銷毀

主要體現在:init()service()destory()

加載和實例化:Servlet容器負責加載和實例化Servlet

1、初始化:init()? 讀取配置信息、初始化參數等,在Servlet生命周期中只執行一次。

2、調用:service()? ServletRequest請求對象和ServletResponse響應對象, 此外還可調用doGet()、doPost()方法來處理請求。

3、銷毀:destory()? 在Servlet生命周期中只執行一次,結束時。


配置:

1、創建一個java工程

2、搭建javaweb框架

①在項目里面創建一個文件夾webroot

②在webroot中創建WEB-INF的文件夾

③在WEB-INF中創建classes和lib

3、修改項目的編譯路徑(把以前編譯到bin目錄改為WEB-INF下的classes目錄)

右鍵工程文件,build-path,進去選source 選擇classes,classes會消失

4、從服務器的根路徑中找到lib,然后再從lib中找到servlet-api.jar

拷貝到WEB-INF下的lib中,然后在該文件上右鍵 選擇build-path →add to build

5、從服務器根目錄中找到webapps,打開找到root,在找到WEB-INF 把其中的web.xml拷貝到WEB-INF目錄下。

6、在web.xml文件夾中配置外界訪問的servlet,添加如下代碼:

thing//thing鏈接下面的thing

/nice//nice是將來瀏覽器訪問的字符串

thing

ServletText//ServletText是src下的全限定名


7、告訴服務器要到指定的目錄去自動部署項目,找到服務器根目錄中的conf中的server.xml

在Host標簽之間添加如下代碼:

path中放的是上下文路徑 可忽略?

8、訪問:http://ip:port/上下文路徑/資源名稱(就是是哪個面的nice)

//給用戶訪問資源提供接口

<servlet-name>ming

/search 可以直接寫多個

//根據名稱找到具體的服務類



HTTPServlet類:專門處理HTML表單(FROM),不必重寫父類的init()方法和destory()方法。

缺省的service()方法可以調用與HTTP請求方式相應的doXxx()功能。

get方法:數據量小、沒有安全性考慮? post方法:數據量大 有安全放面考慮


當服務器調用Servlet的service() doGet() doPost()方法時,均需要請求和響應對象作為參數。


GET POST請求參數的亂碼:字符流兩次修改編碼 字節流一次

響應頁面的亂碼

一:請求參數的亂碼

GET:根據本來的編碼(ISO-8859-1)獲取其字節數組,再把字節數組按照我們的編碼(UTF-8)來編碼

? POST:同樣擁有GET的方式; 設置request.setCharactorEncoding("你的編碼");

二:響應頁面的亂碼

GET POST:

1):字節流

①:我們自己要用給瀏覽器傳輸什么編碼的數據(如:utf-8)

②:告訴瀏覽器使用什么編碼解析數據(要和上面的utf-8一致)

2):字符流

①:我們自己要用給瀏覽器傳輸什么編碼的數據(如:utf-8)


action:填寫提交的URI


Cookie:一種用于保留用戶操作信息的客戶端技術

步驟:new一個cookie ,添加到響應里去? ? ? ? ? ?

set-cookie和cookie 原理

更新cookie

cookie.setPath(“/”);? cookie.setDomain();


編碼URLEncoder

解碼URLDecoder


Session:一種用于保留用戶操作信息的服務端技術

服務器創建session:服務器把創建好的一個對象的地址映射成id,把默認id通過cookie傳遞給瀏覽器

session不傳輸,在服務器內存中開辟空間存放

步驟:請求獲取session,設置session

只需要創建并設置值即可,不需要添加響應中,會自動添加session對象的地址映射id到本次請求的響應頭中

銷毀session和移除session中的屬性


獲取session看其是否有值來判斷需不需要登錄


Servlet頁面間對象傳遞的方式:request、cookie、session、application


注解

1、@webServlet(“/annotation”)? 相當于

多參數:@webServlet(

urlPatterns={“/annotation1”,“/annotation2”}, initParams=@webinitParams{name = ”users”, value = “gyvsxy”}

)

2、在web.xml中將metadata-complete改為false,意味不忽略注解


ServletContext全局應用程序: 全局只有一個Servlet對象。

web.xml中設置?


ServletContext和ServletConfig對比:前者全局應用對象,后者表示Servlet的初始化參數。


URL重定向 :在服務端讓瀏覽器重新跳到指定的頁面

用法:resp.sendRedirect(url);注意:? /? 當前路徑

重定向不能訪問WEB-INF下的文件.


請求轉發:瀏覽器請求一個Servlet里的轉發給另一個Servlet

用法:req.getRequestDispatcher("url").forward(req, resp);


URL重定向和請求轉發:前者改變地址欄地址,可跨域;后者不變,可以訪問WEB-INF下的文件,不可跨域


Servlet三大作用域對象:共享數據

ServletContext

Httpsession

HTTPServletRequest

作用域越來越小


JSP:

xx.jsp→在web.xml找jsp對應的處理類→JSPservlet源程序→xx_jsp.java→xx_jsp.class→返回


xx_jsp→HttpJspBase→HttpServlet(都是繼承)


JSP注釋是隱式注釋和HTML注釋不同的是:前者不會被發送到客戶端

JSP的java代碼片段和java代碼表達式=和全局代碼片段!

九大內置對象四大作用域


request:客戶端請求,包含GET/POST請求的參數。

response:傳給客戶端的響應

session:與用戶請求相關的對象,用于保存該用戶的信息,跟蹤用戶的操作狀態。

application:Servlet中正在執行的內容,一直存在到服務器關閉。

out:用來傳送響應的輸出

pagecontext:管理網頁的屬性

config:取得服務器的配置信息

page:JSP頁面本身

exception:針對錯誤頁面,沒有被捕捉的異常就會生成此對象


JSP、Servlet的異同:都可以加載成.class文件,JSP的本質就是一個Servlet,不同點:一個用于前端,一個用于后臺


EL

語法:${}

作用:獲取作用域中的共享數據

注:依次從pageContext,request,session,application(由小到大)

EL獲取指定作用域:${requestScope.}

找不到返回空字符串與findAttribute的不同點

${param.key}對應getParameter


EL訪問對象

注:屬性(property)=字段(field)+getset方法

${對象.屬性}


set/getAttribute設置獲取作用域的值 findAttribute依次尋找

getParameter獲取請求參數中的值


JSTL:JSP Standard Tag Library 即JSP標準標簽庫

作用:替代java的邏輯操作代碼

用法:先導入taglib指令?

單條件判斷

<% %>

多條件匹配

<% %>

循環

<%循環體%>${}

foreach

<% %>${}

格式化日期:

<%%>


分頁

自定義(pageCount pageSize)


過濾器過濾請求

接口Filter

name

/* 或者/xxx/*



根據請求類型過濾



較好用函數:

JS:

confirm():如果用戶點擊確定按鈕,則confirm()返回 true。如果點擊取消按鈕,則 confirm() 返回 false。



Struts2

基于MVC設計模式的輕量級JavaEE框架,本質上相當于一個Servlet(控制層)


原生mvc模式使用jsp+javabean+servlet來實現。jsp充當v,javabean充當m,servlet充當c。


作為控制器來建立模型和視圖的數據交互

基于攔截器


運行原理:客戶端發送請求經過核心過濾器,然后詢問ActionMapper需要調用哪個Action,如果需要,核心過濾器會把請求交給ActionProxy代理,代理通過配置管理器加載Struts.xml文件,找需要調用的Action類,ActionProxy會創建Action類的實例,調用對應的方法,在調用之前依次調用所有配置的攔截器,執行完Action返回字符串,實例會根據字符串查Result,再經過所有配置的攔截器返回響應,響應經過核心過濾器返回給客戶端。


DTD獲取本地xml提示? 需聯網? 如果沒網需手動配置本地DTD


Struts2配置常量(如編碼集、擴展名、開發模式、動態方法調用)有三種方式:

①struts.xml中的②struts.properties中③web.xml的


###是properties的注釋信息


核心組件:Action和攔截器


包配置:? name唯一? 默認struts-default,這樣該包中的action就具有了Struts2默認的攔截器等功能。? 抽象包不能寫action

包含配置:


實現Action控制類的三種方式:

①直接寫類名(POJO)②繼承ActionSupport③實現Action接口


配置Action:

不寫method會根據反射執行execute方法

寫方法調用方法


寫action的三種方法:

直接寫

通配符法: 1表示從第一個*開始? *→方法名

動態方法調用:常量配置里默認關閉動態方法調用


的name可用在form表單的action


下的 全局的

標簽的type屬性值默認是dispatcher,實際上就是轉發


訪問Servlet API

①ActionContext.getContext()? 分別可用在request、application、session

②通過特定接口ServletRequestAware ServletResponseAware 等

③通過ServletActionContext訪問


Action處理請求參數

①屬性驅動:只需set? ? ? ? 把表單的name作為屬性 getset方法

②對象驅動? 必須set和get? ? 新建類

集合驅動

③實現模型驅動


ServletActionContext封裝了以前的servlet


數據校驗

重寫validate方法中加

if(){this.addFielderror(鍵值)}

s標簽 s:fielderror fieldname=””


避免重復提交


XML配置方式數據校驗

XML名字:Action類名-validation.xml? 與Action類在同一個包下


資源文件

①針對action類

與action在同一個包下

名稱:ActionClassName.properties這個配置文件只對當前action有用

②針對包下的所有action? ? package.properties

this.getText

③struts.properties 全局


攔截器

自定義攔截器實現interceptor

需要在struts.xml中

在package中

//系統的


如果在中設置方法名 忽略攔截方法

通過配置的形式向攔截其中傳遞參數

param參數會在啟動服務器時把其中的參數name通過對應的setter方法傳遞到攔截器中


設置默認攔截器只能有一個

下面的action都可以被攔截


給action單獨用攔截器

在action中加


action之間的傳遞參數

redirect和chain


注解:單個@XXX(“”)多個@XXXS({@xx(“”),@xx(“”)})


JSON

{“key”:”value”,”key2”:”value2”}[{},{}]

JS中加入 $.ajax({})

不跳轉頁面請求數據


Listener監聽器

實現HttpSessionListener? ServletContextListener? RequestListener等等

設置配置


防止表單重復提交

token字符串? 每請求一次都會生成一個字符串 可放在 session、隱藏域


避免表單用戶輸入亂碼

req.setCharacterEncoding(“”);


JavaEE三層:表現層、業務層、持久層


前端控制器:過濾器棧


值棧

用來管理請求數據

生命周期就是一次請求

由root和 Context組成


OGNL對象圖形導航語言

替換EL的

Struts2用OGNL作為默認的表達式語言

OGNL是基于ValueStack數據結構


獲取root中的數據

①對象.getRoot().push(值)

②對象.set(鍵值)?

③private String val=”123”;? public String getVal(){return val;}? ? ? ? ? ? ?

獲取context中的數據

凡是寫在context中的數據 前面要加#? 便于維護

①對象.getContext().put(鍵值)

②context.put(鍵值)


校驗

validate()對應

如果不通過就執行input如果通過 就執行execute的success


標簽


國際化


上傳下載

上傳:①上傳的表單以POST方式 ②提交需要指定編碼為:multipart/from-data;


標簽

不需要再去填寫contextPath

多選框

取setAttribute的值


Hibernate

是一個面向對象的持久化框架

hibernate.cfg.xml

//連接數據庫

true


采用getCurrentSession()創建的Session會綁定到當前的線程中去、而采用OpenSession()則不會。

采用getCurrentSession()創建的Session在commit或rollback后會自動關閉,采用OpenSession()必須手動關閉。

采用getCurrentSession()需要在Hibernate.cfg.xml配置文件中加入如下配置:

如果是本地事物,及JDBC一個數據庫:

thread

如果是全局事物,及jta事物、多個數據庫資源或事物資源:

jta



類和表的映射配置文件:

xx.hbm.xml

//id是類中的屬性? column是表中的字段

//設置主鍵


Transaction對事物的封裝


save方法的執行流程

1、新建一個configuration對象

2、利用方法configuration.configure()加載hibernate.cfg.xml

3、根據xml中的連接數據庫的信息連接數據庫,并配置相關的property屬性

4、加載解析映射文件,把映射文件的信息保存在configuration對象中

5、根據config創建sessionfactory對象,并創建session對象

6、執行保存事件


saveOrUpdate()方法

persist()持久化? JPA規范里面的? 與save()有點相同

merge()與update()有點相同


load()與get()? load()動態的新建一個類:

Student stu =(Student) session.load(Student.Class, 3);多態

load():延遲加載? load()方法返回的是一個代理(代理只有一個ID),只有等真正使用該對象屬性的時候才會發出sql語句

如果數據庫中沒有對應的記錄,get()方法返回的是null.而load()方法出現異常ObjectNotFoundException


一級緩存

緩存:提高效率


在hibernate.cfg.xml中的

#hibernate.hbm2ddl.auto none/create/create-drop/update/validate


mapping文件獲取屬性是反射:反射不關心訪問權限


OID:對象中對應數據表的主鍵的屬性

自然主鍵(使用對象本身的屬性作為主鍵)代理主鍵(序號)

主鍵生成策略:

assigned:手動設置主鍵

uuid:hibernate幫忙生成的

increment:查最大id然后加1

identity:數據庫需支持自增

native:使用數據庫支持的生成主鍵方式


持久化對象的狀態

有沒有被管理有沒有id數據庫中有沒有值

瞬時態

持久態

脫管態

提交之前,delete之后,數據處于計劃刪除


session管理對象的狀態 事務負責提交數據操作


事務處理方式(當多個事務同時訪問數據庫中的相同數據)

悲觀鎖:在每次操作數據時,悲觀的認為會有其他事務來操作同一數據。加鎖(數據庫層次)

樂觀鎖:認為許多事務同時操作同一數據的情況很少發生。數據版本標識鎖定機制(非庫層次)


對象的關系

依賴關系

關聯關系

聚合關系

組合關系


關聯關系:一對多多對一多對多

多對一:

在多中:設置一的私有屬性

一對多:

set:

在一中:Set<>? = new HashSet<>();

在一的xml中

list:


反轉操作:

在雙向關聯中,一方的中加入inverse=”true”可以反轉維護關系,即此方放棄對另一端關系的維護,而由對方來維護關系


一對多多對一雙向:

刪除時注意set里的inverse為false?

cascade級聯刪除:save-update、delete、all、delete-orphan、all-delete-orphan


一對一:先保存xx


多對多:兩個set

注意中間表的主鍵重復需要把一個主鍵設置為


組件映射



SQL

HQL

Criteria


分頁

HQL不支持 limit關鍵字

query.setFirstResult()

query.setMaxResults()


位置占位符?

名稱占位符:xxx


Collection


query.uniqueResult()返回個數


SELECT NEW LIST(XX,XX,XX) FROM

SELECT NEW MAP(XX,XX,XX) FROM


session.getNameQuery()

主要是為了一些經常使用,在類的映射文件中添加一個標簽“query”,屬性name來指這個NameQuery的名字,在XML的innerText中寫HQL語句


Spring

面向接口編程解耦

IoC/DI控制反轉? 依賴注入

IoC控制反轉:說的是創建對象實例的控制權從代碼控制剝離到IoC容器控制,實際就是你在xml文件控制,側重于原理。

DI依賴注入:說的是創建對象實例時,為這個對象注入屬性值或其它對象實例,側重于實現。

IoC是目的,di是手段。IoC是指讓生成類的方式由傳統方式(new)反過來,既程序員不調用new,需要類的時候由框架注入(DI),是同一件不同層面的解讀。


Bean:放在Spring容器中的對象

bean中的屬性:

id: bean的全局唯一標識

lazy-init=”true/false”告訴容器,不要在容器啟動的時候實例化bean


bean的作用域? scope=””?

singleton單例模式對于無會話狀態的bean(Dao、Service)來說是最理想的選擇?

prototype原型類型,每次都會創建個新的對象 適合需要保持會話狀態的bean(struts2的action)


bean的生命周期

singleton作用域下的bean的聲明周期受spring容器的管理,

prototype作用域下的bean,容器只負責創建,管理交給客戶端代碼


bean里面的constructor-arg:可傳入構造參數 index type ref value


bean里面的property 用于調用bean實例中的setter方法

name和value? name有對應的屬性,不是隨便寫

name和ref? ref=”xx”:是把id為xx的bean傳過來


在面向對象的程序中,想要使用某個對象,就需要先實例化這個對象

bean的實例化方法:

1、構造器實例化? 通過實現類的默認無參構造器對bean進行實例化? 傳統bean的配置方式

2、靜態工廠方法生產bean? class屬性為對應的工廠實現類? factory-method

3、實例工廠方法? 建立工廠bean,再通過factory-bean建調用工廠bean的bean,再通過factory-method指定實例化bean的方法


AOP

所有事務從Dao剝離,放在service層

靜態代理

動態代理:

①通過實現接口的方式? 代理類是對dao實現類的增強

Handler implements invocationHandler? ? ? proxy.newProxyInstance

public Object invoke(Object proxy, Method method, Object[] args)

method.invoke(obj, args);

proxy:代理方法調用的代理實例

method:

②通過繼承的方式Enhancer

cglib? javassist:代碼生成的庫


AOP的xml和注解Annotation

xml

Annotation: point連貫方法

AOP:在某些事情即將發生的時候做某些事


XML

解析方式:DOM解析:把整個XML文件加載進內存進行解析

SAX解析:通過流的形式一行行解析


xmlns:xmlnamespace


dtd和schema的后綴xsd


SpringMVC

分離了控制器,模型對象,分派器,處理程序對象角色


DispatcherServlet:前端控制器,用于接收請求。

HandlerMapping接口:用于處理請求的映射。

DefaultAnnotationHandlerMapping:HandlerMapping接口的實現,用于把一個URL映射到具體的Controller類上。

HandlerAdapter接口:用于處理請求的映射。

AnnotationMethodHandlerAdapter:HandlerAdapter接口的試下,用于把一個URL映射到對應Controller類的某個方法上。

ViewResolver接口:用于解析View。

InternalResourceViewResolver:ViewResolver接口的實現,用于把ModelAndView的邏輯視圖名解析為具體的View。


加載優先級


在xml配置了這個標簽后,spring可以自動去掃描base-pack下面或者子包下面的Java文件,如果掃描到有@Component @Controller@Service等這些注解的類,則把這些類注冊為bean


MyBatis(非標準的ORM框架)基于JDBC

做數據持久化(其他三種:流JDBC Hibernate(Hibernate是標準的對象關系映射ORM))

標準的ORM框架:

實現:

連接數據庫:SqlSessionFactoryBuilder Reader SqlSessionFactory SqlSession

xml:

xxxMapper.xml:domain的類的映射文件

在mybatis中,映射文件中的namespace是用于綁定Dao接口的,即面向接口編程。

parameterType:在映射文件中通過parameterType指定輸入 參數的類型? 可省略

resultType:在映射文件中通過resultType指定輸出結果的類型

#{}接收輸入參數,類型可以是簡單類型,pojo、hashmap

keyProperty keyColumn use




Apache Shiro

易使用的Java安全框架,進行認證、授權、加密和會話管理

web.xml配置shiroFilter(放在最上面)?

applicationContext-shiro.xml,對shiro進行配置

applicationContext.xml中引入該文件


JQuery EasyUI

實現CRUD DataGrid

使用的插件:

datagrid:向用戶展示列表數據。

dialog:創建或編輯一條單一的用戶信息。

form:用于提交表單數據。

messager:顯示一些操作信息。


FormData

XMLHttpRequest Level 2添加了一個新的接口FormData.利用FormData對象,我們可以通過JavaScript用一些鍵值對來模擬一系列表單控件,我們還可以使用XMLHttpRequest的send()方法來異步的提交這個"表單".比起普通的ajax,使用FormData的最大優點就是我們可以異步上傳一個二進制文件.


進度條

基于multipartResolver多部解析器的上傳進度條

①寫一個進度條的實體類

②實現ProgressListener

③繼承CommonsMultipartResolver

④在springmvc的xml中重新配置自己的解析器

⑤編寫Controller

⑥開發jsp、js頁面


JQuery

XMLHttpRequest對象的 onload 回調函數是在異步請求加載完成后所執行的函數,當JavaScript監測到請求的數據全部傳輸完成后就會觸發該函數。而 open() 函數設置異步請求的 method、URL 和同步方式等參數,執行 open() 后再執行 send() 函數才開始向服務器發送請求。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容