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

summer1987      2022-02-09     611

关键词:

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

就能打开了:

技术分享图片

 

带你用go搭建一个最简单的web服务了解golang运行web的原理

...任何事情的动态Web程序应该是很轻松的,接下来我们就去学习了解一些关于Web的相关基础,了解一些概念,以及Golang是如何运行一个Web程序的。文章预计分为四个部分逐步更新2023-04-13星期四一更全文共计约3800字阅读大约花费5分... 查看详情

javaee之过滤器入门学习与总结(代码片段)

使用Filter技术来配合开发会使得开发变得简单起来。简单的一个例子就表现在“乱码问题”上。不使用Filter的话,我们有可能需要为每一个网页设置字符编码集,如request.setCharacterEncoding("charsetname");response.setCharacterEncoding("charset")... 查看详情

秋季学期学习总结

本学期主要学习了用C语言来编写一些简单的程序,从最初最简单的“helloworld”开始到逐渐的一些使用技巧。知道了用C语言编写程序的一些基本框架,和一些规则,如scanf语句,printf语句,在这种输入输出上的规则,还有定义字... 查看详情

spark学习笔记之standalone与yarn启动和运行时间测试

Standalone与Yarn启动和运行时间测试: 写一个简单的wordcount:打包上传运行:Standalone启动:运行时间: Yarn启动:   运行时间: 测试结果:Standalone要比Yarn启动快10-15s  查看详情

机器学习知识总结——16.如何实现一个简单的svm算法(代码片段)

文章目录创建具有特征的二维数据实现SVM算法线性核函数梯度下降和损失函数训练实验效果总结在前面的章节里,已经简要的介绍了SVM算法的工作原理,现在在这篇文章里,我们来看看SVM算法的一些简单实现。创建具... 查看详情

kubernetes学习总结(32)——kubernetes的架构原理简单总结

一、Master节点与 Node节点通讯原理Master节点启动时,会运行一个 kube-apiserver 进程,它提供了集群管理的API接口,是集群内各个功能模块之间数据交互和通信的中心枢纽,并且它页提供了完备的集群安全机制。在N... 查看详情

kubernetes学习总结(32)——kubernetes的架构原理简单总结

一、Master节点与 Node节点通讯原理Master节点启动时,会运行一个 kube-apiserver 进程,它提供了集群管理的API接口,是集群内各个功能模块之间数据交互和通信的中心枢纽,并且它页提供了完备的集群安全机制。在N... 查看详情

20175317《java程序设计》第六周学习总结

20175317《Java程序设计》第六周学习总结教材学习内容总结第六周我学习了教材第七章与第十章的内容,了解了内部类、异常类与输入输出流的知识,学到了以下内容:什么是内部类如何编写与运行内部类了解了和子类有关的匿名... 查看详情

大白话系列mysql学习总结之缓冲池(bufferpool)如何支撑高并发和动态调整(代码片段)

如果大家对我的【大白话系列】MySQL学习总结系列感兴趣的话,可以点击关注一波。一、上节回顾在上节《缓冲池(BufferPool)的设计原理和管理机制》中,介绍了缓冲池整体的设计原理。包括几个比较重要的概念:free链表、flush链... 查看详情

ansible学习笔记7-playbooks之执行一个playbook

执行一个playbook上面几节已经初步了解了playbook的语法,那么要如何运行一个playbook呢,这很简单,这里的示例是并行的运行playbook,并行的级别是10ansible-playbookplaybook.yml-f10Ansible-Pull(拉取配置而非推送配置)我们可不可以将ansibl... 查看详情

20165115第一周学习总结

第一周学习中遇到的问题主要学习内容安装JDK与搭建Java运行环境Windows环境下通过记事本进行简单的Java程序的编写出现的问题无法再Windows系统中激活并使用win10系统中自带的Linux运行环境教材中有一个猪八戒的程序,编写完成后... 查看详情

c#学习总结

在此之前,我在中专时学过basic语言,所以在学习c#时,对于讲的知识理解起来不需要太麻烦。但在刚开学那一个月补充的知识,有些是不能理解在以后的学习中碰到了应该理解并掌握。c#中的一些知识例如标识符、关键字还有常... 查看详情

简单的图论问题之单源最短路dijkstra算法(代码片段)

...最短。1、初始化dis[s]=0,其余结点dis为正无穷大。2、找到一个未被标记的、dis[x]最小的结点x,标记x。3、扫描结点x的所有出边(x,y,z),若dis[y] 查看详情

学习总结之arm处理器的运行模式及arm寄存器

1ARM处理器的运行模式 ?ARM处理器不同模式间的切换:1在特权级的运行模式下,可以通过修改程序状态寄存器CPSR的模式控制位,切换运行模式。2通过外部中断或者异常处理过程进行运行模式切换。注意,用户模式下,不能直接... 查看详情

python深入学习之内存管理

语言的内存管理是语言设计的一个重要方面。它是决定语言性能的重要因素。无论是C语言的手工管理,还是Java的垃圾回收,都成为语言最重要的特征。这里以Python语言为例子,说明一门动态类型的、面向对象的语言的内存管理... 查看详情

深入学习flask框架之简单创建一个项目(代码片段)

  在前面一篇讲了如何创建一个虚拟环境,今天这一篇就来说说如何创建一个简单的Flask项目。关于Flask的具体介绍就不详细叙述了,我们只要知道它非常简洁、灵活和扩展性强就够了。它不像Django那样集成度特别高。Flask只是... 查看详情

2018-3-29

...密码时,使用过passwd命令,看一下passwd在哪还有权限。是一个红色的文件,并且权限位前三位不是rwx而是rws第一次见。rwx分别是可读可写可执行。这个s是set_uid的权限。再linux下passwd支持普通 查看详情

第一周学习总结

第一周学习总结第一周学习过程中所遇到的问题和解决方法本周学习的内容Note:自学JAVA第一章安装JDK:学习了如何安装JDK软件应用码云学习内容JAVA第一章的内容主要是关于JAVA的简单介绍,如何安装JDK,简单的JAVA应用程序,了解... 查看详情