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 那它的目录就应该是三层结构comglobal est
2、编译java文件
javac mapMapTest.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 Filesapache-tomcat-9.0.6conf里面复制一个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 Filesapache-tomcat-9.0.6conf下的server.xml里面要加上这句:
<Context path="/mldn" docBase="D:mldnwebdemo"/>
这个节点位于Server /Service/Engine/Host下面。好了到现在,在浏览器中输入:
http://localhost:8080/mldn/helloServlet
就能打开了: