您好,登錄后才能下訂單哦!
本篇內容介紹了“Java Servlet程序實例分析”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Servlet運行在服務端(tomcat)的java程序。是sun公司的一套規范,就是動態資源。
Servlet作用
用來接收客戶端的請求,處理請求,響應給瀏覽器的動態資源。
但Servlet本質就是java代碼,通過java的API動態的向客戶端傳輸數據內容。
Servlet與普通的java程序的區別:
1,必須實現Servlet接口
2,必須在servlet容器(tomcat服務器)中運行
3,servlet程序可以接收用戶請求的參數以及向瀏覽器輸出數據。
Servlet接口并不是JDK中的接口,所以我們需要導入jar包。javaweb項目是在WEB-INF/lib目錄中存放jar包。tomcat是一個庫,里面有Servlet的jar包,所以我們可以不用在lib目錄中導入了。通過maven也可以依賴。
怎么通過瀏覽器訪問Servlet呢?
可以通過配置web.xml映射路徑,使用場景:不是自己寫的Servlet,或者jar包中的Servlet,你沒法在別人寫的代碼上加注解,所以就得使用配置web.xml映射路徑的方式去使用別人寫的servlet.
<servlet> <!--自定義,一般為類名--> <servlet-name>servletDemo1</servlet-name> <!--一定是package + .類名--> <servlet-class>day08_servlet.ServletDemo1</servlet-class> </servlet> <!--給Servlet提供(映射)一個可供客戶端訪問的URI--> <servlet-mapping> <!--和servlet中的name必須相同--> <servlet-name>servletDemo1</servlet-name> <!-- servlet的映射路徑 --> <!-- 全路徑匹配/servlet 或者/*通配符匹配 或者擴展名匹配*.do--> <url-pattern>/servlet</url-pattern> </servlet-mapping>
第二種方式@WebServlet注解。自己寫的Servlet通過注解@WebServlet方式比較方便
@WebServlet(name = "helloServlet", value = "/hello-servlet")
Servlet生命周期:
1,默認是第一次有請求訪問這個servlet的時候創建,創建出來之后會將這個Servlet的對象存儲到tomcat容器當中。
2,當服務關閉時,Servlet對象才會銷毀
Servlet生命周期方法:
1,init()會在Servlet初始化出來的時候使用,會調用一次
能否配置Servlet在服務器啟動的時候就創建呢?
可以在web.xml中配置,例如DefaultServlet(靜態資源訪問)就是在tomcat的配置文件中配置好了
如果不用配置文件配置可以使用@WebServlet注解中的loadOnStarup配置。
2,service()會在Servlet接收到請求時候調用
3,destroy()會在servlet對象被銷毀之前調用
ServletConfig對象的介紹;用于獲取servlet配置時候的初始化參數的
idea新建一個Servlet快捷方式
HttpServletRequest
請求轉發:只能轉發到項目類的路徑,并且瀏覽器端url不跳轉,原理是服務器請求轉發
request.getRequestDispatcher("/test.jsp").forward(request, response);
如果一個資源在WEB-INF目錄下,只能使用請求轉發才能訪問到
request作為域對象,可以在不同的Servlet之間進行數據共享,但是它只能在同一次請求中進行數據共享。
HttpServletResponse
HttpServletResponse詳解_平庸的俗人的博客-CSDN博客_httpservletresponse
向客戶端寫數據
//用字符流向瀏覽器輸出文本 PrintWriter writer = response.getWriter(); //write()方法只能輸出字符串,如果輸入int,float等類型,則會有問題 writer.write("嘻嘻"); //println方法可以輸出純數字,字符串 writer.println(88); //1.獲取字節輸出流 ServletOutputStream sos = response.getOutputStream(); //2.輸出數據 sos.write("hello你好".getBytes("utf-8"));
ServletContext作用
作為域對象存取數據,讓Servlet共享,所有的請求都可以進行數據共享
ServletContext servletContext = getServletContext(); servletContext.setAttribute("username","zhangsan"); servletContext.getAttribute("username");
獲得文件的MIME類型(文件下載)
ServletContext servletContext = getServletContext(); servletContext.getMimeType("文件名");
獲得全局初始化參數
獲得web資源路徑,可以將web資源轉換為字節輸入流
@WebServlet(name = "Test2Servlet", value = "/Test2Servlet") public class Test2Servlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * 把文件轉成流的幾種方式 */ //方式一 FileInputStream fileInputStream = new FileInputStream("E:\\java重新學習\\demo\\src\\main\\webapp\\2222.jpg"); //方式二,使用類加載器將文件轉換成流 //只能讀取到resources目錄下面的文件, //resources是類路徑,編譯后的路徑classes。 //Test2Servlet.class.getClassLoader()類加載器默認能找到類路徑(classes) //如果你要找webapp下路徑的文件得../../ InputStream resourceAsStream = Test2Servlet.class.getClassLoader().getResourceAsStream("2222.jpg"); //使用ServletContext可以獲取webapp里面資源的真實路徑 ServletContext servletContext = getServletContext(); String realPath = servletContext.getRealPath("2222.jpg"); //然后通過真實路徑 FileInputStream fileInputStream1 = new FileInputStream(realPath); //或者servletContext是webapp路徑 InputStream resourceAsStream1 = servletContext.getResourceAsStream("2222.jpg"); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } }
在web項目中,將文件轉換成流,通常使用這兩種方式:
1,如果文件在resources中,就使用類加載器
2,如果文件在webapp目錄下,就使用ServletContext
“Java Servlet程序實例分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。