本文记录了,以纯文本编写servlet代码及在命令行编译程序,的过程。
以两种方式实现servlet,并且两种不同方式的servlet配置方式也不同。一种是通过实现javax.servlet.Servlet接口,以java注释(@WebServlet)的方式对servlet进行配置;另一种是通过继承javax.servlet.http.HttpServlet类,以web.xml文件对servlet进行配置。
准备工作:
为了让javac能够正确引用servlet相关的jar,即servlet-api.jar,有几种设置方式,其中较为便捷的方式是将servlet-api.jar添加到CLASSPATH中,在环境变量的设置中新建用户变量,如下图:
servlet-api.jar包含在tomcat的安装目录中
除了上面的方式,还可以在javac命令中手动添加classpath(即添加 -cp 参数),这里不作讨论。
一、Servlet方式
项目文件目录:
|--helloservlet01
| |--src
| |--HelloServlet.java
| |--WEB-INF
| |--classes
| |--test
| |--HelloServlet.class
| |--lib
注:除了HelloServlet.class是编译得到,其余文件夹都需自行创建,源文件HelloServlet.java也要自行创建编辑
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文件夹中,并执行javac命令:
javac HelloServlet.java -d ..\WEB-INF\classes
注一:参数 -d 让编译得到的HelloServlet.class文件存放到其后面的目录中
注二:源代码中的第一行
package test;
让javac命令自动创建了test文件夹(i.e. WEB-INF\classes\test)
如下图所示:
image-20200126130955744.png要运行程序,将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
,得到如下图结果:
注:这里
http://127.0.0.1:8080/helloservlet01/hello
中最后的hello是通过源代码中@WebServlet(name = "HelloServlet", urlPatterns = { "/hello" })
这一行配置的
二、HttpServlet方式
项目目录结构:
|--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
}
}
编译源文件,在命令行执行:
javac HelloServlet.java -d ..\WEB-INF\classes
如下图所示:
image-20200126130836243.png编写配置文件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;
)包含进去注二:
<url-pattern>/hello</url-pattern>
中的hello
就是浏览器要访问的标识
在浏览器中输入http://127.0.0.1:8080/helloservlet02/hello
,得到如下结果:
网友评论