javaWeb

Web服務器

Weblogic(Oracle)

WebSphere(IBM)

JBoss(Redhat)

以上產品均收費珊泳,支持J2ee規(guī)范

Tomcat(Apache)

免費產品凳兵,僅支持部分J2ee規(guī)范

Tomcat

Tomcat是Apache的Jakarta項目中的一個核心項目胯舷,Tomcat服務器是一個免費的開放源代碼的Web應用服務器欧漱,屬于輕量級應用服務器论巍,實際上Tomcat部分是Apache服務器的擴展笨农,但它是獨立運行的荠医,所以當你運行tomcat時褂乍,它實際上作為一個與Apache獨立的進程單獨運行的持隧。

常見問題:

(1)閃退:tomcat軟件啟動時會默認在環(huán)境變量中尋找一個JAVA_HOME的變量,若沒有逃片,則啟動失敗屡拨,閃退。

(2)端口占用:tomcat啟動時所需要的端口被其它程序占用褥实。修復辦法是修改conf/server.xml,修改相關選項的port呀狼。

(3)項目主目錄錯誤:tomcat在啟動的時候會在環(huán)境變量中尋找CATALINA_HOME,并按照其值加載相關文件损离。

Http協(xié)議(超文本傳輸協(xié)議)

HTTP是一個基于請求與響應模式的哥艇、無狀態(tài)的、應用層的協(xié)議僻澎。

HTTP是建立在tcp/ip協(xié)議的基礎上的貌踏,它多了一層數據傳輸格式是否規(guī)范的處理。也就是說它是對瀏覽器客戶端和服務器之間數據傳輸格式的規(guī)范窟勃。

HTTP1.1版本中給出一種持續(xù)連接的機制祖乳,絕大多數的Web開發(fā),都是構建在HTTP協(xié)議之上的Web應用秉氧。

名詞:

URL:統(tǒng)一資源定位符,只能用于定位互聯(lián)網信息眷昆。是URI的子集。

URI:統(tǒng)一資源標記符,可用于定位本地、局域亚斋、互聯(lián)網資源作媚。

提交方式:

POST:這是一種安全的提交方式,提交內容會跟在請求實體內容后面帅刊,對于提交數據的大小沒有要求纸泡,使用隊列方式處理提交是的數據。

GET: 這是一種不太安全的提交方式(瀏覽器默認資源請求方式)厚掷,提交內容跟在地址欄請求后面弟灼,要求提交數據大小<2k。

HTTP請求

Accept: text/html,image/*? ? ? ? ? ? ? ? ? -瀏覽器接受的數據類型

Accept-Charset: ISO-8859-1? ? ? ? ? ? ? ? -瀏覽器接受的編碼格式

Accept-Encoding: gzip,compress? ? ? ? ? ? -瀏覽器接受的數據壓縮格式

Accept-Language: en-us,zh-? ? ? ? ? ? ? ? -瀏覽器接受的語言

Host: www.it315.org:80? ? ? ? ? ? ? ? ? ? -當前請求訪問的目標地址(主機:端口)

If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT? -瀏覽器最后的緩存時間

Referer: http://www.it315.org/index.jsp? ? ? ? ? ? -當前請求來自于哪里

User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)? --瀏覽器類型

Cookie:name=eric? ? ? ? ? ? ? ? ? ? ? ? ? -瀏覽器保存的cookie信息

Connection: close/Keep-Alive? ? ? ? ? ? ? -瀏覽器跟服務器連接狀態(tài)冒黑。close: 連接關閉? keep-alive:保存連接田绑。

Date: Tue, 11 Jul 2000 18:23:51 GMT? ? ? ? -請求發(fā)出的時間

HTTP響應

Location: http://www.it315.org/index.jsp? -表示重定向的地址,該頭和302的狀態(tài)碼一起使用抡爹。

Server:apache tomcat? ? ? ? ? ? ? ? ? ? ? -表示服務器的類型

Content-Encoding: gzip? ? ? ? ? ? ? ? ? ? -表示服務器發(fā)送給瀏覽器的數據壓縮類型

Content-Length: 80? ? ? ? ? ? ? ? ? ? ? ? -表示服務器發(fā)送給瀏覽器的數據長度

Content-Language: zh-cn? ? ? ? ? ? ? ? ? ? -表示服務器支持的語言

Content-Type: text/html; charset=GB2312? ? -表示服務器發(fā)送給瀏覽器的數據類型及內容編碼

Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT? -表示服務器資源的最后修改時間

Refresh: 1;url=http://www.it315.org? ? ? ? -表示定時刷新

Content-Disposition: attachment; filename=aaa.zip? -表示告訴瀏覽器以下載方式打開資源(下載文件時用到)

Transfer-Encoding: chunked

Set-Cookie:SS=Q0=5Lb_nQ; path=/search? ? ? -表示服務器發(fā)送給瀏覽器的cookie信息(會話管理用到)

Expires: -1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -表示通知瀏覽器不進行緩存

Cache-Control: no-cache

Pragma: no-cache

Connection: close/Keep-Alive? ? ? ? ? ? ? -表示服務器和瀏覽器的連接狀態(tài)掩驱。close:關閉連接 keep-alive:保存連接

狀態(tài)響應碼

狀態(tài)代碼有三位數字組成,第一個數字定義了響應的類別冬竟,且有五種可能取值:

1xx:指示信息--表示請求已接收欧穴,繼續(xù)處理

2xx:成功--表示請求已被成功接收、理解泵殴、接受

3xx:重定向--要完成請求必須進行更進一步的操作

4xx:客戶端錯誤--請求有語法錯誤或請求無法實現

5xx:服務器端錯誤--服務器未能實現合法的請求

常見狀態(tài)代碼涮帘、狀態(tài)描述、說明:

200 OK? ? ? //客戶端請求成功

400 Bad Request? //客戶端請求有語法錯誤笑诅,不能被服務器所理解

401 Unauthorized //請求未經授權调缨,這個狀態(tài)代碼必須和WWW-Authenticate報頭域一起使用

403 Forbidden? //服務器收到請求,但是拒絕提供服務

404 Not Found? //請求資源不存在吆你,eg:輸入了錯誤的URL

500 Internal Server Error //服務器發(fā)生不可預期的錯誤

503 Server Unavailable? //服務器當前不能處理客戶端的請求弦叶,一段時間后可能恢復正常

Servlet

Servlet是工作在服務器端的java程序。

開發(fā)方式:

實現Servlet接口:可明顯看出servlet聲明周期妇多,要重寫5個方法

繼承GenericServlet類伤哺,重寫service()方法

繼承HttpServlet類,重寫doGet()和doPost()方法,可以講用戶請求按照提交方式做不同處理者祖。

映射路徑:

url-pattern 要么以/開頭立莉,要么以*開頭。

url-pattern 不能同時使用兩種匹配模式七问。

url-pattern 中的URL在多個servlet同時被匹配的情況下:精確匹配優(yōu)先級最高桃序,以后綴名匹配的方式優(yōu)先級最低。

聲明周期:

構造方法():servlet對象創(chuàng)建時調用

init():第一次訪問時調用

service():每次訪問時調用

destory():servlet對象銷毀是調用

自動加載:

servlet默認在第一次訪問時創(chuàng)建對象烂瘫,這樣會導致第一次訪問緩慢,為解決這個問題,

可以修改web.xml的<servlet>元素坟比,將servlet對象的創(chuàng)建時間提前至web.xml加載時芦鳍。

<load-on-startup>$num</load-on-startup>

這里的$num越大,創(chuàng)建優(yōu)先級越低

線程安全問題:

問題描述:servlet是單實例多線程的葛账,這種機制在多個線程訪問共享數據時就存在線程安全問題柠衅。

解決方案:將使用共享數據的部分代碼加鎖。

Request:通過HttpServletRequest對象獲取http請求信息

請求行:

getRequestURL():URL

getRequestURI():URI

getMethod():請求方式

getProtocol():版本協(xié)議

請求頭:

getHeader(String key):根據頭名稱獲取頭內容

getHeaderNames():得到所有的請求頭名稱籍琳,返回一個Enumeration迭代器

實體:

getInputStream():以輸入流的方式讀取實體內容(針對POST提交)

getQueryString():接受地址欄的數據(針對GET方式)

getPapameter(String key):獲取指定key的value菲宴,但是只可以用于一個返回值的情況

getParameterValues(Sting key):獲取指定key的value,可以用于多個返回值的情況

getParameterNames():得到所有的請求參數名稱趋急,返回一個Enumeration喝峦。

設置字符集,解決編碼問題:

方式一:

setCharacterEncoding("utf-8");

方式二:手動解碼

new String(req.getParameter($key).getBytes("iso-8859-1"),"utf-8");

方式三:更改整個tomcat的編碼集

<connector? ...? >最后加上URLEncoding="utf-8"

Response:通過HttpServletResponse對象設置http請求信息

響應行:

setStatus(int num):響應碼

響應頭:

setHeader(String key,String value)根據鍵值對設置響應頭

setContentType("text/html;charset=utf-8")? 設置瀏覽器解析格式及編碼

實體:

getoutputStream().write() 可以發(fā)送字符或者字節(jié)內容內容

getWriter().write() 只可發(fā)送字節(jié)內容呜达,但是效率比較高

注意:getWriter和getOutputStream二者只能選其一谣蠢,調用了其中一個就不能調用另一個了

sendRedirect(String url):請求重定向

ServletConfig:用于加載servlet中的初始化參數,在GenricServlet中已經創(chuàng)建,通過getServletConfig()即可獲取到

ServletContext getServletContext():獲取servlet上下文

String getInitParameter(String name):根據初始化參數名字得到對應的值

Enumeration<String> getInitParameterNames():獲取所有參數的名字

初始化參數的配置:配置在web.xml中

<servlet>

<init-param>

? <param-name>name</param-name>

? <param-value>value</param-value>

</init-param>

</servlet>

ServletContext:servlet上下文對象查近,代表當前web應用程序眉踱,一個應用只有一個servletContext,加載web應用是創(chuàng)建,關閉主機時銷毀霜威。

本對象可以通過getServletConfig()方法得到谈喳,本質上使用getServletConfig().getServletConetxt()得到。

常用API:

getContextPath():獲取web應用路徑

String getInitParameter(String name):根據初始化參數名字得到對應的值

Enumeration<String> getInitParameterNames():獲取所有參數的名字

初始化參數的配置:

<context-param>

? <param-name></param-name>

? <param-value></param-value>

</context-param>

ServletContext是一個作用于整個web應用的域對象戈泼,可以用于在多個servlet之間傳遞參數婿禽。

setAttribute(String key,Object value):添加

getAttribute(String key):查找

removeAttrtibute(String key):移除

RequestDispatcher getRequestDispatcher(String uri):url轉發(fā)

一般與forward(request,response)連用用于轉發(fā)

資源獲取路徑:

在java項目中,相對路徑中的.代表當前路徑

在javaweb項目中矮冬,相對路徑中的.代表當前應用的jvm啟動路徑谈宛。

web項目中加載資源的方式是

String getRealPath(String uri):獲取資源的絕對路徑字符串形式

InputStream getResourceAsStream():獲取資源的輸入流

關于轉發(fā)(sendRedirect)與轉向(forward)的異同:

(1)轉發(fā)和轉向都可以實現頁面的跳轉。

(2)轉發(fā)是地址欄會發(fā)生變化胎署,轉向時地址欄不會發(fā)生變化吆录。

(3)sendRedirect由response對象調用,forward有RequestDispatcher對象調用琼牧。

(4)轉發(fā)的原理是瀏覽器重新發(fā)起url請求恢筝,轉向是在服務器端直接跳轉。

(5)轉發(fā)對請求資源范圍沒有要求巨坊,轉向的請求資源范圍只能是本應用下的撬槽。

(6)轉向發(fā)生在一次url請求中,轉發(fā)是重新開啟一次url請求趾撵。

Cookie會話技術

Cookie會話是客戶端技術侄柔,是服務器保存在客戶端的信息文件共啃,同一臺客戶端默認是用共同的cookie區(qū)。

常用API:

創(chuàng)建:

Cookie cookie = new Cookie(String name,String value);

設置cookie相關參數:

setMaxAge(int seconds):存活時間暂题,默認是隨著瀏覽器關閉而滅亡

正整數:將cookie信息保存在瀏覽器的緩存目錄中移剪,數值表示存留時間,單位是s

負整數:將cookie信息保存在瀏覽器的內存中薪者,隨瀏覽器關閉而消失纵苛。

0:刪除同名cookie

setpath(String uri):有效訪問路徑(默認為當前應用),保證不同資源之間的cookie共享

寫到瀏覽器:

response.addCookie(cookie):底層是通過http響應的Set-Cookie實現

讀妊越颉:

Cookie[] request.getCookies():底層是讀取http請求的Cookie實現的

獲取cookie信息

getName():獲取cookie名稱

getValue():獲取cookie值

注意細節(jié):

(1)cookie是創(chuàng)建攻人、讀取在服務器,保存在客戶端的文件悬槽。

(2)cookie內部是一個類似于表格怀吻,以鍵值對形式存儲數據的。

(3)cookie只能保存簡單的字符串數據信息陷谱。

(4)cookie如果發(fā)生重名烙博,后面的cookie會替換前面的。

(5)瀏覽器默認保存不超過300個cookie烟逊,每個站點不超過20個渣窜,每個大小不超過4KB

(6)cookie無法存放中文字符,

Session會話技術

Session會話技術是服務器端技術宪躯,服務器會為每一個瀏覽器創(chuàng)建一個獨享的session對象乔宿,并將一個JSessionID發(fā)送給瀏覽器作為瀏覽器以后每次訪問的憑證。

常用API:

getSession(boolean):獲取

boolean:true或者不寫表示session存在返回访雪,不存在就創(chuàng)建再返回详瑞;false表示存在就返回,不存在就返回null

invalidate():注銷

setAttribute(String name.Object value):添加屬性

getAttribute(String name):獲取值

removeAttribute(String name):移除屬性

setMaxInactiveInterval(int minutes):設置session生命周期

session的默認生命周期為30min臣缀,也可以通過配置文件來調整:<session-timeout>$minutes</session-timeout>

注意細節(jié):

(1)session的實現是基于cookie的坝橡,所以其生命周期會受到cookie的影響。

(2)如果客戶禁用了cookie精置,就會導致session失效计寇,這是要用到URL重寫(就JSESSION寫到URLdizhilan來傳輸)

response.encodeRedirectURL(String url)

response.encodeURL(String url)

JSP

這是Sun公司推出的一款包裝版的Servlet技術,主要用于網頁的開發(fā)脂倦。

頁面訪問流程:

(1)如果是第一次訪問或者服務器文件發(fā)生了改動,走第(2)步;否則,走第(5)步;

(2)將jsp翻譯成.java文件(Servlet文件);

(3)將.java文件編譯成.class文件;

(4)將class文件加載到內存番宁,創(chuàng)建對象;

(5)執(zhí)行service()方法,將頁面回顯給瀏覽器.

語法:

注釋:

<%-- --%>:jsp注釋,推薦使用

<!-- -->:html注釋

腳本:

<% %>:用于在jsp中嵌入java代碼

聲明:

<%! %>:用于聲明變量或者函數赖阻,聲明的函數或者變量是成員屬性蝶押。

表達式:

<%= %>:相當于out.write()

指令:<%@ %>

>include:在當前頁面引入其它頁面內容,這里是靜態(tài)引入火欧,它會將其它文件的內容原封不動的全部引入到本文件棋电,然后合并翻譯成一個文件返回給瀏覽器茎截。

file:指定引入源文件

>targlib:

prefix:指定標簽前綴

uri:路徑

>page:

language="java"? ? ? ? --告訴服務器使用什么動態(tài)語言來翻譯jsp文件

import="java.util.*"? ? --告訴服務器java文件使用什么包,導入包离陶,多個包之間用逗號分割

pageEncoding="utf-8"? ? --告訴服務器使用什么編碼翻譯jsp文件(成java文件)

contentType="text/html; charset=utf-8" 服務器發(fā)送瀏覽器的數據類型和內容編碼

errorPage="error.jsp"? --指定當前jsp錯誤處理頁面

我們一般習慣是在web.xml里面使用全局配置稼虎,而不是直接在jsp里面指定錯誤頁面

<error-page>

<error-code>$num</error-code>

<location>$pathToErrorPage</location>

</error-page>

isErrorPage="false"? ? --指定當前頁面是否為錯誤處理頁面,在處理頁面可以拿到execption對象

buffer="8kb"? ? ? ? ? ? --out對象的緩存區(qū)大小

session="true"? ? ? ? ? --是否對當前頁面開啟session

isELIgnored="false"? ? --是否忽略EL表達式

9大內置對象:

由jsp進行過初始化的servlet API實例,可以在jsp中直接使用:

request--->HttpServletRequest

response-->HttpServletResponse

config---->SevletConfig

application-->ServletContext

session--->HttpSession

exception-->throwable

page---->Object(this)

out---->jspWriter:

這是一個帶緩沖的PrintWriter招刨,使用它作為輸出對象時,會先將數據寫入緩存區(qū)哀军,等滿足一定條件后再輸出到瀏覽器:

條件1:緩存區(qū)滿了時

2:關閉緩存區(qū)時

3:調用了flush()方法手動刷出時

4:jsp加載完成時

pageContext-->PageContext

pageContext的對象是PageContext沉眶,稱作jsp上下文,一般有兩個作用:

(1)從這個內置里面獲取其它8個內置對象

(2)本身也是一個域對象杉适,用來共享數據

保存數據:

setAttribute(String name,Object value,Scope scope):可以向四個域對象保存數據谎倔,如不指定,默認保存在page域

獲取數據:

getAttribute(String name,Scope scope):可以從指定域對象獲取數據猿推,如不指定片习,默認使用在page域

清除數據:

removeAttribute(String name,Scope scope):可以從指定域對象清除數據,如不指定蹬叭,默認使用在page域

域范圍常量:

PageContext.PAGE_SCOPE? ? ? ? page(當前頁)

PageContext.REQUEST_SCOPE? ? ? reques(當前請求)

PageContext.SESSION_SCOPE? ? session(當前session)

PageContext.APPLICATION_SCOPE? application(當前web應用)

自動在四個域中搜索數據:pageContext.findAttribute(String name);

順序:page域 -> request域 -> session域- > context域(application域)

EL表達式:

向瀏覽器輸出域對象中的變量值或表達式計算的結果(用于替換jsp中的<%= %>)

語法:

輸出簡單數據:${變量或表達式}

${name}================>pageContext.findAttribute(name)

${scope.name}==========>pageContext.getAttribute(name,scope)

輸出對象:${對象.屬性}

${class.name}==========>pageContext.getAttribute(class).getName()

輸出集合:${list[i]}

${list[i]}=============>pageContext.findAttribute(class).get(i)

表達式計算

標簽:

(1)內置標簽:

無需向jsp頁面導入標簽庫

<jsp:forward>轉發(fā)標簽

page:轉發(fā)的目標地址

<jsp:param>參數

name:參數名

value:參數值

<jsp:include>動態(tài)包含藕咏,包含和被包含文件分開編譯,生成兩個文件

file:被包含文件位置

(2)JSTL標簽:

核心標簽庫的重點標簽:

保存數據:

<c:set></c:set>

var:名字

value:值

scope:指定保存的域秽五,默認是pageContext

獲取數據:

<c:out></c:out>

value:輸出值

default:默認值

eacapeXml:是否對value值進行轉義

單條件判斷

<c:if></c:if>

test:判斷條件

多條件判斷

<c:choose>

<c:when test=""></c:when>可存在多個孽查,但是判斷條件不要出現交集

<c:otherwise></c:otherwise>

</c:choose>

循環(huán)數據

<c:forEach items="數據源" var="目標" begin="開始點"? end="結束點" step="步長">

index:迭代索引值()

conut:迭代次數()

varStatus:當前正在迭代的狀態(tài)對象

first:是否是第一個

last:是否是最后一個

</c:forEach>

<c:forTokens items="數據源" delims="分隔符" var="目標">

</c:forTokens>

重定向

<c:redirect></c:redirect>

(3)自定義標簽:

過濾器

Filter使得開發(fā)人員可以對web服務器管理的所有web資源進行攔截,然后對公共資源進行一些統(tǒng)一處理坦喘。

開發(fā)Filter:

1)開發(fā)一個過濾器需要將一個類實現Filter接口盲再,并實現其方法。

2)FilterAPI:

void init(FilterConfig f); 初始化方法瓣铣,在服務器啟動時候執(zhí)行

void doFilter(Request req,Response resp,FilterChain chain);過濾器攔截的業(yè)務處理方法

void destroy()銷毀過濾器實例時候調用

Filter生命周期:

和Servlet一樣Filter的創(chuàng)建和銷毀也是由WEB服務器負責答朋。

1)在應用啟動的時候就進行裝載Filter類(與Servlet的load-on-startup配置效果相同)。

2)容器創(chuàng)建好Filter對象實例后棠笑,調用init()方法,然后被Web容器保存進應用級的集合容器中去等待著調用梦碗。

3)當用戶訪問的資源正好被Filter的url-pattern攔截時,容器會創(chuàng)建Filter類對象腐晾,調用doFilter方法叉弦,后面訪問被攔截的資源時,Web容器會直接使用第一次創(chuàng)建Filter對象實例調用doFilter方法(Filter對象常駐留Web容器了)藻糖。

4)當應用服務被停止或重新裝載了淹冰,則會執(zhí)行Filter的destroy方法,Filter對象銷毀巨柒。

配置Filter:

<filter>

<filter-name>MyFilter</filter-name>

<filter-class>cn.asop.demo.HelloFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>MyFilter</filter-name>

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

</filter-mapping>

攔截配置:

(1)根據請求的url攔截:

<filter-mapping>

<filter-name>MyFilter</filter-name>

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

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

<url-pattern>/Myservlet</url-pattern>

</filter-mapping>

(2)根據請求類型攔截:

<filter-mapping>

<dispatcher>REQUEST</dispatcher>//如果目標是直接訪問時樱拴,該過濾器將被調用

<dispatcher>FORWARD</dispatcher>//如果目標資源是通過RequestDispatcher的forward()方法訪問時柠衍,該過濾器將被調用

<dispatcher>INCLUDE</dispatcher>//如果目標資源是通過RequestDispatcher的include()方法訪問時,該過濾器將被調用

<dispatcher>ERROR</dispatcher>//如果在jsp頁面page指令中指定了error屬性,那么jsp中若出現了異常,在跳轉時晶乔,該瀏覽器將被調用珍坊。

</filter-mapping>

(3) 根據servlet-name攔截:

<filter-mapping>

<servlet-name>/index</servlet-name>

</filter-mapping>

注意細節(jié):

Filter執(zhí)行準則:先以此執(zhí)行每一個Filter的chain.doFilter()之前的部分,再去執(zhí)行后面的Servlet正罢,然后再一次倒序執(zhí)行每一個Filter的chain.doFilter()之后的部分;

Filter在執(zhí)行init()時可以通過FilterCionfig獲取web.xml中的初始參數:filterConfig.getInitParameter(String key)

監(jiān)聽器

Servlet監(jiān)聽器用于監(jiān)聽一些重要事件的發(fā)生阵漏,監(jiān)聽器對象可以在事情發(fā)生前、發(fā)生后可以做一些必要的處理翻具。

監(jiān)聽器類型:

監(jiān)聽request:

監(jiān)聽request對象的創(chuàng)建或銷毀:ServletRequestListener

監(jiān)聽request屬性的增刪改:ServletRequestAttributeListener

監(jiān)聽session:

監(jiān)聽session對象的創(chuàng)建或銷毀:HttpSessionListener

監(jiān)聽session屬性的增刪改:HttpSessionAttributeListener

監(jiān)聽servletContext:

監(jiān)聽servletContext對象的創(chuàng)建或銷毀:ServletContextListener

監(jiān)聽servletContext屬性的增刪改:ServletContextAttibuteListener

session相關監(jiān)聽器

HttpSessionBindingListener? 監(jiān)聽對象綁定(接觸)session上的事件

這個監(jiān)聽器用于監(jiān)聽session中存取對象履怯,跟其他監(jiān)聽器不同之處是:

(1)它不用在web.xml中生明監(jiān)聽器;

(2)它需要被監(jiān)聽的對象來實現這個接口,并實現其方法裆泳;

HttpSessionActivationListener(了解) 監(jiān)聽session序列化及反序列化的事件

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
禁止轉載叹洲,如需轉載請通過簡信或評論聯(lián)系作者。
  • 序言:七十年代末工禾,一起剝皮案震驚了整個濱河市运提,隨后出現的幾起案子,更是在濱河造成了極大的恐慌闻葵,老刑警劉巖民泵,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異笙隙,居然都是意外死亡洪灯,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門竟痰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來签钩,“玉大人,你說我怎么就攤上這事坏快∏﹂荩” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵莽鸿,是天一觀的道長昧旨。 經常有香客問我,道長祥得,這世上最難降的妖魔是什么兔沃? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮级及,結果婚禮上乒疏,老公的妹妹穿的比我還像新娘。我一直安慰自己饮焦,他們只是感情好怕吴,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布窍侧。 她就那樣靜靜地躺著,像睡著了一般转绷。 火紅的嫁衣襯著肌膚如雪伟件。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天议经,我揣著相機與錄音斧账,去河邊找鬼。 笑死煞肾,一個胖子當著我的面吹牛其骄,可吹牛的內容都是我干的。 我是一名探鬼主播扯旷,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼索抓!你這毒婦竟也來了钧忽?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤逼肯,失蹤者是張志新(化名)和其女友劉穎耸黑,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體篮幢,經...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡大刊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了三椿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缺菌。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖搜锰,靈堂內的尸體忽然破棺而出伴郁,到底是詐尸還是另有隱情,我是刑警寧澤蛋叼,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布焊傅,位于F島的核電站,受9級特大地震影響狈涮,放射性物質發(fā)生泄漏狐胎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一歌馍、第九天 我趴在偏房一處隱蔽的房頂上張望握巢。 院中可真熱鬧,春花似錦骆姐、人聲如沸镜粤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肉渴。三九已至公荧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間同规,已是汗流浹背循狰。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留券勺,地道東北人绪钥。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像关炼,于是被迫代替她去往敵國和親程腹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內容

  • Servlet總結(說出大概意思) 在Java Web程序中儒拂,Servlet主要負責接收用戶請求HttpServl...
    程序猿1閱讀 438評論 0 0
  • Servlet:Sun公司制訂的一種用來擴展Web服務器功能的組件規(guī)范寸潦。當瀏覽器將請求發(fā)送給Web服務器(比如:a...
    南山伐木閱讀 585評論 0 4
  • 0. 引言 學習Jsp的目的是為了解技術從前后端強耦合到前后端分離的過程,增加自己的技術積淀社痛。了解并且體會這個過程...
    付凱強閱讀 1,210評論 0 5
  • 一 . Tomcat 1.對Tomcat的理解 Tomcat是一個運行JAVA的網絡服務器见转,提供能夠讓別人訪問自己...
    Vegetable蔬菜閱讀 829評論 2 1
  • 1.Servlet總結: 在Java Web程序中,Servlet主要負責接收用戶請求HttpServletReq...
    hedgehog1112閱讀 513評論 0 0