2018.3.29學習總結之如何運行一個最簡單的Servlet程序
1,我編寫了我的第一個Servlet程序。HelloServlet 繼承自HttpServlet。因此需要導入javax.servlet開頭的一系列包,那麽這些包來自哪裏呢?答案是Tomcat安裝目錄下的servlet-api.jar。
1 package org.lxh.servletdemo; 2 import java.io.IOException; 3 import java.io.PrintWriter; 4 5 import javax.servlet.ServletException; 6 import javax.servlet.http.HttpServlet;7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 10 public class HelloServlet extends HttpServlet { 11 12 @Override 13 public void doGet(HttpServletRequest req, HttpServletResponse resp) 14 throws ServletException, IOException15 { 16 PrintWriter out=resp.getWriter(); 17 out.println("<html>"); 18 out.println("<head><title>MLDNJAVA</title></head>"); 19 out.println("<body>"); 20 out.println("<h1>HELLO WORLD</h1>");21 out.println("</body>"); 22 out.println("</html>"); 23 out.close(); 24 } 25 26 }
那麽如何在Eclipse中導入外部jar包呢?請參考百度經驗:
https://jingyan.baidu.com/article/ca41422fc76c4a1eae99ed9f.html
2,好了,到這裏,這個程序沒有“紅線”錯誤了,我需要編譯一下它。我采用的方式是命令行javac命令的方式。到這裏我遇到了兩個問題:
1>.如何對帶有包名的類以javac命令的方式編譯?
2>.如何設置classpath才能找到servlet-api.jar(其實是找到HelloServlet 繼承的父類HttpServlet,如果classpath沒設置好,那麽總是會報"找不到HttpServlet")
對於第一個問題,作為一個初學者,我也折騰了很長時間,最終看了網上的經驗分享,才搞定:
以下參考自鏈接:https://www.cnblogs.com/terminator-LLH/p/5709062.html
一般初學者在學習java的時候都是不建包的,所以運行java文件的命令行語句也比較傳統。
cd the content of the java file
javac target.java
java target
這樣一個java文件就運行完了。
那一個有包名的java文件應該如何運行呢?在網上百度一下自己試了下都不是很全面或者不怎麽行的通,下面以corejava中的源碼為例運行帶包名的java文件
1、帶包名的java文件首先要在包下。
例如:corejava中的MapTest位於包map下,那它必須在文件夾map下。 又如:package com.global.test 那它的目錄就應該是三層結構com\global\test
2、編譯java文件
javac map\MapTest.java 編譯時需要文件的位置,所以包是以目錄的形式出現的。
3、運行.class文件
java map.MapTest 或 java com.global.test.target 由於.class文件是java獨有的,所以運行時應該也是要遵循java的包規範,這樣寫也就不奇怪了。
值得註意的是無論是編譯還是運行,cmd中的進入的目錄都應該是map的上一級目錄
對於第二個問題,我是這樣配的:
我試過只配到lib目錄下,但不知道為什麽失敗了,於是又精確到servlet-api.jar文件。
3,我編譯成功了,得到了HelloServlet.class文件。如何從瀏覽器運行這個servlet程序呢?
首先,web.xml是要配的。大家不要復制粘貼,會又編碼錯誤。要從D:\Program Files\apache-tomcat-9.0.6\conf裏面復制一個web.xml再修改。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0" metadata-complete="true"> <description> Welcome to Tomcat </description> <display-name>Welcome to Tomcat</display-name> <welcome-file-list> <welcome-file>main.html</welcome-file> <welcome-file>main.htm</welcome-file> <welcome-file>main.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>hello</servlet-name> <servlet-class>org.lxh.servletdemo.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/helloServlet</url-pattern> </servlet-mapping> </web-app>
這樣配了<url-pattern>後可以通過/helloServlet路徑找到對應的<servlet>節點,並找到<servlet-class>所指定的org.lxh.servletdemo.HelloServlet。
修改完web.xml文件後,要重啟服務器,新的配置才能起作用。
註意,HelloServlet.class文件必須放在包名對應的目錄下,這個地方我搞了很久才明白!
然後D:\Program Files\apache-tomcat-9.0.6\conf下的server.xml裏面要加上這句:
<Context path="/mldn" docBase="D:\mldnwebdemo"/>
這個節點位於Server /Service/Engine/Host下面。好了到現在,在瀏覽器中輸入:
http://localhost:8080/mldn/helloServlet
就能打開了:
2018.3.29學習總結之如何運行一個最簡單的Servlet程序