JakartaEE servlet
简介
JakartaEE是JavaEE的继承者,Oracle公司将JavaEE的API定义,文档,参考实现,测试TCK和套件都转移给Eclipse开源组织。
JavaSE为J2EE提供了库和语法,J2EE使用Java的库和语法应用在WEB上。这是概念性的区别。
Java SE:标准版Java SE(Java Platform,Standard Edition)。JavaSE以前称为J2SE。
它为开发和部署在桌面,服务器,嵌入式环境和实时环境中使用Java应用程序。
JavaSE包含了支持JavaWeb服务的开发的类,并为Java Platform,Enterprise Edition(Java EE)提供了基础。
企业版Java EE(Java Platform,Enterprise Edition)。这个版本以前称为J2EE。
企业版本帮助开发和部署可移植,健壮,可伸缩切安全的服务器端Java应用程序。
构建 java Enterprise项目








pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0modelVersion><groupId>com.lihaozhegroupId><artifactId>servletartifactId><version>1.0-SNAPSHOTversion><name>servletname><packaging>warpackaging><properties><jdk.version>17jdk.version><maven.compiler.source>17maven.compiler.source><maven.compiler.target>17maven.compiler.target><maven.compiler.compilerVersion>17maven.compiler.compilerVersion><maven.compiler.encoding>utf-8maven.compiler.encoding><project.build.sourceEncoding>utf-8project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding><maven.test.failure.ignore>truemaven.test.failure.ignore><maven.test.skip>truemaven.test.skip><junit.version>5.8.2junit.version>properties><dependencies><dependency><groupId>jakarta.servletgroupId><artifactId>jakarta.servlet-apiartifactId><version>5.0.0version><scope>providedscope>dependency><dependency><groupId>org.junit.jupitergroupId><artifactId>junit-jupiter-apiartifactId><version>${junit.version}version><scope>testscope>dependency><dependency><groupId>org.junit.jupitergroupId><artifactId>junit-jupiter-engineartifactId><version>${junit.version}version><scope>testscope>dependency>dependencies><build><finalName>servletfinalName><plugins><plugin><groupId>org.apache.maven.pluginsgroupId><artifactId>maven-war-pluginartifactId><version>3.3.2version>plugin><plugin><groupId>org.apache.maven.pluginsgroupId><artifactId>maven-compiler-pluginartifactId><version>3.8.1version><configuration><encoding>UTF-8encoding><source>${jdk.version}source><target>${jdk.version}target>configuration>plugin><plugin><groupId>org.apache.maven.pluginsgroupId><artifactId>maven-clean-pluginartifactId><version>3.2.0version>plugin><plugin><groupId>org.apache.maven.pluginsgroupId><artifactId>maven-resources-pluginartifactId><version>3.2.0version>plugin><plugin><groupId>org.apache.maven.pluginsgroupId><artifactId>maven-surefire-pluginartifactId><version>2.22.2version><configuration><skip>trueskip>configuration>plugin><plugin><groupId>org.apache.tomcat.mavengroupId><artifactId>tomcat7-maven-pluginartifactId><version>2.2version><configuration><port>6633port><path>/lhzpath><uriEncoding>UTF-8uriEncoding><username>adminusername><password>adminpassword><url>http://192.168.18.65:8080/manager/texturl>configuration>plugin><plugin><groupId>org.eclipse.jettygroupId><artifactId>jetty-maven-pluginartifactId><version>11.0.9version><configuration><webApp><contextPath>/lhzcontextPath><defaultsDescriptor>${basedir}/src/main/resources/webdefault.xmldefaultsDescriptor>webApp><httpConnector><port>6633port>httpConnector>configuration>plugin>plugins>build>
project>
运行项目

访问主页
http://localhost:6633/lhz/
访问Servlet
访问REST接口
http://localhost:6633/lhz/api/hello-world
远程热部署
修改tomca/conf/tomcat-users.xml
<tomcat-users xmlns="http://tomcat.apache.org/xml"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"version="1.0">
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script"/>
tomcat-users>
修改webapps/manager/META-INF/context.xml和webapps/host-manager/META-INF/context.xml
<Context antiResourceLocking="false" privileged="true" ><CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor"sameSiteCookies="strict" /><Valve className="org.apache.catalina.valves.RemoteAddrValve"allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /><Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
Context>
修改后
<Context antiResourceLocking="false" privileged="true" ><CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor"sameSiteCookies="strict" /><Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
Context>
新建Servlet
新建Servlet(注解方式)

package com.jdyxk.controller;
/*** @author 李昊哲* @Description* @version 1.0* @createTime 2021/8/31 上午10:45*/import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;import java.io.IOException;//@WebServlet(name = "Servlet01", value = "/Servlet01")
@WebServlet(name = "Servlet01", urlPatterns = {"servlet01.action", "servlet01.do"})
public class Servlet01 extends HttpServlet {private static final long serialVersionUID = 5946742088318622256L;/*** @param request 接收用户请求数据* @param response 向用户发送响应数据* @throws ServletException Servlet异常* @throws IOException IO异常*/@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// HttpServletRequest 接收用户请求数据// HttpServletResponse 向用户发送响应数据System.out.println("注解方式启动");}
}


访问注解方式编写的Servlet
http://localhost:6633/lhz/servlet01.action
http://localhost:6633/lhz/servlet01.do
新建Servlet(xml方式)
package com.jdyxk.controller;
/*** @author 李昊哲* @Description* @version 1.0* @createTime 2021/8/31 上午10:58*/import jakarta.servlet.*;
import jakarta.servlet.http.*;import java.io.IOException;public class Servlet02 extends HttpServlet {private static final long serialVersionUID = 2878265913197286928L;/*** @param request 接收用户请求数据* @param response 向用户发送响应数据* @throws ServletException Servlet异常* @throws IOException IO异常*/@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// HttpServletRequest 接收用户请求数据// HttpServletResponse 向用户发送响应数据System.out.println("web.xml方式访问");}
}
编写web.xml文件
<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"version="5.0"><servlet><servlet-name>Servlet02servlet-name><servlet-class>com.jdyxk.controller.Servlet02servlet-class>servlet><servlet-mapping><servlet-name>Servlet02servlet-name><url-pattern>/Servlet02url-pattern>servlet-mapping><servlet-mapping><servlet-name>Servlet02servlet-name><url-pattern>/servlet02.actionurl-pattern>servlet-mapping><servlet-mapping><servlet-name>Servlet02servlet-name><url-pattern>/servlet02.dourl-pattern>servlet-mapping>
web-app>


访问xml方式编写的Servlet
http://localhost:6633/lhz/servlet02.action
http://localhost:6633/lhz/servlet02.do
Servlet响应用户数据
package com.jdyxk.controller;
/*** @author 李昊哲* @Description* @version 1.0* @createTime 2021/8/31 上午11:03*/import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;import java.io.IOException;
import java.io.PrintWriter;@WebServlet(name = "Servlet03", value = "/Servlet03")
public class Servlet03 extends HttpServlet {private static final long serialVersionUID = -4783247332404478078L;/*** @param request 接收用户请求数据* @param response 向用户发送响应数据* @throws ServletException Servlet异常* @throws IOException IO异常*/@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("love love love");// 处理请求数据中文乱码// 处理post请求的中文乱码request.setCharacterEncoding("utf-8");// 处理响应的字符集中文乱码response.setCharacterEncoding("utf-8");// response.setHeader("Content-Type","text/html;charset=utf-8");response.setContentType("text/html;charset=utf-8");PrintWriter writer = response.getWriter();writer.println("love and peace");writer.println("
");writer.println("我爱你中国,亲爱的母亲");writer.flush();writer.close();}}
访问Servlet响应数据
http://localhost:6633/lhz/servlet03
获取网络信息
http://192.168.18.65:6633/lhz/NetworkInfo
NetworkInfo.ajva
package com.jdyxk.http;
/*** @author 李昊哲* @Description* @version 1.0* @createTime 2021/8/31 上午11:42*/import com.jdyxk.commons.localdatetime.BaseLocalDateTime;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;import java.io.IOException;@WebServlet(name = "NetworkInfo", value = "/NetworkInfo")
public class NetworkInfo extends HttpServlet {private static final long serialVersionUID = 3482094487102418998L;@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 客户端(远程机器)// System.out.println("客户端IP地址 >>> " + request.getRemoteAddr());// System.out.println("客户端IP地址 >>> " + request.getRemoteHost());// System.out.println("客户端口号 >>> " + request.getRemotePort());// 服务器端(本地机器)// System.out.println("服务器IP地址 >>> " + request.getLocalAddr());// System.out.println("服务器端口号 >>> " + request.getLocalPort());// System.out.println("请求的URL >>> " + request.getRequestURL());System.out.println(BaseLocalDateTime.nowString() + "\t客户端:" + request.getRemoteAddr() + ":" + request.getRemotePort() + "\t请求的URL:" + request.getRequestURL());}
}
获取请求行信息
http://192.168.18.65:6633/lhz/RequestLine.jsp
在webapp目录新建页面文件RequestLine.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
查询字符串
RequestLine.java
package com.jdyxk.http;
/*** @author 李昊哲* @Description* @version 1.0* @createTime 2021/8/31 上午11:51*/import com.jdyxk.commons.string.StringUtil;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;import java.io.IOException;
import java.util.HashMap;
import java.util.Map;@WebServlet(name = "RequestLine", value = "/RequestLine")
public class RequestLine extends HttpServlet {private static final long serialVersionUID = -1462573233106677460L;@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 获取请求方式System.out.println("请求方式:" + request.getMethod());// 获取路径(URL、URI)System.out.println("请求的URL:" + request.getRequestURL());System.out.println("请求的URI:" + request.getRequestURI());// 获取协议System.out.println("协议:" + request.getProtocol());// 上下文路径System.out.println("请求的上下文路径:" + request.getContextPath());// jsp中 ${pageContext.request.contextPath}// 获取查询字符串System.out.println("请求的查询字符串:" + request.getQueryString());Map<String, String> map = parseQueryString(request.getQueryString());map.forEach((key, value) -> System.out.println("name = " + key + "\tvalue = " + value));// 回到原页面response.sendRedirect("RequestLine.jsp");}/*** 解析查询字符串** @param queryString* @return*/public Map<String, String> parseQueryString(String queryString) {Map<String, String> map = new HashMap<>();if (StringUtil.isBlank(queryString)) {return map;}String[] split = queryString.split("&");for (String param : split) {// account=admin// auth_text=123456String[] strings = param.split("=");map.put(strings[0], strings[1]);}return map;}
}
获取请求头信息
http://192.168.18.65:6633/lhz/RequestHeader
RequestHeader.java
package com.jdyxk.http;
/*** @author 李昊哲* @Description* @version 1.0* @createTime 2021/8/31 下午12:10*/import cn.hutool.http.useragent.UserAgent;
import cn.hutool.http.useragent.UserAgentParser;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;import java.io.IOException;
import java.util.Enumeration;@WebServlet(name = "RequestHeader", value = "/RequestHeader")
public class RequestHeader extends HttpServlet {private static final long serialVersionUID = 1349423243847607898L;@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// System.out.println(request.getHeader("User-Agent"));System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++");Enumeration<String> headerNames = request.getHeaderNames();while (headerNames.hasMoreElements()){String name = headerNames.nextElement();System.out.println(name + ":" + request.getHeader(name));}System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++");String userAgentString = request.getHeader("User-Agent");UserAgent ua = UserAgentParser.parse(userAgentString);System.out.println("浏览器 >>> " + ua.getBrowser().toString());System.out.println("浏览器版本号 >>> " + ua.getVersion().toString());System.out.println("浏览器内核 >>> " + ua.getEngine().toString());System.out.println("浏览器内核版本号 >>> " + ua.getEngineVersion().toString());System.out.println("操作系统 >>> " + ua.getOs().toString());System.out.println("操作系统 >>> " + ua.getPlatform().toString());if (ua.isMobile()){System.out.println("移动端");} else {System.out.println("PC端");}}}
Servlet生命周期



注解方式验证
package com.jdyxk.lifecycle;import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;/*** @author 李昊哲* @version 1.0* @Description* @createTime 2021/9/1 上午8:47*/
@WebServlet(urlPatterns = {"ServletLifeCycle01"})
public class ServletLifeCycle01 extends HttpServlet {private static final long serialVersionUID = 4267392516924911501L;public ServletLifeCycle01() {System.out.println("ServletLifeCycle01实例化 ServletLifeCycle01()");
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
访问Servlet

