2018.3.29学习总结之如何运行一个最简单的Servlet程序

Posted summer1987

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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, 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程序的主要内容,如果未能解决你的问题,请参考以下文章

批处理学习总结之常用符号

Qt学习 之 Socket通信(世界上最简单的例子了)

2018.3.29 单例模式

第六周周总结

Java并发和高并发学习总结- J.U.C之工具类

java 总结