{"id":830,"date":"2023-06-01T18:17:29","date_gmt":"2023-11-04T13:49:15","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/index.php\/2023\/11\/30\/java-servlet-%e8%bf%87%e6%bb%a4%e5%99%a8%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/"},"modified":"2025-08-03T11:35:11","modified_gmt":"2025-08-03T03:35:11","slug":"java-servlet-%e8%bf%87%e6%bb%a4%e5%99%a8%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/java-servlet-%e8%bf%87%e6%bb%a4%e5%99%a8%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/","title":{"rendered":"Java Servlet\u8fc7\u6ee4\u5668\u5b8c\u5168\u6307\u5357\uff1a\u4ece\u5165\u95e8\u5230\u7cbe\u901a\u7684\u5b9e\u6218\u6559\u7a0b"},"content":{"rendered":"<p>Java Servlet \u8fc7\u6ee4\u5668\u7528\u4e8e\u62e6\u622a\u5ba2\u6237\u7aef\u8bf7\u6c42\u5e76\u8fdb\u884c\u4e00\u4e9b\u9884\u5904\u7406\u3002\u5b83\u8fd8\u53ef\u4ee5\u62e6\u622a\u54cd\u5e94\u5e76\u5728\u53d1\u9001\u5230\u5ba2\u6237\u7aef\u4e4b\u524d\u8fdb\u884c\u540e\u5904\u7406\uff0c\u7528\u4e8e\u7f51\u7edc\u5e94\u7528\u7a0b\u5e8f\u3002\u8fd9\u662f Web \u5e94\u7528\u7a0b\u5e8f\u6559\u7a0b\u7cfb\u5217\u7684\u7b2c\u56db\u7bc7\u6587\u7ae0\uff0c\u4f60\u53ef\u80fd\u4e5f\u60f3\u67e5\u770b\u4e4b\u524d\u7684\u6587\u7ae0\u3002<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>Java\u7f51\u9875\u5e94\u7528\u7a0b\u5e8f<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>Java Servlet\u6559\u7a0b<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>Servlet\u4f1a\u8bdd\u7ba1\u7406<\/ol>\n<h2>Servlet \u8fc7\u6ee4\u5668\u5728\u672c\u6587\u4e2d\uff0c\u6211\u4eec\u5c06\u5b66\u4e60Java\u4e2d\u7684Servlet Filter\u3002\u6211\u4eec\u5c06\u63a2\u8ba8Servlet\u8fc7\u6ee4\u5668\u7684\u5404\u79cd\u7528\u9014\uff0c\u4ee5\u53ca\u5982\u4f55\u521b\u5efa\u8fc7\u6ee4\u5668\uff0c\u5e76\u901a\u8fc7\u4e00\u4e2a\u7b80\u5355\u7684Web\u5e94\u7528\u7a0b\u5e8f\u6765\u5b66\u4e60\u5176\u4f7f\u7528\u65b9\u6cd5\u3002<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u6211\u4eec\u4e3a\u4ec0\u4e48\u9700\u8981Servlet\u8fc7\u6ee4\u5668\uff1f<\/ol>\n<\/li>\n<\/ol>\n<p>\u5728\u4e0a\u4e00\u7bc7\u6587\u7ae0\u4e2d\uff0c\u6211\u4eec\u5b66\u4e60\u4e86\u5982\u4f55\u5728Web\u5e94\u7528\u7a0b\u5e8f\u4e2d\u7ba1\u7406\u4f1a\u8bdd\uff0c\u5982\u679c\u6211\u4eec\u60f3\u786e\u4fdd\u53ea\u6709\u5728\u7528\u6237\u4f1a\u8bdd\u6709\u6548\u65f6\u624d\u80fd\u8bbf\u95ee\u8d44\u6e90\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528Servlet\u4f1a\u8bdd\u5c5e\u6027\u6765\u5b9e\u73b0\u3002\u8fd9\u79cd\u65b9\u6cd5\u5f88\u7b80\u5355\uff0c\u4f46\u5982\u679c\u6211\u4eec\u6709\u5f88\u591aServlet\u548cJSP\uff0c\u7531\u4e8e\u5197\u4f59\u4ee3\u7801\u7684\u5b58\u5728\uff0c\u5c06\u5f88\u96be\u7ef4\u62a4\u3002\u5982\u679c\u5c06\u6765\u8981\u66f4\u6539\u5c5e\u6027\u540d\u79f0\uff0c\u5c31\u5fc5\u987b\u66f4\u6539\u6240\u6709\u8fdb\u884c\u4f1a\u8bdd\u8ba4\u8bc1\u7684\u4f4d\u7f6e\u3002\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u6709\u4e86Servlet\u8fc7\u6ee4\u5668\u3002Servlet\u8fc7\u6ee4\u5668\u662f\u53ef\u63d2\u62d4\u7684Java\u7ec4\u4ef6\uff0c\u6211\u4eec\u53ef\u4ee5\u5728\u5c06\u8bf7\u6c42\u53d1\u9001\u5230Servlet\u4e4b\u524d\u62e6\u622a\u548c\u5904\u7406\u8bf7\u6c42\uff0c\u5e76\u5728Servlet\u4ee3\u7801\u5b8c\u6210\u4e4b\u540e\u3001\u5bb9\u5668\u5c06\u54cd\u5e94\u53d1\u9001\u56de\u5ba2\u6237\u7aef\u4e4b\u524d\u5904\u7406\u54cd\u5e94\u3002\u4e00\u4e9b\u5e38\u89c1\u7684\u4f7f\u7528Servlet\u8fc7\u6ee4\u5668\u7684\u4efb\u52a1\u5305\u62ec\uff1a<\/p>\n<p>\u5c06\u8bf7\u6c42\u53c2\u6570\u8bb0\u5f55\u5230\u65e5\u5fd7\u6587\u4ef6\u4e2d\u3002<br \/>\n\u5bf9\u8bf7\u6c42\u8fdb\u884c\u8eab\u4efd\u9a8c\u8bc1\u548c\u6388\u6743\u3002<br \/>\n\u5728\u5c06\u8bf7\u6c42\u53d1\u9001\u5230Servlet\u4e4b\u524d\u683c\u5f0f\u5316\u8bf7\u6c42\u4f53\u6216\u5934\u90e8\u3002<br \/>\n\u5bf9\u53d1\u9001\u7ed9\u5ba2\u6237\u7aef\u7684\u54cd\u5e94\u6570\u636e\u8fdb\u884c\u538b\u7f29\u3002<br \/>\n\u901a\u8fc7\u6dfb\u52a0\u4e00\u4e9bCookie\u3001\u5934\u90e8\u4fe1\u606f\u7b49\u6765\u4fee\u6539\u54cd\u5e94\u3002<\/p>\n<p>\u6b63\u5982\u6211\u4e4b\u524d\u63d0\u5230\u7684\uff0cServlet\u8fc7\u6ee4\u5668\u662f\u53ef\u63d2\u62d4\u7684\uff0c\u5e76\u4e14\u5728\u90e8\u7f72\u63cf\u8ff0\u7b26\uff08web.xml\uff09\u6587\u4ef6\u4e2d\u8fdb\u884c\u914d\u7f6e\u3002Servlet\u548c\u8fc7\u6ee4\u5668\u5f7c\u6b64\u4e0d\u77e5\u9053\uff0c\u6211\u4eec\u53ea\u9700\u901a\u8fc7\u7f16\u8f91web.xml\u6dfb\u52a0\u6216\u5220\u9664Servlet\u8fc7\u6ee4\u5668\u3002\u6211\u4eec\u53ef\u4ee5\u4e3a\u5355\u4e2a\u8d44\u6e90\u6dfb\u52a0\u591a\u4e2a\u8fc7\u6ee4\u5668\uff0c\u5e76\u4e14\u53ef\u4ee5\u5728web.xml\u4e2d\u4e3a\u5355\u4e2a\u8d44\u6e90\u521b\u5efa\u4e00\u4e2a\u8fc7\u6ee4\u5668\u94fe\u3002\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5b9e\u73b0javax.servlet.Filter\u63a5\u53e3\u6765\u521b\u5efaServlet\u8fc7\u6ee4\u5668\u3002<\/p>\n<p>Servlet\u8fc7\u6ee4\u5668\u63a5\u53e3<\/p>\n<p>Servlet\u8fc7\u6ee4\u5668\u63a5\u53e3\u7c7b\u4f3c\u4e8eServlet\u63a5\u53e3\uff0c\u6211\u4eec\u9700\u8981\u5b9e\u73b0\u5b83\u6765\u521b\u5efa\u81ea\u5df1\u7684Servlet\u8fc7\u6ee4\u5668\u3002Servlet\u8fc7\u6ee4\u5668\u63a5\u53e3\u5305\u542b\u4e86\u8fc7\u6ee4\u5668\u7684\u751f\u547d\u5468\u671f\u65b9\u6cd5\uff0c\u7531Servlet\u5bb9\u5668\u7ba1\u7406\u3002Servlet\u8fc7\u6ee4\u5668\u63a5\u53e3\u7684\u751f\u547d\u5468\u671f\u65b9\u6cd5\u5305\u62ec\uff1a<\/p>\n<p>void init(FilterConfig paramFilterConfig) &#8211; \u5f53\u5bb9\u5668\u521d\u59cb\u5316\u8fc7\u6ee4\u5668\u65f6\uff0c\u8c03\u7528\u8be5\u65b9\u6cd5\u3002\u8fd9\u4e2a\u65b9\u6cd5\u5728\u8fc7\u6ee4\u5668\u7684\u751f\u547d\u5468\u671f\u4e2d\u53ea\u88ab\u8c03\u7528\u4e00\u6b21\uff0c\u6211\u4eec\u5e94\u8be5\u5728\u8fd9\u4e2a\u65b9\u6cd5\u4e2d\u521d\u59cb\u5316\u4efb\u4f55\u8d44\u6e90\u3002FilterConfig\u7531\u5bb9\u5668\u7528\u4e8e\u63d0\u4f9b\u521d\u59cb\u5316\u53c2\u6570\u548cServlet\u4e0a\u4e0b\u6587\u5bf9\u8c61\u7ed9\u8fc7\u6ee4\u5668\u3002\u6211\u4eec\u53ef\u4ee5\u5728\u8fd9\u4e2a\u65b9\u6cd5\u4e2d\u629b\u51faServletException\u5f02\u5e38\u3002<br \/>\ndoFilter(ServletRequest paramServletRequest, ServletResponse paramServletResponse, FilterChain paramFilterChain) &#8211; \u8fd9\u4e2a\u65b9\u6cd5\u5728\u5bb9\u5668\u6bcf\u6b21\u9700\u8981\u5c06\u8fc7\u6ee4\u5668\u5e94\u7528\u4e8e\u4e00\u4e2a\u8d44\u6e90\u65f6\u88ab\u8c03\u7528\u3002\u5bb9\u5668\u5c06\u8bf7\u6c42\u548c\u54cd\u5e94\u5bf9\u8c61\u7684\u5f15\u7528\u4f5c\u4e3a\u53c2\u6570\u4f20\u9012\u7ed9\u8fc7\u6ee4\u5668\u3002FilterChain\u7528\u4e8e\u8c03\u7528\u94fe\u4e2d\u7684\u4e0b\u4e00\u4e2a\u8fc7\u6ee4\u5668\u3002\u8fd9\u662f\u8d23\u4efb\u94fe\u6a21\u5f0f\u7684\u4e00\u4e2a\u5f88\u597d\u7684\u4f8b\u5b50\u3002<br \/>\nvoid destroy() &#8211; \u5f53\u5bb9\u5668\u5378\u8f7d\u8fc7\u6ee4\u5668\u5b9e\u4f8b\u65f6\uff0c\u8c03\u7528destroy()\u65b9\u6cd5\u3002\u8fd9\u4e2a\u65b9\u6cd5\u53ef\u4ee5\u7528\u6765\u5173\u95ed\u8fc7\u6ee4\u5668\u6253\u5f00\u7684\u4efb\u4f55\u8d44\u6e90\u3002\u8fd9\u4e2a\u65b9\u6cd5\u5728\u8fc7\u6ee4\u5668\u7684\u751f\u547d\u5468\u671f\u4e2d\u53ea\u88ab\u8c03\u7528\u4e00\u6b21\u3002<\/p>\n<p>Servlet WebFilter\u6ce8\u89e3<\/p>\n<p>javax.servlet.annotation.WebFilter\u5728Servlet 3.0\u4e2d\u5f15\u5165\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u8be5\u6ce8\u89e3\u58f0\u660e\u4e00\u4e2aServlet\u8fc7\u6ee4\u5668\u3002\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u8be5\u6ce8\u89e3\u5b9a\u4e49\u521d\u59cb\u5316\u53c2\u6570\u3001\u8fc7\u6ee4\u5668\u540d\u79f0\u548c\u63cf\u8ff0\u3001Servlet\u3001URL\u6a21\u5f0f\u548c\u8c03\u5ea6\u5668\u7c7b\u578b\u6765\u5e94\u7528\u8fc7\u6ee4\u5668\u3002\u5982\u679c\u7ecf\u5e38\u66f4\u6539\u8fc7\u6ee4\u5668\u914d\u7f6e\uff0c\u6700\u597d\u4f7f\u7528web.xml\uff0c\u56e0\u4e3a\u8fd9\u6837\u4e0d\u9700\u8981\u91cd\u65b0\u7f16\u8bd1\u8fc7\u6ee4\u5668\u7c7b\u3002\u9605\u8bfb\uff1aJava\u6ce8\u89e3\u6559\u7a0b<\/p>\n<p>web.xml\u4e2d\u7684Servlet\u8fc7\u6ee4\u5668\u914d\u7f6e<\/p>\n<p>\u6211\u4eec\u53ef\u4ee5\u5728web.xml\u4e2d\u58f0\u660e\u4e00\u4e2aServlet\u8fc7\u6ee4\u5668\uff0c\u5982\u4e0b\u6240\u793a\u3002<\/p>\n<p>RequestLoggingFilter <!-- \u5fc5\u9700 --><br \/>\ncom.Olivia.servlet.filters.RequestLoggingFilter <!-- \u5fc5\u9700 --><br \/>\n<!-- \u53ef\u9009 --><br \/>\ntest testValue<\/p>\n<p>\u6211\u4eec\u53ef\u4ee5\u5c06\u4e00\u4e2a\u8fc7\u6ee4\u5668\u6620\u5c04\u5230Servlet\u7c7b\u6216URL\u6a21\u5f0f\uff0c\u5982\u4e0b\u6240\u793a\u3002<\/p>\n<p>RequestLoggingFilter <!-- \u5fc5\u9700 --><br \/>\n\/* <!-- \u53ef\u4ee5\u662furl-pattern\u6216servlet-name\u4e2d\u7684\u4e00\u4e2a --><br \/>\nLoginServlet<br \/>\nREQUEST<\/p>\n<p>\u6ce8\u610f\uff1a\u5728\u4e3a\u4e00\u4e2aServlet\u521b\u5efa\u8fc7\u6ee4\u5668\u94fe\u65f6\uff0c\u5bb9\u5668\u9996\u5148\u5904\u7406URL\u6a21\u5f0f\uff0c\u7136\u540e\u662fservlet\u540d\u79f0\uff0c\u6240\u4ee5\u5982\u679c\u8981\u786e\u4fdd\u8fc7\u6ee4\u5668\u6309\u7167\u7279\u5b9a\u7684\u987a\u5e8f\u6267\u884c\uff0c\u9700\u8981\u7279\u522b\u6ce8\u610f\u5b9a\u4e49\u8fc7\u6ee4\u5668\u6620\u5c04\u3002Servlet\u8fc7\u6ee4\u5668\u901a\u5e38\u7528\u4e8e\u5ba2\u6237\u7aef\u8bf7\u6c42\uff0c\u4f46\u6709\u65f6\u6211\u4eec\u4e5f\u5e0c\u671b\u5bf9RequestDispatcher\u5e94\u7528\u8fc7\u6ee4\u5668\uff0c\u53ef\u4ee5\u4f7f\u7528dispatcher\u5143\u7d20\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u53ef\u80fd\u7684\u503c\u6709REQUEST\u3001FORWARD\u3001INCLUDE\u3001ERROR\u548cASYNC\u3002\u5982\u679c\u6ca1\u6709\u5b9a\u4e49dispatcher\uff0c\u5219\u8be5\u8fc7\u6ee4\u5668\u4ec5\u9002\u7528\u4e8e\u5ba2\u6237\u7aef\u8bf7\u6c42\u3002<\/p>\n<p>\u7528\u4e8e\u65e5\u5fd7\u8bb0\u5f55\u548c\u4f1a\u8bdd\u9a8c\u8bc1\u7684Servlet\u8fc7\u6ee4\u5668\u793a\u4f8b<\/p>\n<pre class=\"post-pre\"><code>In our **servlet filter example**, we will create filters to log request cookies and parameters and validate session to all the resources except static HTMLs and LoginServlet because it will not have a session. We will create a dynamic web project **ServletFilterExample** whose project structure will look like the below image. [![Servlet Filter Example, Java Filter](https:\/\/scdev.nyc3.cdn.digitaloceanspaces.com\/2013\/08\/Servlet-Filter-Example-Project.png)](https:\/\/scdev.nyc3.cdn.digitaloceanspaces.com\/2013\/08\/Servlet-Filter-Example-Project.png) login.html is the entry point of our application where the user will provide the login id and password for authentication. login.html code:\r\n\r\n```\r\n&lt;!DOCTYPE html&gt;\r\n&lt;html&gt;\r\n&lt;head&gt;\r\n&lt;meta charset=\"US-ASCII\"&gt;\r\n&lt;title&gt;Login Page&lt;\/title&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n\r\n&lt;form action=\"LoginServlet\" method=\"post\"&gt;\r\n\r\nUsername: &lt;input type=\"text\" name=\"user\"&gt;\r\n&lt;br&gt;\r\nPassword: &lt;input type=\"password\" name=\"pwd\"&gt;\r\n&lt;br&gt;\r\n&lt;input type=\"submit\" value=\"Login\"&gt;\r\n&lt;\/form&gt;\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;\r\n```\r\n\r\nLoginServlet is used to authenticate the request from the client for login.\r\n\r\n```\r\npackage com.Olivia.servlet.session;\r\n\r\nimport java.io.IOException;\r\nimport java.io.PrintWriter;\r\n\r\nimport javax.servlet.RequestDispatcher;\r\nimport javax.servlet.ServletException;\r\nimport javax.servlet.annotation.WebServlet;\r\nimport javax.servlet.http.Cookie;\r\nimport javax.servlet.http.HttpServlet;\r\nimport javax.servlet.http.HttpServletRequest;\r\nimport javax.servlet.http.HttpServletResponse;\r\nimport javax.servlet.http.HttpSession;\r\n\r\n\/**\r\n * Servlet implementation class LoginServlet\r\n *\/\r\n@WebServlet(\"\/LoginServlet\")\r\npublic class LoginServlet extends HttpServlet {\r\n\tprivate static final long serialVersionUID = 1L;\r\n\tprivate final String userID = \"admin\";\r\n\tprivate final String password = \"password\";\r\n\r\n\tprotected void doPost(HttpServletRequest request,\r\n\t\t\tHttpServletResponse response) throws ServletException, IOException {\r\n\r\n\t\t\/\/ get request parameters for userID and password\r\n\t\tString user = request.getParameter(\"user\");\r\n\t\tString pwd = request.getParameter(\"pwd\");\r\n\t\t\r\n\t\tif(userID.equals(user) &amp;&amp; password.equals(pwd)){\r\n\t\t\tHttpSession session = request.getSession();\r\n\t\t\tsession.setAttribute(\"user\", \"Pankaj\");\r\n\t\t\t\/\/setting session to expiry in 30 mins\r\n\t\t\tsession.setMaxInactiveInterval(30*60);\r\n\t\t\tCookie userName = new Cookie(\"user\", user);\r\n\t\t\tuserName.setMaxAge(30*60);\r\n\t\t\tresponse.addCookie(userName);\r\n\t\t\tresponse.sendRedirect(\"LoginSuccess.jsp\");\r\n\t\t}else{\r\n\t\t\tRequestDispatcher rd = getServletContext().getRequestDispatcher(\"\/login.html\");\r\n\t\t\tPrintWriter out= response.getWriter();\r\n\t\t\tout.println(\"&lt;font color=red&gt;Either user name or password is wrong.&lt;\/font&gt;\");\r\n\t\t\trd.include(request, response);\r\n\t\t}\r\n\r\n\t}\r\n\r\n}\r\n```\r\n\r\nWhen the client is authenticated, it's forwarded to LoginSuccess.jsp LoginSuccess.jsp code:\r\n\r\n```\r\n&lt;%@ page language=\"java\" contentType=\"text\/html; charset=US-ASCII\"\r\n    pageEncoding=\"US-ASCII\"%&gt;\r\n&lt;!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD HTML 4.01 Transitional\/\/EN\" \"https:\/\/www.w3.org\/TR\/html4\/loose.dtd\"&gt;\r\n&lt;html&gt;\r\n&lt;head&gt;\r\n&lt;meta http-equiv=\"Content-Type\" content=\"text\/html; charset=US-ASCII\"&gt;\r\n&lt;title&gt;Login Success Page&lt;\/title&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n&lt;%\r\n\/\/allow access only if session exists\r\nString user = (String) session.getAttribute(\"user\");\r\nString userName = null;\r\nString sessionID = null;\r\nCookie[] cookies = request.getCookies();\r\nif(cookies !=null){\r\nfor(Cookie cookie : cookies){\r\n\tif(cookie.getName().equals(\"user\")) userName = cookie.getValue();\r\n\tif(cookie.getName().equals(\"JSESSIONID\")) sessionID = cookie.getValue();\r\n}\r\n}\r\n%&gt;\r\n&lt;h3&gt;Hi &lt;%=userName %&gt;, Login successful. Your Session ID=&lt;%=sessionID %&gt;&lt;\/h3&gt;\r\n&lt;br&gt;\r\nUser=&lt;%=user %&gt;\r\n&lt;br&gt;\r\n&lt;a href=\"CheckoutPage.jsp\"&gt;Checkout Page&lt;\/a&gt;\r\n&lt;form action=\"LogoutServlet\" method=\"post\"&gt;\r\n&lt;input type=\"submit\" value=\"Logout\" &gt;\r\n&lt;\/form&gt;\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;\r\n```\r\n\r\nNotice that there is no session validation logic in the above JSP. It contains a link to another JSP page, CheckoutPage.jsp. CheckoutPage.jsp code:\r\n\r\n```\r\n&lt;%@ page language=\"java\" contentType=\"text\/html; charset=US-ASCII\"\r\n    pageEncoding=\"US-ASCII\"%&gt;\r\n&lt;!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD HTML 4.01 Transitional\/\/EN\" \"https:\/\/www.w3.org\/TR\/html4\/loose.dtd\"&gt;\r\n&lt;html&gt;\r\n&lt;head&gt;\r\n&lt;meta http-equiv=\"Content-Type\" content=\"text\/html; charset=US-ASCII\"&gt;\r\n&lt;title&gt;Login Success Page&lt;\/title&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n&lt;%\r\nString userName = null;\r\nString sessionID = null;\r\nCookie[] cookies = request.getCookies();\r\nif(cookies !=null){\r\nfor(Cookie cookie : cookies){\r\n\tif(cookie.getName().equals(\"user\")) userName = cookie.getValue();\r\n}\r\n}\r\n%&gt;\r\n&lt;h3&gt;Hi &lt;%=userName %&gt;, do the checkout.&lt;\/h3&gt;\r\n&lt;br&gt;\r\n&lt;form action=\"LogoutServlet\" method=\"post\"&gt;\r\n&lt;input type=\"submit\" value=\"Logout\" &gt;\r\n&lt;\/form&gt;\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;\r\n```\r\n\r\nLogoutServlet is invoked when a client clicks on the Logout button in any of the JSP pages.\r\n\r\n```\r\npackage com.Olivia.servlet.session;\r\n\r\nimport java.io.IOException;\r\n\r\nimport javax.servlet.ServletException;\r\nimport javax.servlet.annotation.WebServlet;\r\nimport javax.servlet.http.Cookie;\r\nimport javax.servlet.http.HttpServlet;\r\nimport javax.servlet.http.HttpServletRequest;\r\nimport javax.servlet.http.HttpServletResponse;\r\nimport javax.servlet.http.HttpSession;\r\n\r\n\/**\r\n * Servlet implementation class LogoutServlet\r\n *\/\r\n@WebServlet(\"\/LogoutServlet\")\r\npublic class LogoutServlet extends HttpServlet {\r\n\tprivate static final long serialVersionUID = 1L;\r\n       \r\n    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {\r\n    \tresponse.setContentType(\"text\/html\");\r\n    \tCookie[] cookies = request.getCookies();\r\n    \tif(cookies != null){\r\n    \tfor(Cookie cookie : cookies){\r\n    \t\tif(cookie.getName().equals(\"JSESSIONID\")){\r\n    \t\t\tSystem.out.println(\"JSESSIONID=\"+cookie.getValue());\r\n    \t\t\tbreak;\r\n    \t\t}\r\n    \t}\r\n    \t}\r\n    \t\/\/invalidate the session if exists\r\n    \tHttpSession session = request.getSession(false);\r\n    \tSystem.out.println(\"User=\"+session.getAttribute(\"user\"));\r\n    \tif(session != null){\r\n    \t\tsession.invalidate();\r\n    \t}\r\n    \tresponse.sendRedirect(\"login.html\");\r\n    }\r\n\r\n}\r\n```\r\n\r\nNow we will create logging and authentication servlet filter classes.\r\n\r\n```\r\npackage com.Olivia.servlet.filters;\r\n\r\nimport java.io.IOException;\r\nimport java.util.Enumeration;\r\n\r\nimport javax.servlet.Filter;\r\nimport javax.servlet.FilterChain;\r\nimport javax.servlet.FilterConfig;\r\nimport javax.servlet.ServletContext;\r\nimport javax.servlet.ServletException;\r\nimport javax.servlet.ServletRequest;\r\nimport javax.servlet.ServletResponse;\r\nimport javax.servlet.annotation.WebFilter;\r\nimport javax.servlet.http.Cookie;\r\nimport javax.servlet.http.HttpServletRequest;\r\n\r\n\/**\r\n * Servlet Filter implementation class RequestLoggingFilter\r\n *\/\r\n@WebFilter(\"\/RequestLoggingFilter\")\r\npublic class RequestLoggingFilter implements Filter {\r\n\r\n\tprivate ServletContext context;\r\n\t\r\n\tpublic void init(FilterConfig fConfig) throws ServletException {\r\n\t\tthis.context = fConfig.getServletContext();\r\n\t\tthis.context.log(\"RequestLoggingFilter initialized\");\r\n\t}\r\n\r\n\tpublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {\r\n\t\tHttpServletRequest req = (HttpServletRequest) request;\r\n\t\tEnumeration&lt;String&gt; params = req.getParameterNames();\r\n\t\twhile(params.hasMoreElements()){\r\n\t\t\tString name = params.nextElement();\r\n\t\t\tString value = request.getParameter(name);\r\n\t\t\tthis.context.log(req.getRemoteAddr() + \"::Request Params::{\"+name+\"=\"+value+\"}\");\r\n\t\t}\r\n\t\t\r\n\t\tCookie[] cookies = req.getCookies();\r\n\t\tif(cookies != null){\r\n\t\t\tfor(Cookie cookie : cookies){\r\n\t\t\t\tthis.context.log(req.getRemoteAddr() + \"::Cookie::{\"+cookie.getName()+\",\"+cookie.getValue()+\"}\");\r\n\t\t\t}\r\n\t\t}\r\n\t\t\/\/ pass the request along the filter chain\r\n\t\tchain.doFilter(request, response);\r\n\t}\r\n\r\n\tpublic void destroy() {\r\n\t\t\/\/we can close resources here\r\n\t}\r\n\r\n}\r\n```\r\n\r\n```\r\npackage com.Olivia.servlet.filters;\r\n\r\nimport java.io.IOException;\r\n\r\nimport javax.servlet.Filter;\r\nimport javax.servlet.FilterChain;\r\nimport javax.servlet.FilterConfig;\r\nimport javax.servlet.ServletContext;\r\nimport javax.servlet.ServletException;\r\nimport javax.servlet.ServletRequest;\r\nimport javax.servlet.ServletResponse;\r\nimport javax.servlet.annotation.WebFilter;\r\nimport javax.servlet.http.HttpServletRequest;\r\nimport javax.servlet.http.HttpServletResponse;\r\nimport javax.servlet.http.HttpSession;\r\n\r\n@WebFilter(\"\/AuthenticationFilter\")\r\npublic class AuthenticationFilter implements Filter {\r\n\r\n\tprivate ServletContext context;\r\n\t\r\n\tpublic void init(FilterConfig fConfig) throws ServletException {\r\n\t\tthis.context = fConfig.getServletContext();\r\n\t\tthis.context.log(\"AuthenticationFilter initialized\");\r\n\t}\r\n\t\r\n\tpublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {\r\n\r\n\t\tHttpServletRequest req = (HttpServletRequest) request;\r\n\t\tHttpServletResponse res = (HttpServletResponse) response;\r\n\t\t\r\n\t\tString uri = req.getRequestURI();\r\n\t\tthis.context.log(\"Requested Resource::\"+uri);\r\n\t\t\r\n\t\tHttpSession session = req.getSession(false);\r\n\t\t\r\n\t\tif(session == null &amp;&amp; !(uri.endsWith(\"html\") || uri.endsWith(\"LoginServlet\"))){\r\n\t\t\tthis.context.log(\"Unauthorized access request\");\r\n\t\t\tres.sendRedirect(\"login.html\");\r\n\t\t}else{\r\n\t\t\t\/\/ pass the request along the filter chain\r\n\t\t\tchain.doFilter(request, response);\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\t}\r\n\r\n\tpublic void destroy() {\r\n\t\t\/\/close any resources here\r\n\t}\r\n\r\n}\r\n```\r\n\r\nNotice that we are not authenticating any HTML page or LoginServlet. Now we will configure these filters mapping in the web.xml file.\r\n\r\n```\r\n&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;web-app xmlns:xsi=\"https:\/\/www.w3.org\/2001\/XMLSchema-instance\" xmlns=\"https:\/\/java.sun.com\/xml\/ns\/javaee\" xsi:schemaLocation=\"https:\/\/java.sun.com\/xml\/ns\/javaee https:\/\/java.sun.com\/xml\/ns\/javaee\/web-app_3_0.xsd\" version=\"3.0\"&gt;\r\n  &lt;display-name&gt;ServletFilterExample&lt;\/display-name&gt;\r\n  &lt;welcome-file-list&gt;\r\n    &lt;welcome-file&gt;login.html&lt;\/welcome-file&gt;\r\n  &lt;\/welcome-file-list&gt;\r\n  \r\n  &lt;filter&gt;\r\n    &lt;filter-name&gt;RequestLoggingFilter&lt;\/filter-name&gt;\r\n    &lt;filter-class&gt;com.Olivia.servlet.filters.RequestLoggingFilter&lt;\/filter-class&gt;\r\n  &lt;\/filter&gt;\r\n  &lt;filter&gt;\r\n    &lt;filter-name&gt;AuthenticationFilter&lt;\/filter-name&gt;\r\n    &lt;filter-class&gt;com.Olivia.servlet.filters.AuthenticationFilter&lt;\/filter-class&gt;\r\n  &lt;\/filter&gt;\r\n  \r\n  &lt;filter-mapping&gt;\r\n    &lt;filter-name&gt;RequestLoggingFilter&lt;\/filter-name&gt;\r\n    &lt;url-pattern&gt;\/*&lt;\/url-pattern&gt;\r\n    &lt;dispatcher&gt;REQUEST&lt;\/dispatcher&gt;\r\n  &lt;\/filter-mapping&gt;\r\n  &lt;filter-mapping&gt;\r\n    &lt;filter-name&gt;AuthenticationFilter&lt;\/filter-name&gt;\r\n    &lt;url-pattern&gt;\/*&lt;\/url-pattern&gt;\r\n  &lt;\/filter-mapping&gt;\r\n&lt;\/web-app&gt;\r\n```\r\n\r\nNow when we will run our application, we will get response pages like below images. [![Servlet Filter Example](https:\/\/scdev.nyc3.cdn.digitaloceanspaces.com\/2013\/08\/Servlet-Filter-Login-450x141.png)](https:\/\/scdev.nyc3.cdn.digitaloceanspaces.com\/2013\/08\/Servlet-Filter-Login.png) [![Servlet Filter, Java Filter](https:\/\/scdev.nyc3.cdn.digitaloceanspaces.com\/2013\/08\/Servlet-Filter-Login-Success-450x229.png)](https:\/\/scdev.nyc3.cdn.digitaloceanspaces.com\/2013\/08\/Servlet-Filter-Login-Success.png) [![Servlet Filter Tutorial, Java Servlet Filter](https:\/\/scdev.nyc3.cdn.digitaloceanspaces.com\/2013\/08\/Servlet-Filter-Checkout-450x181.png)](https:\/\/scdev.nyc3.cdn.digitaloceanspaces.com\/2013\/08\/Servlet-Filter-Checkout.png) If you are not logged in and try to access any JSP page, you will be forwarded to the login page. In the server log file, you can see the logs written by servlet filters as well as servlets.\r\n\r\n```\r\nAug 13, 2013 1:06:07 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: 0:0:0:0:0:0:0:1%0::Cookie::{JSESSIONID,B7275762B8D23121152B1270D6EB240A}\r\nAug 13, 2013 1:06:07 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: Requested Resource::\/ServletFilterExample\/\r\nAug 13, 2013 1:06:07 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: Unauthorized access request\r\nAug 13, 2013 1:06:07 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: 0:0:0:0:0:0:0:1%0::Cookie::{JSESSIONID,B7275762B8D23121152B1270D6EB240A}\r\nAug 13, 2013 1:06:07 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: Requested Resource::\/ServletFilterExample\/login.html\r\nAug 13, 2013 1:06:43 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: 0:0:0:0:0:0:0:1%0::Request Params::{pwd=password}\r\nAug 13, 2013 1:06:43 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: 0:0:0:0:0:0:0:1%0::Request Params::{user=admin}\r\nAug 13, 2013 1:06:43 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: 0:0:0:0:0:0:0:1%0::Cookie::{JSESSIONID,B7275762B8D23121152B1270D6EB240A}\r\nAug 13, 2013 1:06:43 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: Requested Resource::\/ServletFilterExample\/LoginServlet\r\nAug 13, 2013 1:06:43 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: 0:0:0:0:0:0:0:1%0::Cookie::{JSESSIONID,8BDF777933194EDCAC1D8F1B73633C56}\r\nAug 13, 2013 1:06:43 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: 0:0:0:0:0:0:0:1%0::Cookie::{user,admin}\r\nAug 13, 2013 1:06:43 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: Requested Resource::\/ServletFilterExample\/LoginSuccess.jsp\r\nAug 13, 2013 1:06:52 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: 0:0:0:0:0:0:0:1%0::Cookie::{JSESSIONID,8BDF777933194EDCAC1D8F1B73633C56}\r\nAug 13, 2013 1:06:52 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: 0:0:0:0:0:0:0:1%0::Cookie::{user,admin}\r\nAug 13, 2013 1:06:52 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: Requested Resource::\/ServletFilterExample\/CheckoutPage.jsp\r\nAug 13, 2013 1:07:00 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: 0:0:0:0:0:0:0:1%0::Cookie::{JSESSIONID,8BDF777933194EDCAC1D8F1B73633C56}\r\nAug 13, 2013 1:07:00 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: 0:0:0:0:0:0:0:1%0::Cookie::{user,admin}\r\nAug 13, 2013 1:07:00 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: Requested Resource::\/ServletFilterExample\/LogoutServlet\r\nJSESSIONID=8BDF777933194EDCAC1D8F1B73633C56\r\nUser=Pankaj\r\nAug 13, 2013 1:07:00 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: 0:0:0:0:0:0:0:1%0::Cookie::{JSESSIONID,8BDF777933194EDCAC1D8F1B73633C56}\r\nAug 13, 2013 1:07:00 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: 0:0:0:0:0:0:0:1%0::Cookie::{user,admin}\r\nAug 13, 2013 1:07:00 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: Requested Resource::\/ServletFilterExample\/login.html\r\nAug 13, 2013 1:07:06 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: 0:0:0:0:0:0:0:1%0::Cookie::{JSESSIONID,8BDF777933194EDCAC1D8F1B73633C56}\r\nAug 13, 2013 1:07:07 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: 0:0:0:0:0:0:0:1%0::Cookie::{user,admin}\r\nAug 13, 2013 1:07:07 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: Requested Resource::\/ServletFilterExample\/LoginSuccess.jsp\r\nAug 13, 2013 1:07:07 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: Unauthorized access request\r\nAug 13, 2013 1:07:07 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: 0:0:0:0:0:0:0:1%0::Cookie::{JSESSIONID,8BDF777933194EDCAC1D8F1B73633C56}\r\nAug 13, 2013 1:07:07 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: 0:0:0:0:0:0:0:1%0::Cookie::{user,admin}\r\nAug 13, 2013 1:07:07 AM org.apache.catalina.core.ApplicationContext log\r\nINFO: Requested Resource::\/ServletFilterExample\/login.html\r\n```\r\n<\/code><\/pre>\n<p>\u8fd9\u5c31\u662fJava\u4e2d\u7684Servlet\u8fc7\u6ee4\u5668\u7684\u5168\u90e8\u5185\u5bb9\u3002\u5b83\u662fJava EE Web\u5e94\u7528\u7a0b\u5e8f\u7684\u91cd\u8981\u529f\u80fd\u4e4b\u4e00\uff0c\u6211\u4eec\u5e94\u8be5\u7528\u5b83\u6765\u6267\u884c\u5404\u79cdServlet\u5e38\u89c1\u4efb\u52a1\u3002\u5728\u672a\u6765\u7684\u5e16\u5b50\u4e2d\uff0c\u6211\u4eec\u5c06\u63a2\u8ba8Servlet\u76d1\u542c\u5668\u548cCookie\u3002\u66f4\u65b0\uff1a\u7531\u4e8e\u6536\u5230\u4e86\u5f88\u591a\u53ef\u4e0b\u8f7d\u9879\u76ee\u7684\u8bf7\u6c42\uff0c\u6211\u5df2\u7ecf\u5c06\u5b83\u9644\u5728\u4e86\u5e16\u5b50\u4e2d\uff0c\u53ef\u4ee5\u4ece\u4e0b\u9762\u7684\u94fe\u63a5\u4e2d\u4e0b\u8f7d\u3002<\/p>\n<p>\u4e0b\u8f7dServlet\u8fc7\u6ee4\u5668\u793a\u4f8b\u9879\u76ee<\/p>\n<p>\u67e5\u770b\u7cfb\u5217\u6587\u7ae0\u4e2d\u5173\u4e8eServlet Listener\u7684\u4e0b\u4e00\u7bc7\u3002\u66f4\u65b0\u7684Struts 2\u4f7f\u7528Servlet Filter\u6765\u62e6\u622a\u5ba2\u6237\u7aef\u8bf7\u6c42\u5e76\u5c06\u5176\u8f6c\u53d1\u5230\u9002\u5f53\u7684action\u7c7b\uff0c\u8fd9\u4e9b\u88ab\u79f0\u4e3aStruts 2\u62e6\u622a\u5668\u3002\u67e5\u770bStruts 2\u5165\u95e8\u6559\u7a0b\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Java Servlet \u8fc7\u6ee4\u5668\u7528\u4e8e\u62e6\u622a\u5ba2\u6237\u7aef\u8bf7\u6c42\u5e76\u8fdb\u884c\u4e00\u4e9b\u9884\u5904\u7406\u3002\u5b83\u8fd8\u53ef\u4ee5\u62e6\u622a\u54cd\u5e94\u5e76\u5728\u53d1\u9001\u5230\u5ba2\u6237\u7aef\u4e4b\u524d\u8fdb\u884c\u540e [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[1108,1130,2186,2187,2185],"class_list":["post-830","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-java-servlet","tag-java-web","tag-servlet","tag-web","tag-2185"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Java Servlet\u8fc7\u6ee4\u5668\u5b8c\u5168\u6307\u5357\uff1a\u4ece\u5165\u95e8\u5230\u7cbe\u901a\u7684\u5b9e\u6218\u6559\u7a0b - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"\u672c\u6559\u7a0b\u8be6\u7ec6\u4ecb\u7ecdJava Servlet\u8fc7\u6ee4\u5668\u7684\u6982\u5ff5\u3001\u5de5\u4f5c\u539f\u7406\u53ca\u5b9e\u9645\u5e94\u7528\u3002\u901a\u8fc7\u4e30\u5bcc\u7684\u793a\u4f8b\u4ee3\u7801\uff0c\u5e2e\u52a9\u5f00\u53d1\u8005\u638c\u63e1\u8fc7\u6ee4\u5668\u7684\u914d\u7f6e\u65b9\u6cd5\u3001\u751f\u547d\u5468\u671f\u7ba1\u7406\u53ca\u5e38\u89c1\u5e94\u7528\u573a\u666f\uff0c\u5982\u8bf7\u6c42\u65e5\u5fd7\u8bb0\u5f55\u3001\u5b57\u7b26\u7f16\u7801\u5904\u7406\u3001\u7528\u6237\u8ba4\u8bc1\u7b49\u3002\u9002\u5408Java Web\u5f00\u53d1\u4eba\u5458\u5b66\u4e60\u53c2\u8003\u3002\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/java-servlet-\u8fc7\u6ee4\u5668\u793a\u4f8b\u6559\u7a0b\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Java Servlet\u8fc7\u6ee4\u5668\u5b8c\u5168\u6307\u5357\uff1a\u4ece\u5165\u95e8\u5230\u7cbe\u901a\u7684\u5b9e\u6218\u6559\u7a0b\" \/>\n<meta property=\"og:description\" content=\"\u672c\u6559\u7a0b\u8be6\u7ec6\u4ecb\u7ecdJava Servlet\u8fc7\u6ee4\u5668\u7684\u6982\u5ff5\u3001\u5de5\u4f5c\u539f\u7406\u53ca\u5b9e\u9645\u5e94\u7528\u3002\u901a\u8fc7\u4e30\u5bcc\u7684\u793a\u4f8b\u4ee3\u7801\uff0c\u5e2e\u52a9\u5f00\u53d1\u8005\u638c\u63e1\u8fc7\u6ee4\u5668\u7684\u914d\u7f6e\u65b9\u6cd5\u3001\u751f\u547d\u5468\u671f\u7ba1\u7406\u53ca\u5e38\u89c1\u5e94\u7528\u573a\u666f\uff0c\u5982\u8bf7\u6c42\u65e5\u5fd7\u8bb0\u5f55\u3001\u5b57\u7b26\u7f16\u7801\u5904\u7406\u3001\u7528\u6237\u8ba4\u8bc1\u7b49\u3002\u9002\u5408Java Web\u5f00\u53d1\u4eba\u5458\u5b66\u4e60\u53c2\u8003\u3002\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/java-servlet-\u8fc7\u6ee4\u5668\u793a\u4f8b\u6559\u7a0b\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-11-04T13:49:15+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-03T03:35:11+00:00\" \/>\n<meta name=\"author\" content=\"\u6587, \u7fd4\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6587, \u7fd4\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/java-servlet-%e8%bf%87%e6%bb%a4%e5%99%a8%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/java-servlet-%e8%bf%87%e6%bb%a4%e5%99%a8%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/\",\"name\":\"Java Servlet\u8fc7\u6ee4\u5668\u5b8c\u5168\u6307\u5357\uff1a\u4ece\u5165\u95e8\u5230\u7cbe\u901a\u7684\u5b9e\u6218\u6559\u7a0b - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-11-04T13:49:15+00:00\",\"dateModified\":\"2025-08-03T03:35:11+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c\"},\"description\":\"\u672c\u6559\u7a0b\u8be6\u7ec6\u4ecb\u7ecdJava Servlet\u8fc7\u6ee4\u5668\u7684\u6982\u5ff5\u3001\u5de5\u4f5c\u539f\u7406\u53ca\u5b9e\u9645\u5e94\u7528\u3002\u901a\u8fc7\u4e30\u5bcc\u7684\u793a\u4f8b\u4ee3\u7801\uff0c\u5e2e\u52a9\u5f00\u53d1\u8005\u638c\u63e1\u8fc7\u6ee4\u5668\u7684\u914d\u7f6e\u65b9\u6cd5\u3001\u751f\u547d\u5468\u671f\u7ba1\u7406\u53ca\u5e38\u89c1\u5e94\u7528\u573a\u666f\uff0c\u5982\u8bf7\u6c42\u65e5\u5fd7\u8bb0\u5f55\u3001\u5b57\u7b26\u7f16\u7801\u5904\u7406\u3001\u7528\u6237\u8ba4\u8bc1\u7b49\u3002\u9002\u5408Java Web\u5f00\u53d1\u4eba\u5458\u5b66\u4e60\u53c2\u8003\u3002\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/java-servlet-%e8%bf%87%e6%bb%a4%e5%99%a8%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/java-servlet-%e8%bf%87%e6%bb%a4%e5%99%a8%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/java-servlet-%e8%bf%87%e6%bb%a4%e5%99%a8%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java Servlet\u8fc7\u6ee4\u5668\u5b8c\u5168\u6307\u5357\uff1a\u4ece\u5165\u95e8\u5230\u7cbe\u901a\u7684\u5b9e\u6218\u6559\u7a0b\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c\",\"name\":\"\u6587, \u7fd4\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g\",\"caption\":\"\u6587, \u7fd4\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/wenxiang\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/java-servlet-%e8%bf%87%e6%bb%a4%e5%99%a8%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Java Servlet\u8fc7\u6ee4\u5668\u5b8c\u5168\u6307\u5357\uff1a\u4ece\u5165\u95e8\u5230\u7cbe\u901a\u7684\u5b9e\u6218\u6559\u7a0b - Blog - Silicon Cloud","description":"\u672c\u6559\u7a0b\u8be6\u7ec6\u4ecb\u7ecdJava Servlet\u8fc7\u6ee4\u5668\u7684\u6982\u5ff5\u3001\u5de5\u4f5c\u539f\u7406\u53ca\u5b9e\u9645\u5e94\u7528\u3002\u901a\u8fc7\u4e30\u5bcc\u7684\u793a\u4f8b\u4ee3\u7801\uff0c\u5e2e\u52a9\u5f00\u53d1\u8005\u638c\u63e1\u8fc7\u6ee4\u5668\u7684\u914d\u7f6e\u65b9\u6cd5\u3001\u751f\u547d\u5468\u671f\u7ba1\u7406\u53ca\u5e38\u89c1\u5e94\u7528\u573a\u666f\uff0c\u5982\u8bf7\u6c42\u65e5\u5fd7\u8bb0\u5f55\u3001\u5b57\u7b26\u7f16\u7801\u5904\u7406\u3001\u7528\u6237\u8ba4\u8bc1\u7b49\u3002\u9002\u5408Java Web\u5f00\u53d1\u4eba\u5458\u5b66\u4e60\u53c2\u8003\u3002","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/java-servlet-\u8fc7\u6ee4\u5668\u793a\u4f8b\u6559\u7a0b\/","og_locale":"zh_CN","og_type":"article","og_title":"Java Servlet\u8fc7\u6ee4\u5668\u5b8c\u5168\u6307\u5357\uff1a\u4ece\u5165\u95e8\u5230\u7cbe\u901a\u7684\u5b9e\u6218\u6559\u7a0b","og_description":"\u672c\u6559\u7a0b\u8be6\u7ec6\u4ecb\u7ecdJava Servlet\u8fc7\u6ee4\u5668\u7684\u6982\u5ff5\u3001\u5de5\u4f5c\u539f\u7406\u53ca\u5b9e\u9645\u5e94\u7528\u3002\u901a\u8fc7\u4e30\u5bcc\u7684\u793a\u4f8b\u4ee3\u7801\uff0c\u5e2e\u52a9\u5f00\u53d1\u8005\u638c\u63e1\u8fc7\u6ee4\u5668\u7684\u914d\u7f6e\u65b9\u6cd5\u3001\u751f\u547d\u5468\u671f\u7ba1\u7406\u53ca\u5e38\u89c1\u5e94\u7528\u573a\u666f\uff0c\u5982\u8bf7\u6c42\u65e5\u5fd7\u8bb0\u5f55\u3001\u5b57\u7b26\u7f16\u7801\u5904\u7406\u3001\u7528\u6237\u8ba4\u8bc1\u7b49\u3002\u9002\u5408Java Web\u5f00\u53d1\u4eba\u5458\u5b66\u4e60\u53c2\u8003\u3002","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/java-servlet-\u8fc7\u6ee4\u5668\u793a\u4f8b\u6559\u7a0b\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-11-04T13:49:15+00:00","article_modified_time":"2025-08-03T03:35:11+00:00","author":"\u6587, \u7fd4","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6587, \u7fd4","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"1 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/java-servlet-%e8%bf%87%e6%bb%a4%e5%99%a8%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/java-servlet-%e8%bf%87%e6%bb%a4%e5%99%a8%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/","name":"Java Servlet\u8fc7\u6ee4\u5668\u5b8c\u5168\u6307\u5357\uff1a\u4ece\u5165\u95e8\u5230\u7cbe\u901a\u7684\u5b9e\u6218\u6559\u7a0b - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-11-04T13:49:15+00:00","dateModified":"2025-08-03T03:35:11+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c"},"description":"\u672c\u6559\u7a0b\u8be6\u7ec6\u4ecb\u7ecdJava Servlet\u8fc7\u6ee4\u5668\u7684\u6982\u5ff5\u3001\u5de5\u4f5c\u539f\u7406\u53ca\u5b9e\u9645\u5e94\u7528\u3002\u901a\u8fc7\u4e30\u5bcc\u7684\u793a\u4f8b\u4ee3\u7801\uff0c\u5e2e\u52a9\u5f00\u53d1\u8005\u638c\u63e1\u8fc7\u6ee4\u5668\u7684\u914d\u7f6e\u65b9\u6cd5\u3001\u751f\u547d\u5468\u671f\u7ba1\u7406\u53ca\u5e38\u89c1\u5e94\u7528\u573a\u666f\uff0c\u5982\u8bf7\u6c42\u65e5\u5fd7\u8bb0\u5f55\u3001\u5b57\u7b26\u7f16\u7801\u5904\u7406\u3001\u7528\u6237\u8ba4\u8bc1\u7b49\u3002\u9002\u5408Java Web\u5f00\u53d1\u4eba\u5458\u5b66\u4e60\u53c2\u8003\u3002","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/java-servlet-%e8%bf%87%e6%bb%a4%e5%99%a8%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/java-servlet-%e8%bf%87%e6%bb%a4%e5%99%a8%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/java-servlet-%e8%bf%87%e6%bb%a4%e5%99%a8%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"Java Servlet\u8fc7\u6ee4\u5668\u5b8c\u5168\u6307\u5357\uff1a\u4ece\u5165\u95e8\u5230\u7cbe\u901a\u7684\u5b9e\u6218\u6559\u7a0b"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c","name":"\u6587, \u7fd4","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g","caption":"\u6587, \u7fd4"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/wenxiang\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/java-servlet-%e8%bf%87%e6%bb%a4%e5%99%a8%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/830","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=830"}],"version-history":[{"count":4,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/830\/revisions"}],"predecessor-version":[{"id":110758,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/830\/revisions\/110758"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=830"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=830"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=830"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}