1. 程式人生 > >2018.3.29學習總結之如何運行一個最簡單的Servlet程序

2018.3.29學習總結之如何運行一個最簡單的Servlet程序

ati get png aid 父類 eclips 網上 自己 nco

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, IOException
15 { 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程序