servlet項目源碼
『壹』 如何修改Eclipse中的servlet源碼
進入apache-tomcat-9.0.0.M18-src.zip\apache-tomcat-9.0.0.M18-src\java\javax\servlet 這個路徑中,找到servlet.java的文件,修改後保存。
然後在eclipse中新建一個Servlet,ctrl+左鍵點擊Servlet,Attach Source對應文件即可。
『貳』 servlet+HTML開發web項目
servlet是充當MVC模式下的控制器的作用的。沒有單獨的servlet+html做的項目把
『叄』 jsp+servlet實現文件上傳與下載源碼
上傳:
需要導入兩個包:commons-fileupload-1.2.1.jar,commons-io-1.4.jar
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
* 上傳附件
* @author new
*
*/
public class UploadAnnexServlet extends HttpServlet {
private static String path = "";
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
/*
* post處理
* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
path = this.getServletContext().getRealPath("/upload");
try {
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload up = new ServletFileUpload(factory);
List<FileItem> ls = up.parseRequest(request);
for (FileItem fileItem : ls) {
if (fileItem.isFormField()) {
String FieldName = fileItem.getFieldName();
//getName()返回的是文件名字 普通域沒有文件 返回NULL
// String Name = fileItem.getName();
String Content = fileItem.getString("gbk");
request.setAttribute(FieldName, Content);
} else {
String nm = fileItem.getName().substring(
fileItem.getName().lastIndexOf("\\") + 1);
File mkr = new File(path, nm);
if (mkr.createNewFile()) {
fileItem.write(mkr);//非常方便的方法
}
request.setAttribute("result", "上傳文件成功!");
}
}
} catch (Exception e) {
e.printStackTrace();
request.setAttribute("result", "上傳失敗,請查找原因,重新再試!");
}
request.getRequestDispatcher("/pages/admin/annex-manager.jsp").forward(
request, response);
}
}
下載(i/o流)無需導包:
import java.io.IOException;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 下載文件
* @author
*
*/
public class DownloadFilesServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 8594448765428224944L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
/*
* 處理請求
* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = request.getParameter("fileName");
System.out.print("dddddddddd:" + name);
// web絕對路徑
String path = request.getSession().getServletContext().getRealPath("/");
String savePath = path + "upload";
// 設置為下載application/x-download
response.setContentType("application/x-download");
// 即將下載的文件在伺服器上的絕對路徑
String filenamedownload = savePath + "/" + name;
// 下載文件時顯示的文件保存名稱
String filenamedisplay = name;
// 中文編碼轉換
filenamedisplay = URLEncoder.encode(filenamedisplay, "UTF-8");
response.addHeader("Content-Disposition", "attachment;filename="
+ filenamedisplay);
try {
java.io.OutputStream os = response.getOutputStream();
java.io.FileInputStream fis = new java.io.FileInputStream(
filenamedownload);
byte[] b = new byte[1024];
int i = 0;
while ((i = fis.read(b)) > 0) {
os.write(b, 0, i);
}
fis.close();
os.flush();
os.close();
} catch (Exception e) {
}
}
}
『肆』 如何編寫第一個servlet程序
創建項目
啟動eclipse,然後選擇菜單File->New->Project...,在新建項目向導中選擇 Web->Dynamic Web Project。該項目即為使用Servlet、JSP等技術開發動態網站的項目。(如果你找不到這一項,說明Lomboz沒有配置好,請參閱文章開頭的鏈接進行配置。)
下一步,輸入項目名 LearnJSP。下面的Target Runtime指定運行這個項目的伺服器,如果你已經在配置Lomboz 的一節中配置好了Tomcat伺服器,那麼在這里你可以看到相應的伺服器配置,選擇它即可。如果選擇框中只有<none>,說明你還沒有配置伺服器,可以單擊右側的New...按鈕新建。
Configurations項選擇<none>即可。
下一步選擇項目所需的特性,默認的Dynamic Web Mole和Java就足夠了。
下一步是輸入相關的目錄,這里也直接使用默認值即可。圖略。
最後單擊 Finish,完成項目創建。創建途中可能會有一個用戶使用協議需要你同意,單擊I Agree即可。創建完成後會詢問是否要切換到J2EE視圖(下圖),選擇Yes,完成項目創建。
項目建立完成後,請在左側的 Project Explorer 中打開 LearnJSP 項目,看看它各個部分的構成。
從基礎知識一節中我們知道,應用程序由三部分組成,即Servlet、JSP及靜態內容、配置文件web.xml。項目視圖中的 src 目錄用來保存 Servlet 源代碼,WebContent 目錄用來保存JSP及靜態內容, web.xml則位於 WebContent/WEB-INF/web.xml。但手工編輯 web.xml 比較麻煩,因此 Lomboz 提供了一套可視化工具用於編輯 web.xml,即最上方的Depolyment Descriptor。
理解Servlet
在Project Explorer中打開Java Resources: src -> Libraries -> Apache Tomcat 5.5 -> servlet-api.jar 文件,可以看到其中包含兩個包:javax.servlet和javax.servlet.http,與Servlet有關的類和介面都位於這兩個包裡面。
Servlet是一個介面,位於
javax.servlet.Servlet,它規定了每個Servlet所必須實現的方法。實際應用時我們需要從
javax.servlet.GenericServlet 和 javax.servlet.http.HttpServlet
兩個抽象類繼承出自己的Servlet類,並實現所需的功能。這幾個類的關系如下(綠色斜體字為抽象類):
上圖中,Servlet依賴於ServletRequest和ServletResponse介面,這兩個介面負責為Servlet接受和發送信息。 HttpServlet也類似。
Servlet介面
javax.servlet.Servlet介麵包含以下的方法:
init()
void init(ServletConfig config) throws ServletException
init方法用於初始化,在Servlet啟動時調用。
service()
void service(ServletRequest req, ServiceResponse res) throws ServletException, IOException
Servlet通過這個方法,從req獲得客戶端請求,處理並生成結果,再通過res發送給客戶端。
destroy()
void destroy()
Servlet銷毀時執行的方法。
getServletInfo()
String getServletInfo()
將Servlet的信息通過字元串返回。
getServletConfig()
ServletConfig getServletConfig()
獲取包含Servlet各種信息的ServletConfig對象。
當某個Servlet第一次被請求時,伺服器(Servlet容器)會生成該Servlet並調用它的init()方法,再調用其
service()方法處理請求。處理結束後該Servlet會常駐於容器中,下一個請求則不再重新生成Servlet,而是直接調用常駐的
Servlet對象的service()方法。伺服器停止時,會調用該Servlet的destroy()方法。
因此,在Servlet的一個生命周期中,init()和destroy()僅會被調用一次,而service()則會被調用多次。
GenericServlet抽象類
javax.servlet.GenericServlet為我們實現了Servlet介面的大部分方法,除了service()方法之外。因此,我們在製作自己的Servlet時,只需要繼承GenericServlet並重載service()方法即可。
典型的Servlet示例
下面我們來做一個典型的Servlet。
在eclipse左側的Project Explorer中,右鍵單擊Java Resources: src目錄(以後簡稱src目錄),選擇New->Class,建立如下所示的類。
包名輸入我們要建立的 com.idv2.learnjsp,類名為 HelloServlet,父類為 javax.servlet.http.GenericServlet。在輸入父類名時,你會看到輸入框左側有個小燈泡的圖標,這說明可以通過 Alt-/鍵自動補齊,因此你只需輸入 GenericSer 幾個字母,然後按 Alt-/ 組合鍵,系統會自動查找開頭為 GenericSer 的類並補齊剩餘部分。
Finish之後eclipse會為我們生成代碼框架,我們只需填入實際的處理代碼即可。代碼可以從這里下載。
helloservlet.zip
上述代碼是UTF-8編碼,如果你直接放到src目錄中有可能出現亂碼,這時請選擇Windows->Preferences...菜單,選擇左側的General->Workspace,然後將Text file encoding設置為UTF-8即可。
代碼寫好後,從Project Explorer中打開項目的 build 目錄,可以看到eclipse自動編譯了 HelloServlet.java並生成了 com/idv2/learnjsp/HelloServlet.class 文件。
那麼如何在伺服器上運行它呢?首先必須要做的就是在配置文件 web.xml 中登記這個Servlet。剛才我們在建立
HelloServlet
類時,並沒有聲明它是一個Servlet,這樣伺服器就無法將它作為Servlet執行,因此必須先登記,並為它指定一個URL(即Servlet
Mapping)。
右鍵單擊Depolyment Descriptor中的Servlets,選擇New->Servlet,出現下面的畫面。
因為我們已經寫好了HelloServlet類,因此選中Use existing Servlet class,然後單擊右側的Browse...按鈕,選擇HelloServlet類。下一步。
URL映射是指,瀏覽器通過哪個URL能訪問到這個Servlet。默認與Servlet名稱相同,為了演示,我們這里將他修改為小寫的
/helloservlet 。實際的URL格式為
http://主機名/應用程序名/Servlet的URL映射,我們這個Servlet的URL就應當是 http://localhost:8080/LearnJSP/helloservlet。
單擊Finish完成添加Servlet。如果你有興趣可以打開 WebContent/WEB-INF/web.xml,可以看到剛才的修改在web.xml中是怎樣的結果。
下一步我們需要將它部署到伺服器上。打開eclipse下方的Servet欄,可以看到系統中的伺服器列表。
如果你找不到Server欄,請通過主菜單Window->Show View->Others添加Server欄;如果你的Server欄中什麼都沒有,請在Server欄中單擊右鍵然後 New->Server。
右鍵單擊伺服器,選擇Add and Remove Projects...,將 LearnJSP項目添加到伺服器上。添加之後的結果如下:
最後右鍵單擊伺服器,選擇Start,片刻即可看到在Console欄中輸出大量的信息,伺服器啟動了。打開瀏覽器,訪問 http://localhost:8080/LearnJSP/helloservlet。如果能看到「Hello Servlet」的輸出,則恭喜你,第一個Servlet成功運行了!
刷新瀏覽器頁面幾次,然後回到eclipse下側的Console欄,可以看到下面的字樣:
init() was called.
service() was called.
service() was called.
service() was called.
這是我們加入的調試信息。這些信息說明了Servlet的一個生命周期中 init、service和destroy函數的執行過程。如果在Server欄中停止伺服器,那麼你可以在Console欄中的信息中找到 destroy() 函數的執行。
『伍』 按Ctrl打開HttpServlet類找不到源代碼,有網友說這樣解決,不過還是不能查看servlet類的源代碼啊,求大神
是因為你沒有為servlet-api.jar這個包添加源文件,所以看不到源碼,你可以去官網下載源碼然後用eclipse導入就行了,或者你可以用java的反編譯工具把jar包轉換成java源代碼自己看。
我給你下載好了哈,eclipse中導入裡面的一個叫做「java」的目錄就可以了!
希望可以幫助到你,望採納,謝謝,有問題可以追問哈!
『陸』 我編寫了一個servlet,但是編譯不通過不能生成.class文件,求高手給看看,謝了!
找不到包的原因是:沒有將javaee.jar設置為或者包含在java.classpath 路徑中。
類BeerSelect是公共的,應該在SelectBeer.java文件中聲明:
這個意思是讓你的類文件名稱和public 類的名稱相同。
『柒』 Servlet的源代碼在Tomcat中哪個文件夾
tomcat中是沒有源代碼的,那裡都是編譯好的CLASS文件和頁面文件及配置文件。
『捌』 Servletrequest介面類的方法的源碼在哪
1、ServletRequestAware這個介面中的方法是setServletRequest(HttpServletRequest request) 可以獲得這次請求的request對象
2、RequestAware這個介面中的方法是setRequest(Map request) 它只能夠獲得這次請求中包含request對象中全部attributes的一個map對象
『玖』 如何看J2EE的源碼
sun的jdk中並沒有包含servlet源代碼,也就是你關聯了jdk中的src後還是不能夠查看servlet的源代碼的。servlet是在tomcat有實現的,所以我們只要下載tomcat的源碼就可以查看servlet的源碼了。
下面是步驟:
1. 進入tomcat官方的下載tomcat源碼,一般對應你的版本,例如我的版本是tomcat 6.X,那麼我現在tomcat 6.x的src包下載.
2. 進入官網下載自己配套的src源碼
3. 進入到你自己寫的servlet的程序代碼中
4. 按住crtl, 然後用滑鼠點擊servlet的類的方法,關聯下那個源代碼就可以了。那個源代碼就是你下的那個tomcat源碼
『拾』 想找servlet-api.jar的源碼。
基本上所有源代碼都可以下載到。
maven倉庫地址:http://mvnrepository.com/
maven依賴配置如下,
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.1</version>
</dependency>