1717
1818public class TomcatServerTest {
1919
20- private final String helloResponseText = "Hello, World! 欢迎来到 Tomcat embedded server!" ;
20+ private static final int PORT = 8080 ;
21+ private static final String CONTEXT_PATH = "" ;
22+ private static final String BASE_DIR = new File ("src/main/webapp" ).getAbsolutePath ();
23+ private static final String HELLO_RESPONSE_TEXT = "Hello, World! 欢迎来到 Tomcat embedded server!" ;
2124
2225 @ Test
2326 public void testTomcatServerStartup () throws Exception {
2427 // 创建嵌入式 Tomcat 实例并指定端口
2528 Tomcat tomcat = new Tomcat ();
26- int port = 8080 ;
27- tomcat .setPort (port );
29+ tomcat .setPort (PORT );
2830
29- // 输出一些调试信息
30- System .out .println ("Initializing Tomcat server on port " + port + "..." );
31+ System .out .println ("Initializing Tomcat server on port " + PORT + "..." );
3132
3233 // 获取 Tomcat 的 Connector 信息
3334 Connector connector = tomcat .getConnector ();
3435 System .out .println ("Tomcat connector details: " + connector );
3536
36- // 创建 Web 应用上下文
37- String contextPath = "" ;
38- String baseDir = new File ("src/main/webapp" ).getAbsolutePath ();
39- System .out .println ("Base directory for the web application: " + baseDir );
40-
4137 // 创建和添加上下文
42- Context context = tomcat .addContext (contextPath , baseDir );
38+ Context context = tomcat .addContext (CONTEXT_PATH , BASE_DIR );
4339 System .out .println ("Web application context added at: " + context .getPath ());
4440
4541 // 添加一个简单的 Servlet
4642 Tomcat .addServlet (context , "HelloServlet" , new HttpServlet () {
4743 @ Override
4844 protected void doGet (HttpServletRequest req , HttpServletResponse resp ) throws IOException {
4945 resp .setContentType ("text/html; charset=UTF-8" );
50- resp .getWriter ().write (helloResponseText );
46+ resp .getWriter ().write (HELLO_RESPONSE_TEXT );
5147 }
5248 });
5349 context .addServletMappingDecoded ("/hello" , "HelloServlet" );
5450 System .out .println ("Servlet '/hello' mapped successfully." );
5551
5652 // 启动 Tomcat 服务器
5753 tomcat .start ();
58- System .out .println ("Tomcat started successfully on port " + port + "." );
54+ System .out .println ("Tomcat started successfully on port " + PORT + "." );
55+
56+ // 增加断言,验证连接器状态
57+ assertEquals ("STARTED" , tomcat .getConnector ().getStateName (), "Tomcat 连接器状态应为 STARTED" );
5958
60- // 验证 /hello 请求
61- testHelloRequest ( port );
59+ // 可以添加一些延迟,确保服务器完全启动
60+ Thread . sleep ( 1000 );
6261
63- // 获取 Tomcat 服务器信息
64- String serverInfo = tomcat .getServer ().getStateName ();
65- System .out .println ("Tomcat server info: " + serverInfo );
62+ try {
63+ // 验证 /hello 请求
64+ testHelloRequest (PORT );
65+ } finally {
66+ // 关闭 Tomcat 服务器,在测试场景下避免一直阻塞
67+ tomcat .stop ();
68+ tomcat .destroy ();
69+ }
6670
67- // 关闭 Tomcat 服务器,在测试场景下避免一直阻塞
68- tomcat .stop ();
69- tomcat .destroy ();
71+ // 输出所有测试通过的信息
72+ System .out .println ("所有测试通过!" );
7073 }
7174
7275 private void testHelloRequest (int port ) throws IOException {
7376 // 构建请求 URL
7477 URL url = new URL ("http://localhost:" + port + "/hello" );
75- // 打开 HTTP 连接
7678 HttpURLConnection connection = (HttpURLConnection ) url .openConnection ();
77- // 设置请求方法为 GET
78- connection .setRequestMethod ("GET" );
79-
80- // 获取响应状态码
81- int responseCode = connection .getResponseCode ();
82- // 验证响应状态码是否为 200
83- assertEquals (200 , responseCode , "响应状态码应为 200" );
84-
85- // 读取响应内容
86- BufferedReader reader = new BufferedReader (new InputStreamReader (connection .getInputStream ()));
87- StringBuilder response = new StringBuilder ();
88- String line ;
89- while ((line = reader .readLine ()) != null ) {
90- response .append (line );
79+ try {
80+ // 设置请求方法为 GET
81+ connection .setRequestMethod ("GET" );
82+
83+ // 获取响应状态码
84+ int responseCode = connection .getResponseCode ();
85+ // 验证响应状态码是否为 200
86+ assertEquals (200 , responseCode , "响应状态码应为 200" );
87+
88+ // 读取响应内容
89+ try (BufferedReader reader = new BufferedReader (new InputStreamReader (connection .getInputStream ()))) {
90+ StringBuilder response = new StringBuilder ();
91+ String line ;
92+ while ((line = reader .readLine ()) != null ) {
93+ response .append (line );
94+ }
95+ // 验证响应内容是否符合预期
96+ assertEquals (HELLO_RESPONSE_TEXT , response .toString (), "响应内容不符合预期" );
97+ }
98+ } catch (IOException e ) {
99+ throw new RuntimeException (e );
91100 }
92- reader .close ();
93-
94- // 验证响应内容是否符合预期
95- assertEquals (helloResponseText , response .toString (), "响应内容不符合预期" );
96101 }
97102}
0 commit comments