本文記錄了瘾晃,以純文本編寫servlet代碼及在命令行編譯程序氢烘,的過程烦却。
以兩種方式實現(xiàn)servlet执桌,并且兩種不同方式的servlet配置方式也不同鄙皇。一種是通過實現(xiàn)javax.servlet.Servlet接口,以java注釋(@WebServlet)的方式對servlet進(jìn)行配置鼻吮;另一種是通過繼承javax.servlet.http.HttpServlet類育苟,以web.xml文件對servlet進(jìn)行配置。
準(zhǔn)備工作:
為了讓javac能夠正確引用servlet相關(guān)的jar椎木,即servlet-api.jar,有幾種設(shè)置方式违柏,其中較為便捷的方式是將servlet-api.jar添加到CLASSPATH中,在環(huán)境變量的設(shè)置中新建用戶變量香椎,如下圖:
servlet-api.jar包含在tomcat的安裝目錄中
除了上面的方式漱竖,還可以在javac命令中手動添加classpath(即添加 -cp 參數(shù)),這里不作討論畜伐。
一屉凯、Servlet方式
項目文件目錄:
|--helloservlet01
| |--src
| |--HelloServlet.java
| |--WEB-INF
| |--classes
| |--test
| |--HelloServlet.class
| |--lib
注:除了HelloServlet.class是編譯得到敷鸦,其余文件夾都需自行創(chuàng)建溉瓶,源文件HelloServlet.java也要自行創(chuàng)建編輯
HelloServlet.java的源代碼為:
package test;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
@WebServlet(name = "HelloServlet", urlPatterns = { "/hello" })
public class HelloServlet implements Servlet {
private transient ServletConfig servletConfig;
@Override
public void init(ServletConfig servletConfig)
throws ServletException {
this.servletConfig = servletConfig;
}
@Override
public ServletConfig getServletConfig() {
return servletConfig;
}
@Override
public String getServletInfo() {
return "My Servlet";
}
@Override
public void service(ServletRequest request,
ServletResponse response) throws ServletException,
IOException {
String servletName = servletConfig.getServletName();
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.print("<html><head></head>"
+ "<body>Hello from " + servletName
+ "</body></html>");
}
@Override
public void destroy() {
}
}
要編譯該文件伤疙,打開命令行切換到src文件夾中,并執(zhí)行javac命令:
javac HelloServlet.java -d ..\WEB-INF\classes
注一:參數(shù) -d 讓編譯得到的HelloServlet.class文件存放到其后面的目錄中
注二:源代碼中的第一行
package test;
讓javac命令自動創(chuàng)建了test文件夾(i.e. WEB-INF\classes\test)
如下圖所示:
要運行程序慎框,將helloservlet01整個文件夾tomcat安裝目錄下的webapps文件夾下(本例是良狈,D:\Programs\apache-tomcat-8.5.50-windows-x64\apache-tomcat-8.5.50\webapps)
打開瀏覽器,輸入http://127.0.0.1:8080/helloservlet01/hello
笨枯,得到如下圖結(jié)果:
注:這里
http://127.0.0.1:8080/helloservlet01/hello
中最后的hello是通過源代碼中@WebServlet(name = "HelloServlet", urlPatterns = { "/hello" })
這一行配置的
二薪丁、HttpServlet方式
項目目錄結(jié)構(gòu):
|--helloservlet02
| |--src
| |--HelloServlet.java
| |--WEB-INF
| |--classes
| |--test
| |--HelloServlet.class
| |--lib
| |--web.xml
HelloServlet.java源代碼:
package test;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloServlet extends HttpServlet {
private String message;
public void init() throws ServletException
{
message = "Hello Servlet";
}
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<h1>" + message + "</h1>");
}
public void destroy()
{
// do nothing
}
}
編譯源文件,在命令行執(zhí)行:
javac HelloServlet.java -d ..\WEB-INF\classes
如下圖所示:
編寫配置文件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">
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>test.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
注一:
<servlet-class>test.HelloServlet</servlet-class>
中要把源代碼里的包test(package test;
)包含進(jìn)去注二:
<url-pattern>/hello</url-pattern>
中的hello
就是瀏覽器要訪問的標(biāo)識
在瀏覽器中輸入http://127.0.0.1:8080/helloservlet02/hello
馅精,得到如下結(jié)果: