2020-12-25

javaweb復習


<!--外部引入

? ? ? ? 注意:script必須成對出現

? ? -->

<script src="js/hj.js"></script>

?

<!--不用顯示定義type,也默認就是javaScript-->

<script type="text/javascript"></script>


Tomcat配置

1.omcat配置

1.可以配置主機名稱,可以配置端口號

2.Tomcat核心配置文件在conf文件里面的server.xml里面

? 2.IDEA中配置Tomcat

第一步:點擊

第二歩:點擊 + 選擇Tomcat

第三部 點擊

第四歩 解決報錯? 就一個/ = localhost:8080 加別的名字 就在8080后面加上你配置的名字

高難度面試題

請你談談網站是如何進行訪問的?

1.輸入一個域名:回車

2.檢查本機的:C:\Windows\System32\drivers\etc\hosts配置文件下有沒有這個域名映射

1.有:直接返回對應ip地址,這個地址中,有我們需要訪問的web程序,可以直接訪問

2.沒有:去DNS服務器找,找到到返回,找不到返回找不到

-

Http

1.http請求

客戶端--發請求--(request)--服務器

百度:

RequestURL:https://www.baidu.com/ 請求地址

RequestMethod:GET? ? get方法post方法

StatusCode:200OK(fromprefetchcache)狀態碼200

RemoteAddress:180.101.49.12:443?

1、請求行

請求行中的請求方式:GET

請求方式: Get ,Post

get:請求能夠攜帶參數比較少,大小有限制,會在瀏覽器地址欄展示數據,不安全,但高效

post:請求能夠攜帶參數沒有限制,大小沒有限制,不會在瀏覽器地址欄展示數據,安全,但不高 效

2、消息頭

2.http響應

服務器--響應--客戶端

百度:

?

Cache-Control:private

Content-Encoding:gzip

Content-Type:text/html;charset=utf-8

Date:Mon,18May202007:50:34GMT

Expires:Mon,18May202007:50:30GMT

1.響應體

2.響應狀態嗎

200:請求響應成功

3xx:請求重定向

重定向:你重新到我給你新位置去

4xx:找不到資源 404

資源不存在:

5xx:服務器代碼錯誤

#####? 兩個時代

http1.0:客戶端可以與web服務器連接后,只能獲得一個web資源,斷開鏈接,

http2.0:客戶端可以與web服務器連接后,只能獲得多個web資源

常見面試題

當你的瀏覽器中地址欄輸入地址并回車的一瞬間到頁面能夠展示數據回來,經歷了什么,

1.Servlet

Servlet就是sun公司開發動態web的一門技術

sun在這些APl中提供了一個接口,Servlet,如果你想開發一個Servlet程序,只需要完成兩個步驟

1.編寫一個類,實現Servlet接口

2.把開發好的JAVA類部署到web服務器中,

1.2 HelloServlet

1.1構建一個普通項目

1.2創建一個類,extends 繼承 HttpServlet

1.3重寫接口中的 doget dopost 方法

1.4編寫Servlet的映射文件 web.xml

1.5配置Tomcat測試即可

1.4Mapping問題

1.一個Servlet可以指定一個映射路徑

<!--Servlet請求路徑-->

<servlet-mapping>

<servlet-name>hello</servlet-name>

<url-pattern>/hello</url-pattern>

</servlet-mapping>

2.一個Servlet可以指定多個映射路徑

<servlet-mapping>

<servlet-name>hello</servlet-name>

<url-pattern>/hello1</url-pattern>

</servlet-mapping>

<servlet-mapping>

<servlet-name>hello</servlet-name>

<url-pattern>/hello2</url-pattern>

</servlet-mapping>

3.一個Sevlet可以指定通用映射路徑 /*=任何路徑

<servlet-mapping>

<servlet-name>hello</servlet-name>

<url-pattern>/hello/*</url-pattern>

</servlet-mapping>

4.指定一些后綴或者前綴等等.

<!--可以自定義后綴名

注意 *. 前面不能加路徑? /=只要是*.后面的內容

-->

<servlet-mapping>

<servlet-name>hello</servlet-name>

<url-pattern>*.xhf</url-pattern>

</servlet-mapping>

5.優先級問題

指定了固有的映射路徑優先級最高,如果找不到就會走默認的

##### ServletContext

1.調用this.getServletContext 使用方法

2.Servletcontext作用:共享數據 其他的Servlet都能獲取這個數據

2.獲取初始參數

1.servletContext.getInitParameter

3.請求轉發

1.request.getRequestDispatcher().forward();

4.讀取資源文件

1.在resources下建一個porperties配置文件

思路:需要一個文件流去讀取文件 然后打印即可

@Override

protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{

//獲取io流路徑

InputStreamresourceAsStream=this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");

//創建properties對象

Propertiesproperties=newProperties();

properties.load(resourceAsStream);//讀取路徑下的配置文件

Stringusername=properties.getProperty("username");

Stringpassword=properties.getProperty("password");

//輸出到頁面

resp.getWriter().print(username+":"+password);

?? }

HttpServletResponse

1.web服務器接受到客戶端的http請求,針對這個請求,分別創建一個代表請求的httpServletRequest

對象,代表響應的HttpServletResponse對象

2.如果要獲取客戶端請求過來的參數:找httpServletRequest

如果要給客戶端響應一些信息:找httpServletResponse

1、簡單分類

負責向瀏覽器發送數據的方法

servletOutputstreamgetOutputstream()throwsIOException;

Printwritergetwriter()throwsIOException;

負責向瀏覽器發送響應頭的方法

voidsetCharacterEncoding(Stringvar1);

voidsetContentLength(intvar1);

voidsetContentLengthLong(longvar1);

voidsetContentType(Stringvar1);

voidsetDateHeader(Stringvarl,longvar2)

voidaddDateHeader(Stringvar1,longvar2)

voidsetHeader(Stringvar1,Stringvar2);

voidaddHeader(Stringvar1,Stringvar2);

voidsetIntHeader(Stringvar1,intvar2);

voidaddIntHeader(Stringvarl,intvar2);

2、下載文件

1.獲取下載文件的路徑

2.下載中的文件名稱

3.設置想辦法讓瀏覽器能夠支持下載我們需要的東西

4.獲取文件下載流

5.創建緩沖區

6.獲取OutputStream對象

7.FileOutputStream流寫入到bufer緩沖區

8.使用OutputStream將緩沖區中的數據輸出到客戶端!

@Override

protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{

// 1. 要獲取下載文件的路徑

StringrealPath="F:\\班級管理\\西開【19525】\\2、代碼\\JavaWeb\\javaweb-02-servlet\\response\\target\\classes\\秦疆.png";

System.out.println("下載文件的路徑:"+realPath);

// 2. 下載的文件名是啥?

StringfileName=realPath.substring(realPath.lastIndexOf("\\")+1);

// 3. 設置想辦法讓瀏覽器能夠支持(Content-Disposition)下載我們需要的東西,中文文件名URLEncoder.encode編碼,否則有可能亂碼

resp.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode(fileName,"UTF-8"));

// 4. 獲取下載文件的輸入流

FileInputStreamin=newFileInputStream(realPath);

// 5. 創建緩沖區

intlen=0;

byte[]buffer=newbyte[1024];

// 6. 獲取OutputStream對象

ServletOutputStreamout=resp.getOutputStream();

// 7. 將FileOutputStream流寫入到buffer緩沖區,使用OutputStream將緩沖區中的數據輸出到客戶端!

while((len=in.read(buffer))>0){

out.write(buffer,0,len);

?? }

?

in.close();

out.close();

}

4、實現重定向


使用場景:用戶登錄

方法:Response.sendRedirect("重定向路徑")

面試題:請你聊聊重定向和轉發的區別?

1他們的相同點:頁面都會實現跳轉

2.不同點: request 請求轉發的時候,瀏覽器地址欄不會發生改變 狀態欄是 307

response 重定向的時候,瀏覽器地址欄會發生改變 狀態欄是302

重定向到jsp頁面

index.jsp

? ? ? ? ? ? <html>

<body>

? ? <h2>Hel1o World!</h2>


? ? 《%--這里超交的路徑,需要尋找到項目的路徑--%>

? ? <%--${pageContext.request,contextPath}代表當前的項目--%>

? ? <formaction="${pageContext. request.contextPath}/login"method="get">

? ? ? ? 用戶名:<inputtype="text"name="username"><br>

? ? ? ? 密碼:<inputtype="password"name="password"><br>

? ? ? ? <inputtype="submit">

? ? </form>

?

</body>

RequestTest.java

? ? publicclassRequestTestextendsHttpServlet{

@Override

protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{

//處理方求

Stringusername=req.getParameter(s:"username");

Stringpasswordrea.getParameter(s:"password");

?

System.out.println(username+":"+password);

?

resp.sendRedirect(s:"/r/success.jsp");

HttpServletRequest

httpServletRequest代表客戶端請求,用戶通過http協議訪問服務器,http請求中的所有信息會被封裝到httpServletRequest,通過這個httpservletrequest的方法,獲取客戶端所有信息

1、獲取參數

request.getParamter(String s) String 獲取單條數據

request.getParmaterValues(String s)String[] 獲取多條數據

Cookie、Session

會話:用戶打開一個瀏覽器。點擊了很多鏈接,訪問多個web資源,關閉瀏覽器,這個過程可以稱之為會話

一個網站。怎么證明你訪問過

客戶端 服務器

1.服務器給客戶端一個 信件,客戶端下次訪問服務端帶上信件就可以了,cookie

2.服務器登記你來過了,下次你來過的時候我來匹配你:Seesion

保存會話的兩種技術

cookie

客戶端技術(響應,請求)

session

服務器技術,利用這個技術,可以保存用戶的會話信息,我們可以把會話信息或者數據放在Session中

舉例:網站登錄后,你下次不用在登錄了,第二次訪問就直接登錄上去,

Cookie

1.從請求中拿到cookie信息

2.服務器響應給客戶端cookie

3.cookie一些常用方法

Cookie[]cookies=req.getCookies();//獲得Cookie

cookie.getName();//獲得cookie中的key

cookie.getValue();//獲得cookie中的vlaue

newCookie("lastLoginTime",System.currentTimeMillis()+"");//新建一個cookie

cookie.setMaxAge(24*60*60);//設置cookie的有效期

resp.addCookie(cookie);//響應給客戶端一個cookie

4.Cookie細節

一個cookie只能保存一個信息

一個web站點可以給瀏覽器發送多個cookie,最多存放20個cookie

Cookie大小有限制4kb

300個cookie瀏覽器上限

5.刪除cookie

不設置有效期,關閉瀏覽器,自動失效

設置有效期時間為0

編碼 URLEncoder.encode("加油","utf-8")

解碼:URLDecoder.decode(cookie.getValue(),"UTF-8")

Session(重點)

什么是session

服務器會給每個用戶(瀏覽器)創建一個Session對象

一個Session獨占一個瀏覽器,只要瀏覽器沒有關閉,這個Session就存在

用戶登錄之后,整個網站都可以訪問,保存用戶信息,保存購物車信息

Session和cookie的區別

cookie是把用戶的數據寫給用戶的瀏覽器,瀏覽器保存(可以保存多個)

session把用戶的數據寫到用戶獨占的session中,服務器端保存(保存重要信息,減少服務器資源的浪費)

Session對象由服務端創建

使用場景:

保存一個登錄用戶的信息;

購物車信息;

在整個網站中經常會使用的數據,我們將它保存在Session中;

使用session

@Override

protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{


//解決亂碼問題

req.setCharacterEncoding("UTF-8");

resp.setCharacterEncoding("UTF-8");

resp.setContentType("text/html;charset=utf-8");


//得到Session

HttpSessionsession=req.getSession();

//給Session中存東西

session.setAttribute("name",newPerson("秦疆",1));

//獲取Session的ID

StringsessionId=session.getId();

?

//判斷Session是不是新創建

if(session.isNew()){

resp.getWriter().write("session創建成功,ID:"+sessionId);

}else{

resp.getWriter().write("session以及在服務器中存在了,ID:"+sessionId);

? ? ?? }

?

//Session創建的時候做了什么事情;

// ? ? ?? Cookie cookie = new Cookie("JSESSIONID",sessionId);

// ? ? ?? resp.addCookie(cookie); ? ? ?

//得到Session

HttpSessionsession=req.getSession();

?

Personperson=(Person)session.getAttribute("name");

?

System.out.println(person.toString());

?

HttpSessionsession=req.getSession();

session.removeAttribute("name");

//手動注銷Session

session.invalidate();


會話自動過期:web.xml配置

<!--設置Session默認的失效時間-->

<session-config>

<!--15分鐘后Session自動失效,以分鐘為單位-->

<session-timeout>15</session-timeout>

</session-config>

JSP

1、什么是JSP

java Servlet Pages:java服務端頁面,也和Servlet一樣,用于動態Web技術

特點:

寫JSP就像在寫HTML

區別:

HTML只給用戶提供靜態的數據

JSP頁面中可以嵌入JAVA代碼,為用戶提供動態數據

2.JSP原理

思路:JSP到底是怎么執行的

代碼層面沒有任何問題

服務器內部工作

原理:

tomcat中有一個work目錄:

IDEA中使用TOmcat的會在tomcat中生產一個work目錄


發現頁面轉變成了Java程序!

瀏覽器向服務器發送請求,不管訪問什么資源,其實都在訪問Servlet

JSP最終會被轉換成一個java類

JSP本質上就是個Sevlet

//初始化

publicvoid_jspInit() {


? }

//銷毀

publicvoid_jspDestroy() {

? }

//JSPService

publicvoid_jspService(.HttpServletRequestrequest,HttpServletResponseresponse)

?

2.內置一些對象

finaljavax.servlet.jsp.PageContextpageContext;//頁面上下文

javax.servlet.http.HttpSessionsession=null;//session

finaljavax.servlet.ServletContextapplication;//applicationContext

finaljavax.servlet.ServletConfigconfig;//config

javax.servlet.jsp.JspWriterout=null;//out

finaljava.lang.Objectpage=this;//page:當前

HttpServletRequestrequest//請求

HttpServletResponseresponse//響應

3.以上的這些個對象我們可以在JSP頁面中直接使用!


在jsp頁面中:

只要是java代碼就會原封不動的輸出

如果HTML代碼,就會被轉換為

out.write("<html>\r\n");

JSP聲明

<%!

static{

System.out.println("Loading Servlet!");

}

?

privateintglobalVar=0;

?

publicvoidkuang(){

System.out.println("進入了方法Kuang!");

}

?

JSP聲明,會被編譯到,JSP生成java類的中,其他的,就會被生產到jspService方法中

JSP的注釋,不會在客戶端顯示,HTML就會

JSP指令

<%@pageargs.... %>

<%@includefile=""%>

?

<%--@include會將兩個頁面合二為一--%>

?

<%@includefile="common/header.jsp"%>

<h1>網頁主體</h1>

?

<%@includefile="common/footer.jsp"%>

?

<hr>

?

?

<%--jSP標簽

jsp:include:拼接頁面,本質還是三個

--%>

<jsp:includepage="/common/header.jsp"/>

<h1>網頁主體</h1>

<jsp:includepage="/common/footer.jsp"/>

##### 9大內置對象

PageContext 存東西

Request 存東西

Response 響應消息

Session 存東西

Application 【ServletContext】存東西

Config 【ServletConifg】

out 輸出

pageContext.setAttribute("name1","秦疆1號"); //保存的數據只在一個頁面中有效

request.setAttribute("name2","秦疆2號"); //保存的數據只在一次請求中有效,請求轉發會攜帶這個數據

session.setAttribute("name3","秦疆3號"); //保存的數據只在一次會話中有效,從打開瀏覽器到關閉瀏覽器

application.setAttribute("name4","秦疆4號");? //保存的數據只在服務器中有效,從打開服務器到關閉服務器

request:客戶端向服務器發送請求,產生的數據,用戶看完就沒用了,比如:新聞,用戶看完沒用的!

session:客戶端向服務器發送請求,產生的數據,用戶用完一會還有用,比如:購物車;

application:客戶端向服務器發送請求,產生的數據,一個用戶用完了,其他用戶還可能使用,比如:聊天數據;

jsp標簽 jstl標簽 el表達式

<!-- JSTL表達式的依賴 --><dependency>? ? <groupId>javax.servlet.jsp.jstl</groupId>? ? <artifactId>jstl-api</artifactId>? ? <version>1.2</version></dependency><!-- standard標簽庫 --><dependency>? ? <groupId>taglibs</groupId>? ? <artifactId>standard</artifactId>? ? <version>1.1.2</version></dependency>

EL表達式: ${ }

獲取數據

執行運算

獲取web開發的常用對象

JSTL標簽庫需要導入 taglib

JSTL標簽庫的使用就是為了彌補HTML標簽的不足;它自定義許多標簽,可以供我們使用,標簽的功能和Java代碼一樣

MVC三層架構

什么是MVC

MVC:Model view Controller 模型 視圖 控制器

架構:沒有什么是加一層解決不了的!

原理圖

Model:

業務處理:Service?

數據持久層:CRUD Dao層 操作數據庫

View (JSP)

展示數據 jsp頁面

提供鏈接發起Servlet請求(a form 。。。)

Controller (Servlet)

接受用戶請求:

交給業務層處理 dao 和service

控制視圖跳轉

Filter(重點 過濾器)

比如一些安全框架,技術的底層就是用Filter來實現

Filter:過濾器,用來過濾網站的數據:

處理中文亂碼

判斷登錄驗證


Filter開發步驟

1.導包? JAVAx.servlet 導入這個包

2.編寫過濾器

3.實現Filter接口,重寫對應的方法即可

```java

publicclassCharacterEncodingFilterimplementsFilter{


//初始化:web服務器啟動,就以及初始化了,隨時等待過濾對象出現!

publicvoidinit(FilterConfigfilterConfig)throwsServletException{

System.out.println("CharacterEncodingFilter初始化");

? ?? }


//Chain : 鏈

/*

1. 過濾中的所有代碼,在過濾特定請求的時候都會執行

2. 必須要讓過濾器繼續同行 因為可以有多個Filter 每個Filter過濾不同的問題

chain.doFilter(request,response);

*/

publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{

request.setCharacterEncoding("utf-8");

response.setCharacterEncoding("utf-8");

response.setContentType("text/html;charset=UTF-8");


System.out.println("CharacterEncodingFilter執行前....");

chain.doFilter(request,response);//讓我們的請求繼續走,如果不寫,程序到這里就被攔截停止!

System.out.println("CharacterEncodingFilter執行后....");

? ?? }


//銷毀:web服務器關閉的時候,過濾器會銷毀

publicvoiddestroy() {

System.out.println("CharacterEncodingFilter銷毀");

? ?? }

? }

4.在web.xml中配置 Filter

<filter>

<filter-name>CharacterEncodingFilter</filter-name>

<filter-class>com.kuang.filter.CharacterEncodingFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>CharacterEncodingFilter</filter-name>

<!--只要是/servlet的任何請求,會經過這個過濾器-->

<url-pattern>/servlet/*</url-pattern>

<!--<url-pattern>/*</url-pattern>-->

<!-- 別偷懶寫個 /* -->

</filter-mapping>

### 監聽器

實現一個監聽器的接口;(有n種監聽器)

1.編寫一個監聽器

實現的接口


//統計網站在線人數 : 統計session

publicclassOnlineCountListenerimplementsHttpSessionListener{

?

//創建session監聽: 看你的一舉一動

//一旦創建Session就會觸發一次這個事件!

publicvoidsessionCreated(HttpSessionEventse) {

ServletContextctx=se.getSession().getServletContext();

?

System.out.println(se.getSession().getId());

?

IntegeronlineCount=(Integer)ctx.getAttribute("OnlineCount");

?

if(onlineCount==null){

onlineCount=newInteger(1);

}else{

intcount=onlineCount.intValue();

onlineCount=newInteger(count+1);

? ? ?? }

?

ctx.setAttribute("OnlineCount",onlineCount);

?

?? }

?

//銷毀session監聽

//一旦銷毀Session就會觸發一次這個事件!

publicvoidsessionDestroyed(HttpSessionEventse) {

ServletContextctx=se.getSession().getServletContext();

?

IntegeronlineCount=(Integer)ctx.getAttribute("OnlineCount");

?

if(onlineCount==null){

onlineCount=newInteger(0);

}else{

intcount=onlineCount.intValue();

onlineCount=newInteger(count-1);

? ? ?? }

?

ctx.setAttribute("OnlineCount",onlineCount);

?

?? }

?

?

/*

Session銷毀:

1. 手動銷毀? getSession().invalidate();

2. 自動銷毀

*/

}

2.在web.xml中注冊監聽器

<listener>

<listener-class>com.kuang.listener.OnlineCountListener</listener-class>

</listener>

JDBC

什么是JDBC

JDBC:就是java鏈接數據庫

需要jar包的支持:

java.sql

javax.sql

mysql.conneter.java...連接驅動(必須導入)

IDEA中連接數據庫:

打開Datasouse 可以百度


JDBC固定步驟:

1.加載驅動

2.鏈接數據庫

3.向數據庫發送sql的對象Stetemnt

4.編寫sql

5.執行sql

6.關閉鏈接

//配置信息

//useUnicode=true&characterEncoding=utf-8 解決中文亂碼

Stringurl="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";

Stringusername="root";

Stringpassword="123456";

?

//1.加載驅動

Class.forName("com.mysql.jdbc.Driver");

//2.連接數據庫,代表數據庫

Connectionconnection=DriverManager.getConnection(url,username,password);

?

//3.編寫SQL

Stringsql="insert into? users(id, name, password, email, birthday) values (?,?,?,?,?);";

?

//4.預編譯

PreparedStatementpreparedStatement=connection.prepareStatement(sql);

?

preparedStatement.setInt(1,2);//給第一個占位符? 的值賦值為1;

preparedStatement.setString(2,"狂神說Java");//給第二個占位符? 的值賦值為狂神說Java;

preparedStatement.setString(3,"123456");//給第三個占位符? 的值賦值為123456;

preparedStatement.setString(4,"24736743@qq.com");//給第四個占位符? 的值賦值為1;

preparedStatement.setDate(5,newDate(newjava.util.Date().getTime()));//給第五個占位符? 的值賦值為new Date(new java.util.Date().getTime());

?

//5.執行SQL

inti=preparedStatement.executeUpdate();

?

if(i>0){

System.out.println("插入成功@");

? ? ?? }

?

//6.關閉連接,釋放資源(一定要做) 先開后關

preparedStatement.close();

connection.close();

?

#### JDBC事務

要么都成功,要么都失敗

案例:轉賬,A--B 轉100 A-100 B+100 如果不開啟事務,服務器如果崩了,那么錢會減少而且到不了B賬戶。那么現在就需要開啟事務來執行,事務一旦開啟,只能提交才能,進行代碼,而且如果中途發生錯誤,可以回滾 到之前的狀態,防止以上問題

ACID原則:保證數據安全

setAutoCommit:開啟事務

commit:提交事物

roliBack:回滾事物

JavaScript

什么是JavaScript

javaScript是一門世界上最流行的語言

一個合格的后端人員,必須精通javaScript

2.1快速編寫一個javaScript

2.1內部標簽

<script>

? ? //....

<script>

2.2外部標簽

? ? ? <!--外部引入

注意:script必須成對出現

-->

<scriptsrc="js/hj.js"></script>

?

<!--不用顯示定義type,也默認就是javaScript-->

<scripttype="text/javascript"></script>

?

瀏覽器調試

2、數據類型

數值,文本,圖形,音頻,視頻

var 變量

number js中不區分 小數和整數, 是個數字類型

字符串 'abc'

邏輯符 && 兩個都為真,結果為真 ll 一個為真,結果為真 !反著來

比較運算符 = 賦值 ==等于(類型不一樣。值一樣。也會判斷true) === 絕對等于(類型一樣,值一樣,結果為 ? ? ? true)

這是一個JS的缺陷,堅持不要使用 == 比較

null 和 undefined

null 空

undefined 未定義

數組

和java中的數組不同,不需要相同類型的,任何類型都可以存儲

如果取數組,數字下標,越界,就會報undefind

對象是大括號,數組是中括號

每個屬性之間使用逗號隔開,最后一個屬性不需要逗號

大小寫轉換

//注意,這里是方法,不是屬性了* student.toUpperCase(); student.toLowerCase();

數組

Array可以包含任意的數據類型

var arr = [1,2,3,4,5,6];//通過下標取值和賦值11、長度

arr.length1注意:假如給arr.lennth賦值,數組大小就會發生變化~,如果賦值過小,元素就會丟失

2、indexOf,通過元素獲得下標索引

arr.indexOf(2)112字符串的"1"和數字 1 是不同的

3、slice()截取Array的一部分,返回的一個新數組,類似于String中substring4、push(),pop()尾部

push:壓入到尾部pop:彈出尾部的一個元素125、unshift(),shift() 頭部

unshift:壓入到頭部shift:彈出頭部的一個元素126、排序sort()

(3)["B","C","A"]arr.sort()(3)["A","B","C"]1237、元素反轉reverse()

(3)["A","B","C"]arr.reverse()(3)["C","B","A"]1238、concat()

注意:concat()并沒有修改數組,只是會返回一個新的數組

9、連接符join打印拼接數組,使用特定的字符串連接

10、多維數組

數組:存儲數據(如何存,如何取,方法都可以自己實現!)

對象

若干個鍵值對

var對象名={

? ? 屬性名:屬性值,

? ? 屬性名:屬性值,

? ? 屬性名:屬性值

}

多個屬性之間用逗號隔開,最后一個屬性不加逗號!

2、使用一個不存在的對象屬性,不會報錯!undefined

3、動態的刪減屬性,通過delete刪除對象的屬性

4、動態的添加,直接給新的屬性添加值即可

5、判斷屬性值是否在這個對象中!xxx in xxx

6、判斷一個屬性是否是這個對象自身擁有的 hasOwnProperty()

流程控制

if判斷

varage=3;

? ? if(age>3){

? ? alert("haha")

}elseif(){

....

? }

Map和Set

ES6的新特性~

MapSet:無序不重復的集合

iterator

es6新特性

作業:使用iterator來遍歷迭代我們Map,Set!遍歷數組遍歷Map遍歷set

函數

絕對值函數

functionabs(){


}

一旦執行到return代表函數結束,返回結果!如果沒有執行return,函數執行完也會返回結果,結果就是undefined

javaScript可以傳任意個參數,也可以不傳遞參數~

方法

方法就是把函數放在對象的里面,對象只有兩個東西:屬性和方法

varfeng={

name:function(){

return1

? }

}

內部對象

Date


轉換時間


JSON

json是什么

JSON是一種輕量級的數據交換格式

簡介和清晰的層次結構使得JSON成為理想的數據交換語言

采用完全獨立于編程語言的文本格式來存儲和表示數據

在 JavaScript 語言中,一切都是對象。因此,任何JavaScript 支持的類型都可以通過 JSON 來表示,例如字符串、數字、對象、數組等。看看他的要求和語法格式:

對象表示為鍵值對,數據由逗號分隔

花括號保存對象

方括號保存數組

JSON鍵值對形式 是用來保存javaScript對象的一種方式,和javaScript對象的寫法也大同小乙

鍵或者值。都用雙引號包裹,鍵和值以:冒號分開? 一組鍵值對以,號分開

JSON字符串和JS對象轉換

JSON和JS對象的區別


JSON是JavaScript對象的字符串表示法,它使用文本表示一個,JS對象信息,本質是一個字符串

用Controller返回JSON數據

Jackson應該是目前比較好的json解析工具了

當然工具不止這一個,比如還有阿里巴巴的 fastjson 等等。

我們這里使用Jackson,使用它需要導入它的jar包;

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-databind</artifactId>

<version>2.9.8</version>

</dependency>

需要兩個新東西,一個是Spring的注解@RespnonseBody,一個是ObjectMapper對象,

@Controller

publicclassUserController{

?

@RequestMapping("/json1")

@ResponseBody

publicStringjson1()throwsJsonProcessingException{

//創建一個jackson的對象映射器,用來解析數據

ObjectMappermapper=newObjectMapper();

//創建一個對象

Useruser=newUser("秦疆1號",3,"男");

//將我們的對象解析成為json格式

Stringstr=mapper.writeValueAsString(user);

//由于@ResponseBody注解,這里會將str轉成json格式返回;十分方便

returnstr;

? }

?

}

注意:瀏覽器可能會出現亂碼情況,我們需要設置他的編碼格式

通過@RequestMaping的produces屬性來實現,修改下代碼

//produces:指定響應體返回類型和編碼

@RequestMapping(value="/json1",produces="application/json;charset=utf-8")

亂碼統一解決

上一種方法比較麻煩,如果項目中有許多請求則每一個都要添加,可以通過Spring配置統一指定,這樣就不用每次都去處理了!

我們可以在springmvc的配置文件上添加一段消息StringHttpMessageConverter轉換配置!

<mvc:annotation-driven>

<mvc:message-convertersregister-defaults="true">

<beanclass="org.springframework.http.converter.StringHttpMessageConverter">

<constructor-argvalue="UTF-8"/>

</bean>

<beanclass="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">

<propertyname="objectMapper">

<beanclass="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">

<propertyname="failOnEmptyBeans"value="false"/>

</bean>

</property>

</bean>

</mvc:message-converters>

</mvc:annotation-driven>

返回json字符串統一解決

在類上直接使用 @RestController ,這樣子,里面所有的方法都只會返回 json 字符串了,不用再每一個都添加@ResponseBody !我們在前后端分離開發中,一般都使用 @RestController ,十分便捷!

@RestController

publicclassUserController{

?

//produces:指定響應體返回類型和編碼

@RequestMapping(value="/json1")

publicStringjson1()throwsJsonProcessingException{

//創建一個jackson的對象映射器,用來解析數據

ObjectMappermapper=newObjectMapper();

//創建一個對象

Useruser=newUser("秦疆1號",3,"男");

//將我們的對象解析成為json格式

Stringstr=mapper.writeValueAsString(user);

//由于@ResponseBody注解,這里會將str轉成json格式返回;十分方便

returnstr;

? }

?

}

輸出時間對象

增加一個新的方法

@RequestMapping("/json3")

public String json3() throws JsonProcessingException {

?

? ObjectMapper mapper = new ObjectMapper();

?

? //創建時間一個對象,java.util.Date

? Date date = new Date();

? //將我們的對象解析成為json格式

? String str = mapper.writeValueAsString(date);

? return str;

}

運行結果 :

默認日期格式會變成一個數字,是1970年1月1日到當前日期的毫秒數!

Jackson 默認是會把時間轉成timestamps形式

解決方案:取消timestamps形式 , 自定義時間格式

@RequestMapping("/json4")

public String json4() throws JsonProcessingException {

?

? ObjectMapper mapper = new ObjectMapper();

?

? //不使用時間戳的方式

? mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);

? //自定義日期格式對象

? SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

? //指定日期格式

? mapper.setDateFormat(sdf);

?

? Date date = new Date();

? String str = mapper.writeValueAsString(date);

?

? return str;

}

運行結果 : 成功的輸出了時間!

抽取為工具類

如果要經常使用的話,這樣是比較麻煩的,我們可以將這些代碼封裝到一個工具類中;我們去編寫下

package com.kuang.utils;

?

import com.fasterxml.jackson.core.JsonProcessingException;

import com.fasterxml.jackson.databind.ObjectMapper;

import com.fasterxml.jackson.databind.SerializationFeature;

?

import java.text.SimpleDateFormat;

?

public class JsonUtils {


? public static String getJson(Object object) {

? ? ? return getJson(object,"yyyy-MM-dd HH:mm:ss");

? }

?

? public static String getJson(Object object,String dateFormat) {

? ? ? ObjectMapper mapper = new ObjectMapper();

? ? ? //不使用時間差的方式

? ? ? mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);

? ? ? //自定義日期格式對象

? ? ? SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);

? ? ? //指定日期格式

? ? ? mapper.setDateFormat(sdf);

? ? ? try {

? ? ? ? ? return mapper.writeValueAsString(object);

? ?? } catch (JsonProcessingException e) {

? ? ? ? ? e.printStackTrace();

? ?? }

? ? ? return null;

? }

}

我們使用工具類,代碼就更加簡潔了!

@RequestMapping("/json5")

public String json5() throws JsonProcessingException {

? Date date = new Date();

? String json = JsonUtils.getJson(date);

? return json;

}

AJAX

AJAX 是一種,無需重新加載整個頁面的情況下,能夠更新部分網頁技術

AJAX 不是一種新的編程語言,而是一種用于創建更好更快以及交互性更強的WEB應用程序技術

在 2005 年,Google 通過其 Google Suggest 使 AJAX 變得流行起來。Google Suggest能夠自動幫你完成搜索單詞。

Google Suggest 使用 AJAX 創造出動態性極強的 web 界面:當您在谷歌的搜索框輸入關鍵字時,JavaScript 會把這些字符發送到服務器,然后服務器會返回一個搜索建議的列表。

就和國內百度的搜索框一樣!

傳統的網頁(即不用ajax技術的網頁),想要更新內容或者提交一個表單,都需要重新加載整個網頁。

使用ajax技術的網頁,通過在后臺服務器進行少量的數據交換,就可以實現異步局部更新。

使用Ajax,用戶可以創建接近本地桌面應用的直接、高可用、更豐富、更動態的Web用戶界面。

利用AJAX可以做:

- 注冊時,輸入用戶名自動檢測用戶是否已經存在

- 登錄時,提示用戶名密碼錯誤

- 等等。。。

-

什么是異步?

異步請求就當發出請求的同時,瀏覽器可以繼續做任何事,Ajax發送請求并不會影響頁面的加載與用戶的操作,相當于是在兩條線上,各走各的,互不影響。

jQuery.ajax

AJAX核心是XMLHttpRequest對象,(XHR),XHR為向服務器發送請求和解析服務器響應提供了接口,能夠以異步的方式從服務器獲取新的數據

JQuery 提供了多個與AJAX有關的方法

通過JQuery.AJAX方法,您能夠使用HTTP Get和HTTp POst 從遠程服務器上請求文本,HTML.XML或者JSON 同時你能夠把這些外部數據直接載入網頁的被元素中,

JQuery 不是生產者 而是搬運工

jQuery Ajax本質就是 XMLHttpRequest,對他進行了封裝,方便調用!

jQuery.ajax(...)

部分參數:

url:請求地址

type:請求方式,GET、POST(1.9.0之后用method)

headers:請求頭

data:要發送的數據

contentType:即將發送信息至服務器的內容編碼類型(默認:"application/x-www-form-urlencoded; charset=UTF-8")

async:是否異步

timeout:設置請求超時時間(毫秒)

beforeSend:發送請求前執行的函數(全局)

complete:完成之后執行的回調函數(全局)

success:成功之后執行的回調函數(全局)

error:失敗之后執行的回調函數(全局)

accepts:通過請求頭發送給服務器,告訴服務器當前客戶端可接受的數據類型

dataType:將服務器端返回的數據轉換成指定類型

"xml":將服務器端返回的內容轉換成xml格式

"text":將服務器端返回的內容轉換成普通文本格式

"html":將服務器端返回的內容轉換成普通文本格式,在插入DOM中時,如果包含JavaScript標簽,則會嘗試去執行。

"script":嘗試將返回值當作JavaScript去執行,然后再將服務器端返回的內容轉換成普通文本格式

"json":將服務器端返回的內容轉換成相應的JavaScript對象

"jsonp":JSONP格式使用JSONP形式調用函數時,如"myurl?callback=?"jQuery將自動替換?為正確的函數名,以執行回調函數

面向對象編程

原型對象javascript、java、c#------面向對象;但是javascript有些區別!

類:模板

對象:具體實例

BOM對象(重點)

BOM是瀏覽器介紹

javascript和l瀏覽器的關系

BOM:瀏覽器對象模型

1、wiindow 代表瀏覽器窗口


2、screen 代表屏幕尺寸


3、location 代表當前頁面的URL信息


4、document 代表當前頁面,HTML。DOM文檔樹


獲取具體的文檔樹節點

document.getElementByID("AP")

獲取Cookie

document.cookie

5、history代表瀏覽器的歷史記錄 不建議使用


DOM對象(重點)

DOM:文檔對象類型

瀏覽器網頁就是一個Dom樹形結構!

更新:更新Dom節點

遍歷Dom節點:得到Dom節點

刪除:刪除一個Dom節點

添加:添加一個新的節點

1.獲得DOM節點


這是原生代碼,之后我們盡量都使用jQuery();

2.更新DOM節點

先獲取他的節點然后更新里面的內容


操作文本

操作css

3.刪除DOM節點

步驟:使用父節點刪除子節點 最后父節點刪除自己


表單

表單是 form 標簽

文本框? -- text

下拉框 -- select

單選框 -- radio

多選框 -- checkbox

隱藏域 -- hidden 可以用來隱藏提交某些 比如id

密碼卡 -- paswoord

。。。。。

想要獲得表單的提交信息就要使用dom對象

document.getElementById() 通過id選擇器來獲取

document.getElementsByTagName() 通過標簽名來查找元素

document.getElementsByClassName(name)? 通過類名來查找元素

提交表單。md5加密密碼,表單優化

<!DOCTYPEhtml>

<htmllang="en">

<head>

<metacharset="UTF-8">

<title>Title</title>

<!--MD5加密工具類-->

<scriptsrc="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js">


</script>

</head>

<body>

<!--表達綁定提交事件

? ? ? ? ? ? οnsubmit=綁定一個提交檢測的函數,true,false

? ? ? ? ? ? 將這個結果返回給表單,使用onsubmit接收

? ? ? ? -->

<formaction="https://www.baidu.com"method="post"onsubmit="return aaa()">

<p>

? ? <span>用戶名:</span><input type="text" id = "username" name = "username"/>

? ? </p>

<p>

? ? <span>密碼:</span><input type="password" id = "password" />

? ? </p>

<inputtype="hidden"id="md5-password"name="password">


<!--綁定事件onclick被點擊-->

<buttontype="submit">提交</button>


</form>


<script>

? ? functionaaa(){

alert(1);

varusername=document.getElementById("username");

varpwd=document.getElementById("password");

varmd5pwd=document.getElementById("md5-password");

//pwd.value = md5(pwd,value);

md5pwd.value=mad5(pwd.value);

//可以校驗判斷表單內容,true就是通過提交,false就是阻止提交

returnfalse;


? ? ? ? ?? }

</script>


</body>

</html>

JQuery

JAVAScript和JQuery的關系

JQuery是個庫,里面封裝了大量的JavaScript函數

獲取jQuery 去JQuery官網下載jar包


公式:$(){} 入口函數 頁面一打開就加載了

選擇器

//jQuery css中的選擇器它全部都能用!

$('p').click();//標簽選擇器

$('#id1').click();//id選擇器

$('.class1').click;//class選擇器

文檔工具站:http://jquery.cuishifeng.cn/

事件

鼠標事件

mousedown()(jQuery)----按下

mouseenter()(jQuery)

mouseleave()(jQuery)

mousemove()(jQuery)----移動

mouseout()(jQuery)

mouseover()(jQuery)

mouseup()(jQuery)

節點文本操作

$('#test-ul li[name=python]').text();//獲得值

$('#test-ul li[name=python]').text('設置值');//設置值

$('#test-ul').html();//獲得值

$('#test-ul').html('<strong>123</strong>');//設置值

?

css操作

$('#test-ul li[name=python]').css({"color","red"});

元素的顯示和隱藏,:本質display:none

$('#test-ul li[name=python]').show();顯示

$('#test-ul li[name=python]').hide();隱藏

學習的JS技巧

1、如何鞏固JS(看jQuery源碼,看游戲源碼!)

2、鞏固HTML、CSS(扒網站,全部down下來,然后對應修改看效果~)

F12 k + del

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容

  • 1.mybaties的一對多:拿客戶與訂單來說在客戶這個bean屬性里面配置一個訂單集合,在xml里面配置,有一個...
    雷爺_fefc閱讀 527評論 0 0
  • 目錄 ┣━━視頻┃ ┣━━01-html&CSS┃ ┃ ┣━━01HTML和CSS-引課 .avi┃ ┃ ┣━━0...
    愛學習的小哥閱讀 425評論 0 0
  • 事務是一系列的操作,當所有的步驟像一個操作一樣被完整地執行,我們稱該事務被提交。由于其中的一部分或多步執行失敗,導...
    coke_dd41閱讀 266評論 0 0
  • 久違的晴天,家長會。 家長大會開好到教室時,離放學已經沒多少時間了。班主任說已經安排了三個家長分享經驗。 放學鈴聲...
    飄雪兒5閱讀 7,550評論 16 22
  • 今天感恩節哎,感謝一直在我身邊的親朋好友。感恩相遇!感恩不離不棄。 中午開了第一次的黨會,身份的轉變要...
    迷月閃星情閱讀 10,597評論 0 11