Browse Source

1117 使用Servlet

Demi 6 months ago
parent
commit
0efb681a9b

+ 13 - 1
tomcat-demo/src/main/java/com/sf/tomcatdemo/HelloServlet.java

@@ -2,18 +2,30 @@ package com.sf.tomcatdemo;
 
 import java.io.*;
 
+import jakarta.servlet.ServletConfig;
 import jakarta.servlet.http.*;
 import jakarta.servlet.annotation.*;
 
-@WebServlet(name = "helloServlet", value = "/hello-servlet")
+// 本质上是对配置文件的代替
+@WebServlet(
+        name = "helloServlet",
+        value = "/hello-servlet",
+        loadOnStartup = 1,
+        initParams = {@WebInitParam(name = "encoding",value = "utf-8")}
+)
 public class HelloServlet extends HttpServlet {
     private String message;
 
     public void init() {
+        System.out.println("HelloServlet init");
         message = "Hello World!";
     }
 
     public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
+        ServletConfig servletConfig = getServletConfig();
+        String encoding = servletConfig.getInitParameter("encoding");
+        System.out.println("encoding = " + encoding);
+
         response.setContentType("text/html");
 
         // Hello

+ 46 - 2
tomcat-demo/src/main/java/com/sf/tomcatdemo/UserServlet.java

@@ -1,5 +1,6 @@
 package com.sf.tomcatdemo;
 
+import jakarta.servlet.ServletConfig;
 import jakarta.servlet.ServletException;
 import jakarta.servlet.http.HttpServlet;
 import jakarta.servlet.http.HttpServletRequest;
@@ -7,9 +8,10 @@ import jakarta.servlet.http.HttpServletResponse;
 
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.util.Enumeration;
 
 // 协议名 + ip地址 + 端口号 + 项目名(上下文) + 路径
-// http://localhost:8080/tomcat_demo/user
+// http://localhost:8080/user
 public class UserServlet extends HttpServlet {
 
     // 通过右键 - 重写方法
@@ -17,8 +19,50 @@ public class UserServlet extends HttpServlet {
     @Override
     protected void service(HttpServletRequest req, HttpServletResponse resp)
             throws ServletException, IOException {
+
+        System.out.println("------------UserServlet-----------");
+        // 请求方式
+        String method = req.getMethod();
+        System.out.println(method);
+        // 请求资源
+        String requestURI = req.getRequestURI();
+        System.out.println(requestURI);
+        // 应用上下文 应用名称
+        String contextPath = req.getContextPath();
+        System.out.println(contextPath);
+        // 查询字符串
+        // http://localhost:8080/user?username=admin  这里指username=admin
+        String queryString = req.getQueryString();
+        System.out.println(queryString);
+
+
+        System.out.println("------------UserServlet Config-----------");
+        // 获取config配置项 初始化参数
+        ServletConfig servletConfig = getServletConfig();
+        // 获取所有参数名 返回一个枚举
+        Enumeration<String> parameterNames = servletConfig.getInitParameterNames();
+        while (parameterNames.hasMoreElements()) {
+            String parameterName = parameterNames.nextElement();
+            // 通过参数名获取参数值
+            String parameterValue = servletConfig.getInitParameter(parameterName);
+            System.out.println(parameterName + "=" + parameterValue);
+        }
+
+        // 静态资源和动态资源
+        // html页面本身是静态资源  这里拼接的动态效果 是动态资源
+
+        // 设置响应的 内容类型 以及 编码格式
+        resp.setContentType("text/html;charset=UTF-8");
         // 处理请求和响应
         PrintWriter writer = resp.getWriter();
-        writer.write("hello UserServlet");
+//        writer.write("hello UserServlet");
+        writer.write("<h3>获取的请求方式</h3>");
+        writer.write(method + "<br>");
+        writer.write("<h3>获取的请求方式</h3>");
+        writer.write(requestURI + "<br>");
+        writer.write("<h3>获取的应用上下文</h3>");
+        writer.write(contextPath + "<br>");
+        writer.write("<h3>获取的查询字符串</h3>");
+        writer.write(queryString);
     }
 }

+ 21 - 0
tomcat-demo/src/main/java/com/sf/tomcatdemo/startup/MyServlet1.java

@@ -0,0 +1,21 @@
+package com.sf.tomcatdemo.startup;
+
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
+import java.io.IOException;
+
+public class MyServlet1 extends HttpServlet {
+
+    @Override
+    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+        System.out.println("MyServlet1 service");
+    }
+
+    @Override
+    public void init() throws ServletException {
+        System.out.println("MyServlet1 init");
+    }
+}

+ 22 - 0
tomcat-demo/src/main/java/com/sf/tomcatdemo/startup/MyServlet2.java

@@ -0,0 +1,22 @@
+package com.sf.tomcatdemo.startup;
+
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
+import java.io.IOException;
+
+public class MyServlet2 extends HttpServlet {
+
+    @Override
+    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+        System.out.println("MyServlet2 service");
+    }
+
+    @Override
+    public void init() throws ServletException {
+        System.out.println("MyServlet2 init");
+    }
+
+}

+ 43 - 1
tomcat-demo/src/main/webapp/WEB-INF/web.xml

@@ -1,14 +1,33 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <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_5_0.xsd"
+         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee 
+         https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
          version="5.0">
+    
+<!--    当前文件也使用了约束 约束了应该有哪些标签-->
+<!--    <index></index>-->
+
+    <!-- 可以自定义启动项目后的页面(首页)   -->
+    <welcome-file-list>
+        <!--  这里可以定义多个 如果第一个找不到 会顺延向下查找  -->
+        <welcome-file>login1.html</welcome-file>
+        <welcome-file>index.jsp</welcome-file>
+    </welcome-file-list>
 
     <!--  有这样一个Servlet 声明名字和对应的类路径  -->
     <!--  可以通过反射 使用类路径来创建对象 然后调用对象的service方法  -->
     <servlet>
         <servlet-name>UserServlet</servlet-name>
         <servlet-class>com.sf.tomcatdemo.UserServlet</servlet-class>
+        <init-param>
+            <param-name>username</param-name>
+            <param-value>default</param-value>
+        </init-param>
+        <init-param>
+            <param-name>password</param-name>
+            <param-value>123456</param-value>
+        </init-param>
     </servlet>
     <!--  声明这个Servlet 对应的路径  就可以根据路径找到Servlet  -->
     <servlet-mapping>
@@ -29,4 +48,27 @@
         <!--    *.action  指的是所有以action作为后缀的映射路径 -->
         <!--    /  指的是通配所有资源的映射路径 -->
     </servlet-mapping>
+
+    <servlet>
+        <servlet-name>MyServlet1</servlet-name>
+        <servlet-class>com.sf.tomcatdemo.startup.MyServlet1</servlet-class>
+        <!--  load-on-startup 意思是在启动时是否加载  配置了这个值 那么更小的值先被初始化   -->
+        <!--  没有写load-on-startup 时 servlet是在第一次调用时被加载      -->
+        <load-on-startup>1</load-on-startup>
+    </servlet>
+    <servlet-mapping>
+        <servlet-name>MyServlet1</servlet-name>
+        <url-pattern>/servlet1</url-pattern>
+    </servlet-mapping>
+
+    <servlet>
+        <servlet-name>MyServlet2</servlet-name>
+        <servlet-class>com.sf.tomcatdemo.startup.MyServlet2</servlet-class>
+        <load-on-startup>2</load-on-startup>
+    </servlet>
+    <servlet-mapping>
+        <servlet-name>MyServlet2</servlet-name>
+        <url-pattern>/servlet2</url-pattern>
+    </servlet-mapping>
+
 </web-app>

+ 2 - 0
xml-demo/src/main/java/com/sf/tomcat/MyTomcat.java

@@ -27,8 +27,10 @@ public class MyTomcat {
     }
 
     // 记录servlet名字和servlet具体对象的映射关系
+    // key -> servlet-name  value -> clsname对应的对象
     public static HashMap<String, MyHttpServlet> servletMapping = new HashMap<>();
     // 记录servlet名字和路径的映射关系
+    // key -> url-pattern  value -> servlet-name
     public static HashMap<String,String> urlMapping = new HashMap<>();
 
     private static void init() throws Exception {