1.Servlet 簡(jiǎn)介:
JavaWeb應(yīng)用開(kāi)發(fā)的核心技術(shù)就是JSP涵但、Servlet與JavaBean。Servlet 作為 Java Web 應(yīng)用開(kāi)發(fā)的核心技術(shù)之一柄延,JSP 以及其他很多優(yōu)秀的Web框架【Struts2】都是基于 Servlet 實(shí)現(xiàn)的肃廓。
Servlet 的幾個(gè)特點(diǎn):
- 1.Servlet(Java服務(wù)器端小程序,下面編寫(xiě)的MyServlet.java就是一個(gè)典型的Servlet)是用 Java 編寫(xiě)的平臺(tái)無(wú)關(guān)的服務(wù)器端小程序陈哑,運(yùn)行在 Servlet 的容器(如Tomact)中妻坝,其生命周期由容器管理伸眶。
- 2.在Web開(kāi)發(fā)中經(jīng)常用到Servlet的抽象類HttpServlet,該抽象類的兩個(gè)對(duì)象HttpServletRequest刽宪、HttpServletResponse 與客戶進(jìn)行交互厘贼。
- 3.Servlet經(jīng)常用作控制器,根據(jù)不同的請(qǐng)求圣拄,將處理的結(jié)果轉(zhuǎn)發(fā)給其它的組建嘴秸。
- 4.自己編寫(xiě)的Servlet需要在web.xml中進(jìn)行配置。
1.1 Servlet的請(qǐng)求響應(yīng)時(shí)序:
當(dāng)Servlet被封裝到容器之后庇谆,首先調(diào)用 init() 方法進(jìn)行初始化岳掐,初始化后,調(diào)用service() 方法處理用戶的請(qǐng)求饭耳,并將處理的結(jié)果封裝到HttpServletResponse中返回給客戶串述,當(dāng)Servlet實(shí)例從容器中移除時(shí)調(diào)用destory() 。
1.2 Servlet的抽象類HttpServlet:
HttpServlet是Servlet的抽象類寞肖,HttpServlet 通過(guò)**HttpServletRequest纲酗、HttpServletResponse **兩個(gè)對(duì)象與客戶進(jìn)行交互。其中HttpServletRequest對(duì)象負(fù)責(zé)封裝存放Http請(qǐng)求的信息新蟆,HttpServletResponse對(duì)象負(fù)責(zé)封裝存放處理得到的響應(yīng)結(jié)果觅赊。
另外,Servlet容器啟動(dòng)加載Web應(yīng)用時(shí)琼稻,會(huì)為每個(gè)Web容器創(chuàng)建一個(gè)ServletContext對(duì)象茉兰,用于存放整個(gè)Web應(yīng)用的共享數(shù)據(jù),因此欣簇,我們可以把ServletContext對(duì)象看成Web應(yīng)用的共享內(nèi)存规脸。
1.HttpServletRequest 對(duì)象的常用方法:
- getParameter("參數(shù)name值"): 獲取Http請(qǐng)求中的指定參數(shù)值。
- setCharacter("utf-8"): 設(shè)置Http請(qǐng)求的編碼方式熊咽。
- get Cookies(): 獲取Http請(qǐng)求的cookies值莫鸭。
其它更詳細(xì)的方法自己查唄
2.HttpServletResponse 對(duì)象的常用方法:
- getWriter(): 返回一個(gè)PrintWriter對(duì)象。
- setContentType("text/html"): 設(shè)置Http響應(yīng)的文本格式横殴。
- setCharacterEncoding("utf-8"): 設(shè)置Http響應(yīng)頭的編碼方式被因。
其它更詳細(xì)的方法自己查唄
3.ServletContext對(duì)象的常用方法:
- setAttribute(String arg0, Object arg1): 把對(duì)象和一個(gè)屬性進(jìn)行綁定,將這個(gè)對(duì)象存儲(chǔ)在ServletContext中
- getAttribute(String arg0): 根據(jù)給定的屬性名返回所綁定的對(duì)象衫仑。
其它更詳細(xì)的方法自己查唄
1.3 創(chuàng)建一個(gè)HttpServlet實(shí)例:
在Java Web應(yīng)用開(kāi)發(fā)中梨与,創(chuàng)建一個(gè)HttpServlet一般遵循以下的步驟:
1.創(chuàng)建自己的Java類并繼承HttpServlet。
2.在Java類中重載HttpServlet的doGet文狱、doPost方法粥鞋。
3.編寫(xiě)表現(xiàn)層的JSP文件,并配置form表單中的 action=" " 瞄崇。
4.在WEB-INF中創(chuàng)建web.xml呻粹,并配置servlet壕曼。
5.啟動(dòng)Servlet容器,并生成Http請(qǐng)求進(jìn)行測(cè)試等浊。
6.獲取Http請(qǐng)求信息腮郊,進(jìn)行業(yè)務(wù)邏輯處理。
7.生成Http響應(yīng)結(jié)果筹燕,以流的形式輸出到客戶端瀏覽器或磁盤(pán)文件轧飞。
在Eclipse中的總體文件結(jié)構(gòu):
具體的代碼:
1.視圖層:index.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<FORM name="form1" action="login" method="POST">
請(qǐng)輸入姓名:
<INPUT name="name" type="text">
<INPUT name="submit" value="提交" type="submit">
</FORM>
</body>
</html>
2.典型的Servlet:MyServlet.java
package ServletTest;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
public MyServlet(){ //構(gòu)造函數(shù)
super();
}
public void destroy(){//銷毀時(shí)調(diào)用
super.destroy();
System.out.println("destory()執(zhí)行了");
}
//處理Get方式提交過(guò)來(lái)的數(shù)據(jù)表單
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException,IOException{
doPost(request,response);//直接調(diào)用doPost方法
}
//處理Post方式提交的數(shù)據(jù)表單
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException,IOException{
response.setContentType("text/html"); //設(shè)置Http響應(yīng)的文檔類型
response.setCharacterEncoding("UTF-8"); //設(shè)置響應(yīng)采用的編碼方式
String name = request.getParameter("name"); //獲取提交的表單中name文本框值
name = new String(name.getBytes("ISO-8859-1"),"utf-8");//將字符編碼轉(zhuǎn)換為utf-8
PrintWriter out = response.getWriter(); //等到一個(gè)PrintWrite對(duì)象
ServletContext context = getServletContext(); //得到整個(gè)Web的ServletContext對(duì)象
int count =1;
if(context.getAttribute("count")==null) //如果是第一位訪問(wèn)者
{
context.setAttribute("count",new Integer(count));//設(shè)置計(jì)數(shù)器的初始值
}else{
count= Integer.parseInt(context.getAttribute("count").toString());//獲取當(dāng)前的count值
count++;
context.setAttribute("count",new Integer(count));//更新計(jì)數(shù)器的值
}
out.println(name+",你好硬萍!你是第"+count+"位訪問(wèn)者");
out.flush();//強(qiáng)制性將當(dāng)前緩存中的內(nèi)容輸出
out.close();//關(guān)閉輸出流耘子,清除當(dāng)前所有內(nèi)容
}
//本Servlet裝配到容器后自動(dòng)執(zhí)行初始化方法
public void init() throws ServletException{
System.out.println("init()執(zhí)行了");
}
}
3.web.xml配置文件內(nèi)容:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>ServletTest.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
運(yùn)行之后的結(jié)果:
2.預(yù)告
Servlet這一部分就寫(xiě)到這里,接下來(lái)會(huì)寫(xiě)有關(guān)SSH的部分卧斟,因?yàn)橄乱粋€(gè)Java Web項(xiàng)目的要用到SSH糠涛,就當(dāng)是跟大家一起復(fù)習(xí)一下吧援奢!