如果想要設置某一url為下載文件的方法如下
需要設置文件響應類型,使用response.setContentType,比如jpeg格式的圖片。如果想要訪問該頁面時出現下載保存的窗口,使用response.setHeader("Content-Disposition", "attachment;filename="+filename.getName())函數。也可以是pdf文件,或者其他格式的,如果想要查找瀏覽器可以識別什么格式的文件,需要到服務器的配置文件中找,比如tomcat服務器中搜索mime-mapping即可查看瀏覽器是別的文件類型。
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("utf-8"); File filename = new File("D:\\chengxu\\ML\\2.jpg"); response.setContentType("image/jpeg"); response.setHeader("Content-Disposition", "attachment;filename="+filename.getName()); OutputStream out = response.getOutputStream(); FileInputStream fileinput = new FileInputStream(filename); byte[] charbuffer = new byte[1024]; int length = 0; while ((length=fileinput.read(charbuffer))!=-1) { out.write(charbuffer, 0, length); } }
2 java web中的servlet第一次訪問時如果初始化中有很多動作需要執行,可能會很慢,如果想要改善這種體驗,可以設置服務器加載時創建對象。即在配置文件中設置
<load-on-startup>n</load-on-startup>,其中n表示一個數字,越小表示優先級越高。
3 java web中是一個單實例多線程的,每次用戶請求服務器會開一個線程。所以要注意線程安全問題,如果出現需要使用鎖來解決。最簡單的解決方法是使用同步語句塊。
4 ServletConfig對象的作用,主要用於獲取配置文件中的配置參數。在Servlet類中使用getServletConfig來獲取對象。
5 在后台Servlet中如何轉發請求和重定向,實現方法如下。跳轉和重定向的區別見jsp指令和重定向
1)轉發請求
RequestDispatcher rd = getServletContext().getRequestDispatcher("/getresource"); rd.forward(request, response);
2)重定向
response.sendRedirect("getresource");
注意:他們之間的區別,轉發時即使是同一應用也需要/開頭;重定向是如果是同一應用程序,不需要以/開頭的,如果是'/'開頭表明是絕對資源路徑。
6 在java web開發中如果使用涉及到路徑問題,盡量使用絕對路徑。不要使用相對路徑,容易出問題。java中‘.’代表的相對路徑是java命令運行所在的路徑。
比如想要獲取一個propertys文件,有兩種方法獲取
1) 使用getRealPath(),先獲取資源路徑,然后再得到資源
2) 使用getResourceAsStream()直接獲取的是文件的輸入流對象
注意:在路徑問題中,‘/’代表的含義,如果是瀏覽器使用則表示web-apps路徑,所有項目的根目錄;如果是服務器使用則表示webRoot目錄,即當前應用的根目錄。
7 在java web中 cookie時間的操作,setMaxAge
1) 正數,表示cookie經過多少秒會過期
2) 負數,表示cookie會存在內存中,會話結束就刪除
3) 0,表示刪除cookie
操作cookie時,如果設置路徑,則發送請求只會將該應用路徑下的cookie發送過去。cookie不能存儲中文。
8 java web中會話管理中有一個重要的東西就是session了,設置session的有效時間有兩種
1)全局設置,在配置文件中添加,此處時間單位是分鍾
<session-config>
<session-timeout>60</session-timeout>
</session-config>
2)在主頁面中設置,此處時間單位是秒
HttpSession session=request.getSession(); session.setMaxInactiveInterval(3600)
session技術也是用到了cookie技術的,他會在瀏覽器端存儲一個會話id,但是如果瀏覽器關閉,則消失。說明這個cookie是存儲在內存中,如果想要使瀏覽器關閉再打開可以繼續使用之前的會話的話,需要修改session id的存儲時間為正數,這樣下次訪問同一應用時可以使用上一次保存在session中的內容。