1. 程式人生 > >servlet的快速入門知識

servlet的快速入門知識

一 servlet的快速入門知識:
找一個java web專案中的jsp頁面,在釋出tomcat伺服器後生成的.java檔案(E:\apache-tomcat-7.0.62\work\Catalina\localhost\EasyBuy_day0819\org\apache\jsp),分析其程式碼可知jsp九大內建物件的由來,可知request,response物件是外部傳進來的,而其他的物件基本都是由pageContext獲取的。
response.setContentType(“text/html; charset=utf-8”);
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
二 一個servlet的實列
自定義的servlet必須要繼承HttpServlet類,然後重寫該父類的init(),service(),doGet(), doPost(), destroy()方法
pubblic class MyServlet extends HttpServlet {
public void destroy() {
super.destroy();
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
         doPost(request,response);//一般不管什麼方式向servlet中提交資料我們都直接在doGet中呼叫dopost()方法將請求的引數直接給doPost()處理,因為post處理的資料量比get的大而且更加的安全
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
}    
public void init(ServletConfig config) throws ServletException {
     //config用於獲取web.xml中當前的servlet中初試化的引數
    super.init(config);
}
public void service(ServletRequest req, ServletResponse res)
        throws ServletException, IOException {
    super.service(req, res);//這裡要注意的是若我們在service中不寫super.service(req, res),則不會呼叫doGet,和doPost()方法
}

}
三 servlet的提交方式以及兩種方式提交中文亂碼處理
1 get方式的提交的資料由於是跟在URL後面所以一般在tomcat中加, 加上URIEncoding=”utf-8”
2,post方式的提交是不跟在URL後面所以我們一般在Jsp頁面頭中加上contentType=”text/html; charset=utf-8”(響應的編碼集)和 pageEncoding=”utf-8”(文件儲存的編碼集)
四 servlet 405錯誤:沒有覆蓋父類的doGet或doPost方法導致的

五 servlet的生命週期
init()—->service()————–>[doGet()/doPost()]———->destroy()
六 servlet的表單處理
1,注意form標籤中的action=“servlet的名字”
2,request.getParamter(“name”)用於獲取表單提交的資料(單個值的)
2,request.getParamterNames(“name”)用於獲取表單提交的資料是同一個name多個值得例如:愛好的checkbox的處理。
七 servlet中的請求轉發與頁面重定向
1,request.getRequestDispatcher(“add.jsp”).forward(request, response);這種就是請求轉發頁面的方式,是在服務端執行的,URL不會改變,服務端偷樑換柱把相關的頁面請求過來展示給使用者看,並且將request物件傳下去了,因此也可以去request容器的值了
2,response.sendRedirect(“add.jsp”);這種就是頁面重定向,是在客戶端執行的,URL會改變,會直接跳轉到使用者請求的頁面呢,並且重新建立了request物件 ,因此傳遞不了request容器的值
八 sercvlet中的CURD
通過servlet控制使用者請求來實現,增刪改查操作,不同的請求,操作不同的DAO
九 servlet的分頁與優化

十 servlet中的檔案下載以及下載時的亂碼處理,
InputStream is=this.getServletContext().getResourceAsStream(filePath);
//設定檔案大小 is.available()獲得檔案的大小
response.setContentLength(is.available());
//設定檔案型別
response.setContentType(“image/png”);
//解決中文,檔名問題
response.setHeader(“content-disposition”, “attachment;filename=”+new String(“UploadFiles/123.png”.getBytes(),”iso-8859-1”));
ServletOutputStream os=response.getOutputStream();
前提:注意我們說是內嵌顯示還是下載,那 一定是針對可內嵌顯示的型別 ,例如”image/jpeg”,”image/png”會再網頁顯示等 ,因為response content type設定成了”application/octet-stream”則不會再網頁顯示,【與setContentType(“image/png”)有關】表示瀏覽器內嵌顯示一個檔案 Content-disposition: inline; filename=foobar.pdf;表示會下載檔案(彈窗), Content-disposition: attachment; filename=foobar.pdf
十一 servlet 中的檔案上傳,以及獲取表單資料
SmartUpload su=new SmartUpload();
su.initialize(this, request, response);
su.setAllowedFilesList(“png,jpg,doc,docx,mp3,mp4,pdf”);//設定允許的檔案上傳的型別
su.setMaxFileSize(1024*1024*3);//設定允許的單個檔案上傳大小
su.setTotalMaxFileSize(1024*1024*30);//設定允許的總的檔案上傳大小
try {
//檔案交接
su.upload();
//獲得表單提交的使用者名稱,必須要在資料交接之後才能獲得
Request req=su.getRequest();
String username=req.getParameter(“username”);
System.out.println(username+”……………name”);
Files flies=su.getFiles();
//flies.getCount()獲得中的檔案數
for (int i = 0; i < flies.getCount(); i++) {
File file=flies.getFile(i);
//判斷上傳檔案是否為空
if(file.getSize()>0){
//儲存檔案
file.saveAs(filepath+java.io.File.separator+UUID.randomUUID().toString()+file.getFileName());
}
}

十二 servlet中初試化引數

十三 servlet 中cookie的使用,儲存中文問題

十四 servlet 中的token驗證

十五servlet中MD5,Base64的加密,

十六 servlet中常用的配置:context_param(全域性變數),load_on_start(在web.xml中設定serlvet的初始化順序),
error_page(配置錯誤頁面處理)

十七 servlet的過濾器filter,以filter的亂碼處理