阅读《Java for the Web With Servlets, JSP, and EJB》ing,PART1(Tomcat10.1.19)
文章目录
一、手动编译&部署
1.1编译java文件踩坑
书中TestingServlet代码↓
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class TestingServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println("<HEAD>");
out.println("<TITLE>Servlet Testing</TITLE>");
out.println("</HEAD>");
out.println("<BODY>");
out.println("Welcome to the Servlet Testing Center");
out.println("</BODY>");
out.println("</HTML>");
}
}
tomcat-10.1.19中唯一一个s开头的jar包不是书中说的servlet.jar,而是servlet-api.jar。怀疑已经经过了更新换代。
强行执行会报错程序包javax.servlet不存在
D:\softwares\tomcat\apache-tomcat-10.1.19\webapps\myApp\WEB-INF\classes>set classpath=D:\softwares\tomcat\apache-tomcat-10.1.19\lib\servlet-api.jar
D:\softwares\tomcat\apache-tomcat-10.1.19\webapps\myApp\WEB-INF\classes>javac -encoding utf8 -d . TestingServlet.java
TestingServlet.java:1: 错误: 程序包javax.servlet不存在
import javax.servlet.*;
^
TestingServlet.java:2: 错误: 程序包javax.servlet.http不存在
import javax.servlet.http.*;
^
javax被jakarta替换了,换成↓
import jakarta.servlet.*;
import jakarta.servlet.http.*;
执行后报错↓
D:\softwares\tomcat\apache-tomcat-10.1.19\webapps\myApp\WEB-INF\classes>javac -classpath D:\softwares\tomcat\apache-tomcat-10.1.19\lib\servlet-api.jar -d . TestingServlet.java
TestingServlet.java:5: 错误: 无法访问HttpServlet
public class TestingServlet extends HttpServlet {
^
错误的类文件: D:\softwares\tomcat\apache-tomcat-10.1.19\lib\servlet-api.jar(jakarta/servlet/http/HttpServlet.class)
类文件具有错误的版本 55.0, 应为 52.0
请删除该文件或确保该文件位于正确的类路径子目录中。
参考1——jar包和当前java版本不对应
参考2——tomcat10.1.x需要java 11以上
哭泣TvT
下载一个jdk11,指定javac.exe(D:\softwares\java\jdk-11.0.20\bin\javac.exe),编译
D:\softwares\tomcat\apache-tomcat-10.1.19\webapps\myApp\WEB-INF\classes>D:\softwares\java\jdk-11.0.20\bin\javac.exe -classpath D:\softwares\tomcat\apache-tomcat-10.1.19\lib\servlet-api.jar -d . TestingServlet.java
OK,生成了.class文件
1.2 配置web.xml
从tomcat的默认webapp中复制web.xml到myApp/WEB-INF中
将<web-app></web-app>
标签里面的内容删掉并写入myApp的servlet的相关信息,注意添加servlet-mapping
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
version="6.0"
metadata-complete="true">
<servlet>
<servlet-name>Testing</servlet-name>
<servlet-class>TestingServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Testing</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
</web-app>
1.3 启动并访问
双击启动tomcat-10.1.19(注意要使用对应java版本——java11,配置环境变量JAVA_HOME)
访问:
http://localhost:8080/myApp/test
二、使用IDEA快速编译
每次都来这么一下实在是太麻烦了,搞点便捷的方式,以PrimitiveServlet为例。
- 不要使用@Override
import jakarta.servlet.*;
import java.io.IOException;
public class PrimitiveServlet implements Servlet {
public void init(ServletConfig config) throws ServletException {
System.out.println("init");
}
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
System.out.println("service");
}
public void destroy() {
System.out.println("destroy");
}
public String getServletInfo() {
return null;
}
public ServletConfig getServletConfig() {
return null;
}
}
2.1 pom.xml添加对应依赖
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
<version>10.1.17</version>
</dependency>
2.2 将java文件放在./src/main/java下,并build
- 去掉↓这个第一行的package信息
package com.learning.demo;
-
build
-
得到.class文件,可以直接放在tomcat中WEB-INF/classes中