国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

servlet

2019-11-08 18:52:50
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

javaWeb應(yīng)用生命周期

          1.啟動(dòng)階段:把web.xml文件中的數(shù)據(jù)加載到內(nèi)存,為web應(yīng)用創(chuàng)建一個(gè)servletContext對(duì)象,對(duì)所有Filter初始化,對(duì)需要web啟動(dòng)時(shí)初始化的servlet初始化(web.xml配置了load-on-startup)。

          2.運(yùn)行階段:所有servlet處于等待階段,用戶請(qǐng)求了,看Servlet是不是初始化了,不是就初始化,是就提供service服務(wù)。過(guò)濾器在servlet之前調(diào)用,但是要過(guò)濾去映射url和用戶請(qǐng)求url配對(duì)上才行。

          3.終止階段:銷毀所有處于運(yùn)行時(shí)狀態(tài)的servlet。銷毀所有處于運(yùn)行時(shí)狀態(tài)的Filter,銷毀所有與web應(yīng)用相關(guān)的對(duì)象,比如servletContext對(duì)象。

Servlet生命周期

        1.初始化:記載servlet類,把class文件加載到內(nèi)存。創(chuàng)建ServletConfig對(duì)象(包含了servlet初始化信息),創(chuàng)建servlet對(duì)象,調(diào)用init方法。

         2.運(yùn)行時(shí):用戶請(qǐng)求,servlet容器創(chuàng)建ServletRequest對(duì)象和ServletResponse對(duì)象,調(diào)用對(duì)應(yīng)servlet的service方法。返回響應(yīng)結(jié)果。

        3.銷毀:web應(yīng)用終止時(shí),會(huì)調(diào)用destroy方法銷毀對(duì)象。

servlet api主要接口與類的作用和生命周期

下載文件

        @Override	PRotected void doGet(HttpServletRequest req, HttpServletResponse resp)			throws ServletException, IOException {		OutputStream out;		InputStream in;				String filename = req.getParameter("filename");				in = getServletContext().getResourceAsStream("資源路徑");		int length = in.available();				resp.setContentType("application/force-download");		resp.setHeader("Content-Length", String.valueOf(length));		resp.setHeader("Content-Disposition", "attachment;filename=/""+filename+"/"");				out = resp.getOutputStream();		int b =0;		byte[] bytes = new byte[1024];		while((b=in.read(bytes))!=-1){			out.write(bytes, 0, b);		}		in.close();		out.close();	}上傳文件

<form enctype="MULTipART/FORM-DATA"><input type="file" /></form>
	@Override	protected void doPost(HttpServletRequest req, HttpServletResponse resp)			throws ServletException, IOException {				try {			DiskFileItemFactory dff = new DiskFileItemFactory();			dff.setSizeThreshold(4*1024);//設(shè)置緩沖大小4k			dff.setRepository(new File("臨時(shí)目錄"));						ServletFileUpload sf = new ServletFileUpload(dff);			sf.setFileSizeMax(4*1024*1024);//設(shè)置文件最大為4M					List<FileItem> list = sf.parseRequest(req);			for(FileItem f:list){				if(!f.isFormField()){					String filename = f.getName();					filename = filename.substring(filename.lastIndexOf("//")+1, filename.length());//獲得不包含路徑的文件名字					long size = f.getSize();					if(!"".equals(filename)&&size!=0){						f.write(new File(filename));					}				}			}		} catch (Exception e) {			// TODO Auto-generated catch block			e.printStackTrace();		}			}

Cookie

Cookie c = new Cookie("username", "jack");		c.setPath("/");		c.setMaxAge(60*60);		resp.addCookie(c);				Cookie[] cookies = req.getCookies();		for(Cookie cook:cookies){			cook.getName();			cook.getValue();			cook.getMaxAge();		}轉(zhuǎn)發(fā)和包含

轉(zhuǎn)發(fā)(forward):當(dāng)前servlet解決不了,轉(zhuǎn)發(fā)到另一個(gè)servlet處理。

包含(include):當(dāng)前servlet解決不了,把另一個(gè)servlet中的處理包含到自己這個(gè)servlet中。

都依賴requestDispatcher接口,兩個(gè)servlet共用一個(gè)request和response對(duì)象。

servletContext調(diào)用getRequestDispatcher(string)絕對(duì)路徑。

servletRequest調(diào)用geRequestDispatcher(String)相對(duì)路徑。

轉(zhuǎn)發(fā)

		req.setAttribute("message", "hello");		RequestDispatcher r = getServletContext().getRequestDispatcher("/xxx");		r.forward(req, resp);		req.getRequestDispatcher("xxx").forward(req, resp);forward處理流程:

1.清空用于存放響應(yīng)數(shù)據(jù)的緩沖區(qū)。

2.如果/xxx是servlet或jsp,那就調(diào)用service方法,把處理結(jié)果返回。如果是靜態(tài)html,就讀取文檔數(shù)據(jù)返回。

轉(zhuǎn)發(fā)的特點(diǎn):

1.因?yàn)闀?huì)清空緩沖,所以轉(zhuǎn)發(fā)后原來(lái)的servlet響應(yīng)結(jié)果不會(huì)返回給客戶端。只有轉(zhuǎn)發(fā)后的處理響應(yīng)結(jié)果才能返回。

2.如果在forward前,原servlet發(fā)送了響應(yīng)結(jié)果(response.close()等等)。那么forward會(huì)報(bào)IllegalStateException。

包含

                getServletContext().getRequestDispatcher("/header.htm").include(request, response);;		getServletContext().getRequestDispatcher("/doget").include(request, response);;		getServletContext().getRequestDispatcher("/foot.htm").include(request, response);;				//code處理流程:

1.如果/xxx是servlet或jsp,那就調(diào)用service方法,把處理結(jié)果返回到原servlet響應(yīng)中。如果是靜態(tài)html,就讀取文檔數(shù)據(jù)返回到原servlet響應(yīng)中。2.處理結(jié)束后返回到原servlet中繼續(xù)執(zhí)行代碼。

包含特點(diǎn):1.前后處理結(jié)果都會(huì)添加到響應(yīng)結(jié)果中2.在后一個(gè)servlet對(duì)響應(yīng)狀態(tài)代碼或響應(yīng)頭做修改會(huì)被忽略。

重定向

重定向流程:

1.用戶輸入url。

2.服務(wù)器返回302表示請(qǐng)求另一個(gè)url。響應(yīng)結(jié)果會(huì)出現(xiàn)新的url。

3.請(qǐng)求響應(yīng)結(jié)果的url。

4.返回響應(yīng)結(jié)果。

sendRedirect是在httpServletResponse中定義的。servletResponse中沒(méi)有。

response.sendRedirect("/xxxx?name=123");特點(diǎn):

1.原servlet響應(yīng)結(jié)果不會(huì)返回。sendRedirect("xxx")返回302狀態(tài),客戶端重定向。

2.在sendRedirect前提交了響應(yīng)結(jié)果,會(huì)報(bào)IllegalStateException。3.sendRedirect之后的代碼也會(huì)執(zhí)行。

4.前后servlet不共享request對(duì)象

5.sendRedirect("xxx")中xxx以“/”開頭表示當(dāng)前服務(wù)器地址,“http://”表示完整的地址。

6.重定向的servlet可以不再自己服務(wù)器上。

tomcat中<Content>中一個(gè)項(xiàng)目crossContent為false,其他項(xiàng)目不能訪問(wèn)這個(gè)項(xiàng)目。為true可以訪問(wèn)。

ServletContext a = getServletContext().getContext("/webapp");a.getRequestDispatcher("/xxx");


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 台南市| 闵行区| 洛浦县| 昌邑市| 怀远县| 固安县| 沙田区| 宣汉县| 瑞安市| 尉氏县| 永仁县| 南安市| 札达县| 阿坝县| 龙陵县| 新宾| 辰溪县| 乌拉特前旗| 通城县| 安乡县| 普宁市| 炎陵县| 莱芜市| 磐石市| 乡宁县| 白玉县| 宁安市| 西畴县| 阿克| 金寨县| 铜山县| 南康市| 霍林郭勒市| 遂溪县| 平南县| 德保县| 福海县| 富顺县| 扬中市| 屯门区| 财经|