① 前言

什么是Java Servlet?
菜鸟教程: Java Servlet是运行在Web服务器或者应用服务器上的程序,作为来自Web浏览器或者其他HTTP客户端的请求与HTTP服务器上的数据库或者应用程序之间的中间层
为什么会用上这么个玩意呢,原因是我需要创建一个工程,要求 前端为一个完整的网页,并且可以与后端交互,说白了就是在前段网页点击内容,调用后台的功能函数,由于后台功能函数我是使用Java语言,也就是相当于使用Javascript调用Java,在网上查询了相关资料后决定采用这个工具试一下

需要下载一个Apache Tomcat作为Web测试服务器
3.jpg

菜鸟Servlet教程

② 基本用法

启动服务器
startup.bat

关闭服务器
shutdown.bat

③ 环境配置

我配置遵循的教程

配置完成后可以通过cmd进入目录的bin路径中运行startup.bat

④(problem)控制台中文乱码问题

1.jpg

进入tomcat下的conf目录,打开logging-properties文件,修改
java.util.logging.ConsoleHandler.encoding = UTF-8

java.util.logging.ConsoleHandler.encoding = GBK
即可

2.jpg

⑤(problem)javac编译Java类出现不存在Servlet包的问题

5.jpg

解决方法:设置classpath
需要找到你的servlet-api.jar所处的位置,一般是tomcat目录下的lib目录中
然后将该文件创建为classpath(路径顺带着文件名!)
创建完成后再尝试基本可以成功了(我是成功了)

6.jpg

⑤ 首次测试

解决了一系列问题后进行第一次测试

  1. 编写Java类
  2. 放到目录中进行javac编译成class文件
  3. web.xml中配置网页
  4. 启动服务器,输入特定域名

Java代码(务必说明一下,编写的类必须继承HttpServlet,否则会有各种莫名其妙的错误)

import javax.servlet.*;
import java.io.IOException;
import javax.servlet.http.*;
import java.io.*;

public class Main extends HttpServlet  {
    private String message;
    public void init() throws ServletException {
        message = "I WANT TO TEST";
    }
    /*public void service(ServletRegistration request,ServletResponse response) throws  ServletException, IOException {

    }*/
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<h1>"+message+"</h1>");
        out.println("<p>"+"cacscavfdfgdrbhrfbfdsv is a gug"+"</p>");
        // Servlet 代码
    }
    public void destory(){

    }
}

结果很明显,成功了
7.jpg

⑥ GET方法

默认的从浏览器向Web服务器传递信息的方法,会产生一个很长的字符串,类似下面这种
http://www.test.com/hello?key1=value1&key2=value2

  • GET方法有大小限制,请求字符串中最多只能有1024个字符

Servlet中使用方法doGet()来处理GET请求

⑥ POST方法

POST打包信息的方式与GET差不多,但是POST不把信息作为URL中 ? 字符后的文本字符串进行发送,而是把这些信息作为一个单独的信息,消息以标准输出的形式传到后台程序

Servlet中使用doPost()来传递POST请求

⑦(problem)javac编译Java类出现“编码GBK的不可映射字符(中文)”

解决方法来源
8.jpg
将编译指令改成
javac -encoding UTF-8 Target.java

⑧(problem)测试网页界面中文显示为问号

9.jpg

解决方法来源

都忘了在Node.js中有遇到过这个问题了,其实很简单,在编写的Java类中将下列代码
response.setContentType("text/html");
设置为
response.setContentType("text/html;charset=UTF-8");
即可解决问题

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议