{"id":1287,"date":"2026-01-10T10:20:38","date_gmt":"2026-01-10T02:20:38","guid":{"rendered":"https:\/\/www.52runoob.com\/?p=1287"},"modified":"2026-01-10T10:20:38","modified_gmt":"2026-01-10T02:20:38","slug":"servlet%e4%b8%8ejsp%e4%bd%bf%e7%94%a8%e7%ae%80%e4%bb%8b%e5%8f%8a%e5%8c%ba%e5%88%ab%e8%af%a6%e8%a7%a3","status":"publish","type":"post","link":"https:\/\/www.52runoob.com\/index.php\/2026\/01\/10\/servlet%e4%b8%8ejsp%e4%bd%bf%e7%94%a8%e7%ae%80%e4%bb%8b%e5%8f%8a%e5%8c%ba%e5%88%ab%e8%af%a6%e8%a7%a3\/","title":{"rendered":"Servlet\u4e0eJSP\u4f7f\u7528\u7b80\u4ecb\u53ca\u533a\u522b\u8be6\u89e3"},"content":{"rendered":"\n<p>\u4e0b\u9762\u6211\u7528<strong>\u901a\u4fd7 + \u5b9e\u6218 + \u9762\u8bd5\u53cb\u597d<\/strong>\u7684\u65b9\u5f0f\uff0c\u7cfb\u7edf\u8bb2\u6e05\u695a <strong>Servlet \u4e0e JSP \u7684\u4f7f\u7528\u7b80\u4ecb\u53ca\u533a\u522b<\/strong>\uff0c\u975e\u5e38\u9002\u5408\u4f60\u5f53\u524d\u5728\u5b66 <strong>Java Web \/ JSP + Servlet \u9879\u76ee<\/strong> \u7684\u9636\u6bb5\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u4e00\u3001\u4ec0\u4e48\u662f Servlet\uff1f<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">1\ufe0f\u20e3 Servlet \u7b80\u4ecb<\/h2>\n\n\n\n<p><strong>Servlet \u662f\u8fd0\u884c\u5728 Web \u670d\u52a1\u5668\u4e2d\u7684 Java \u7a0b\u5e8f<\/strong>\uff0c\u7528\u4e8e\u63a5\u6536\u6d4f\u89c8\u5668\u8bf7\u6c42\u3001\u5904\u7406\u4e1a\u52a1\u903b\u8f91\uff0c\u5e76\u8fd4\u56de\u54cd\u5e94\u3002<\/p>\n\n\n\n<p>\ud83d\udc49 \u672c\u8d28\uff1a<strong>Java \u7c7b<\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\npublic class HelloServlet extends HttpServlet {\n    protected void doGet(HttpServletRequest req, HttpServletResponse resp)\n            throws IOException {\n        resp.getWriter().write(&quot;Hello Servlet&quot;);\n    }\n}\n\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2\ufe0f\u20e3 Servlet \u7684\u4e3b\u8981\u4f5c\u7528<\/h2>\n\n\n\n<p>\u2714 \u63a5\u6536\u8bf7\u6c42\uff08Request\uff09<br>\u2714 \u5904\u7406\u4e1a\u52a1\u903b\u8f91<br>\u2714 \u8c03\u7528\u6570\u636e\u5e93 \/ Service<br>\u2714 \u8f6c\u53d1\u6216\u91cd\u5b9a\u5411\u5230 JSP<br>\u2714 \u8fd4\u56de JSON \/ HTML<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>Servlet \u662f\u63a7\u5236\u5668\uff08Controller\uff09<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3\ufe0f\u20e3 Servlet \u7684\u6267\u884c\u6d41\u7a0b<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\u6d4f\u89c8\u5668\u8bf7\u6c42\n   \u2193\nTomcat \u63a5\u6536\n   \u2193\nServlet\uff08doGet \/ doPost\uff09\n   \u2193\n\u4e1a\u52a1\u5904\u7406\n   \u2193\n\u54cd\u5e94\u6d4f\u89c8\u5668\n\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">4\ufe0f\u20e3 Servlet \u7684\u7279\u70b9<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u7279\u70b9<\/th><th>\u8bf4\u660e<\/th><\/tr><\/thead><tbody><tr><td>\u9762\u5411 Java<\/td><td>\u7eaf Java \u4ee3\u7801<\/td><\/tr><tr><td>\u53ef\u63a7\u6027\u5f3a<\/td><td>\u9002\u5408\u4e1a\u52a1\u5904\u7406<\/td><\/tr><tr><td>\u4e0d\u64c5\u957f\u9875\u9762<\/td><td>\u5199 HTML \u5f88\u75db\u82e6<\/td><\/tr><tr><td>\u7ebf\u7a0b\u5b89\u5168\u9700\u6ce8\u610f<\/td><td>\u591a\u7ebf\u7a0b\u5171\u4eab\u5b9e\u4f8b<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u4e8c\u3001\u4ec0\u4e48\u662f JSP\uff1f<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">1\ufe0f\u20e3 JSP \u7b80\u4ecb<\/h2>\n\n\n\n<p><strong>JSP\uff08Java Server Pages\uff09\u662f\u7528\u4e8e\u751f\u6210\u52a8\u6001\u7f51\u9875\u7684\u6280\u672f<\/strong>\uff0c\u672c\u8d28\u4e0a\u662f <strong>Servlet \u7684\u4e00\u79cd\u8868\u73b0\u5f62\u5f0f<\/strong>\u3002<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&amp;lt;%\n    out.println(&quot;Hello JSP&quot;);\n%&gt;\n\n<\/pre><\/div>\n\n\n<p>\ud83d\udccc <strong>JSP \u5728\u7b2c\u4e00\u6b21\u8bbf\u95ee\u65f6\u4f1a\u88ab\u7f16\u8bd1\u6210 Servlet<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2\ufe0f\u20e3 JSP \u7684\u4e3b\u8981\u4f5c\u7528<\/h2>\n\n\n\n<p>\u2714 \u5c55\u793a\u6570\u636e\uff08\u9875\u9762\u6e32\u67d3\uff09<br>\u2714 \u63a5\u6536\u8bf7\u6c42\u53c2\u6570\uff08\u4e0d\u63a8\u8350\u5904\u7406\u4e1a\u52a1\uff09<br>\u2714 \u4f7f\u7528 EL \/ JSTL \u6e32\u67d3\u89c6\u56fe<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>JSP \u662f\u89c6\u56fe\uff08View\uff09<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3\ufe0f\u20e3 JSP \u7684\u6267\u884c\u6d41\u7a0b<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\u6d4f\u89c8\u5668\u8bf7\u6c42 JSP\n   \u2193\nTomcat \u5c06 JSP \u8f6c\u6210 Servlet\n   \u2193\n\u7f16\u8bd1\u6267\u884c\n   \u2193\n\u8fd4\u56de HTML\n\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">4\ufe0f\u20e3 JSP \u7684\u7279\u70b9<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u7279\u70b9<\/th><th>\u8bf4\u660e<\/th><\/tr><\/thead><tbody><tr><td>\u5199 HTML \u65b9\u4fbf<\/td><td>\u9875\u9762\u53cb\u597d<\/td><\/tr><tr><td>\u6df7\u5408 Java<\/td><td>\u6613\u6df7\u4e71\uff08scriptlet\uff09<\/td><\/tr><tr><td>\u6027\u80fd\u7a33\u5b9a<\/td><td>\u7f16\u8bd1\u540e\u5373 Servlet<\/td><\/tr><tr><td>\u9002\u5408\u5c55\u793a<\/td><td>\u4e0d\u9002\u5408\u4e1a\u52a1\u903b\u8f91<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u4e09\u3001Servlet \u4e0e JSP \u7684\u6838\u5fc3\u533a\u522b\uff08\u91cd\u70b9\uff09<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">1\ufe0f\u20e3 \u672c\u8d28\u533a\u522b<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u5bf9\u6bd4\u9879<\/th><th>Servlet<\/th><th>JSP<\/th><\/tr><\/thead><tbody><tr><td>\u672c\u8d28<\/td><td>Java \u7c7b<\/td><td>Servlet<\/td><\/tr><tr><td>\u4e3b\u8981\u804c\u8d23<\/td><td>\u4e1a\u52a1\u5904\u7406<\/td><td>\u9875\u9762\u5c55\u793a<\/td><\/tr><tr><td>\u7f16\u5199\u65b9\u5f0f<\/td><td>Java + \u8f93\u51fa HTML<\/td><td>HTML + Java<\/td><\/tr><tr><td>\u4f7f\u7528\u573a\u666f<\/td><td>Controller<\/td><td>View<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2\ufe0f\u20e3 \u4f7f\u7528\u65b9\u5f0f\u5bf9\u6bd4<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Servlet \u5199\u9875\u9762\uff08\u5f88\u96be\u53d7\uff09<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nout.write(&quot;&amp;lt;html&gt;&quot;);\nout.write(&quot;&amp;lt;body&gt;&quot;);\nout.write(&quot;&amp;lt;h1&gt;Hello&amp;lt;\/h1&gt;&quot;);\nout.write(&quot;&amp;lt;\/body&gt;&quot;);\nout.write(&quot;&amp;lt;\/html&gt;&quot;);\n\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">JSP \u5199\u9875\u9762\uff08\u8212\u670d\uff09<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&amp;lt;h1&gt;Hello&amp;lt;\/h1&gt;\n\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3\ufe0f\u20e3 MVC \u5206\u5c42\u5bf9\u6bd4\uff08\u9762\u8bd5\u91cd\u70b9\uff09<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nModel    \u2192 JavaBean \/ Service \/ DAO\nView     \u2192 JSP\nController \u2192 Servlet\n\n<\/pre><\/div>\n\n\n<p>\ud83d\udccc <strong>Servlet + JSP = \u7ecf\u5178 MVC \u6a21\u5f0f<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u56db\u3001Servlet \u548c JSP \u7684\u534f\u4f5c\u65b9\u5f0f\uff08\u771f\u5b9e\u9879\u76ee\uff09<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">1\ufe0f\u20e3 \u6b63\u786e\u4f7f\u7528\u65b9\u5f0f \u2705<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Servlet\uff08\u63a7\u5236\u5668\uff09<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nprotected void doGet(HttpServletRequest req, HttpServletResponse resp)\n        throws ServletException, IOException {\n\n    List&amp;lt;User&gt; users = userService.findAll();\n    req.setAttribute(&quot;users&quot;, users);\n\n    req.getRequestDispatcher(&quot;\/user.jsp&quot;).forward(req, resp);\n}\n\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">JSP\uff08\u89c6\u56fe\u5c42\uff09<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&amp;lt;c:forEach items=&quot;${users}&quot; var=&quot;u&quot;&gt;\n    &amp;lt;p&gt;${u.name}&amp;lt;\/p&gt;\n&amp;lt;\/c:forEach&gt;\n\n<\/pre><\/div>\n\n\n<p>\ud83d\udccc JSP <strong>\u53ea\u505a\u5c55\u793a\uff0c\u4e0d\u5199\u4e1a\u52a1\u903b\u8f91<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2\ufe0f\u20e3 \u9519\u8bef\u793a\u8303 \u274c\uff08\u521d\u5b66\u8005\u5e38\u72af\uff09<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&amp;lt;%\n    Connection conn = DriverManager.getConnection(...);\n    \/\/ \u5199 SQL\u3001\u4e1a\u52a1\u903b\u8f91\n%&gt;\n\n<\/pre><\/div>\n\n\n<p>\ud83d\udca5 <strong>\u4e25\u91cd\u8fdd\u53cd MVC\uff0c\u7ef4\u62a4\u5730\u72f1<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u4e94\u3001Servlet \u4e0e JSP \u751f\u547d\u5468\u671f\u5bf9\u6bd4<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u751f\u547d\u5468\u671f<\/th><th>Servlet<\/th><th>JSP<\/th><\/tr><\/thead><tbody><tr><td>\u521b\u5efa<\/td><td>init()<\/td><td>\u8f6c\u6362\u6210 Servlet<\/td><\/tr><tr><td>\u6267\u884c<\/td><td>service()<\/td><td>_jspService()<\/td><\/tr><tr><td>\u9500\u6bc1<\/td><td>destroy()<\/td><td>destroy()<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\ud83d\udccc JSP \u6700\u7ec8\u8fd8\u662f\u8d70 Servlet \u751f\u547d\u5468\u671f<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u516d\u3001\u4e3a\u4ec0\u4e48\u73b0\u5728\u201c\u5c11\u5199 JSP\u201d\uff1f<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u4f20\u7edf\u6a21\u5f0f<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nServlet + JSP\n\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u73b0\u4ee3\u6a21\u5f0f<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nSpring Boot + REST + Vue \/ React\n\n<\/pre><\/div>\n\n\n<p>\ud83d\udccc JSP \u5e38\u89c1\u7528\u9014\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8001\u7cfb\u7edf\u7ef4\u62a4<\/li>\n\n\n\n<li>\u6559\u5b66 \/ \u57fa\u7840\u5b66\u4e60<\/li>\n\n\n\n<li>\u540e\u53f0\u7ba1\u7406\u7cfb\u7edf\uff08\u5185\u5d4c\uff09<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u4e03\u3001Servlet \u4e0e JSP \u9762\u8bd5\u9ad8\u9891\u95ee\u7b54<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">Q1\uff1aJSP \u662f\u4e0d\u662f Servlet\uff1f<\/h3>\n\n\n\n<p>\u2705 <strong>\u662f\uff0c\u672c\u8d28\u662f Servlet<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Q2\uff1a\u4e3a\u4ec0\u4e48 WHERE \u4e2d\u4e0d\u80fd\u5199\u4e1a\u52a1\u903b\u8f91\uff1f<\/h3>\n\n\n\n<p>\u274c \u4e1a\u52a1\u903b\u8f91\u5e94\u8be5\u5728 Servlet \/ Service<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Q3\uff1aJSP \u80fd\u8bbf\u95ee\u6570\u636e\u5e93\u5417\uff1f<\/h3>\n\n\n\n<p>\u26a0\ufe0f <strong>\u80fd\uff0c\u4f46\u4e0d\u5e94\u8be5<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Q4\uff1aforward \u548c redirect \u533a\u522b\uff1f<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u9879\u76ee<\/th><th>forward<\/th><th>redirect<\/th><\/tr><\/thead><tbody><tr><td>\u8bf7\u6c42\u6b21\u6570<\/td><td>1 \u6b21<\/td><td>2 \u6b21<\/td><\/tr><tr><td>\u5730\u5740\u680f<\/td><td>\u4e0d\u53d8<\/td><td>\u6539\u53d8<\/td><\/tr><tr><td>\u6570\u636e\u5171\u4eab<\/td><td>\u53ef<\/td><td>\u4e0d\u53ef<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u516b\u3001\u4e00\u53e5\u8bdd\u603b\u7ed3\uff08\u80cc\u4e0b\u6765\uff09<\/h1>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Servlet \u8d1f\u8d23\u201c\u505a\u4ec0\u4e48\u201d\uff0cJSP \u8d1f\u8d23\u201c\u600e\u4e48\u5c55\u793a\u201d<\/strong><br><strong>Servlet \u662f\u63a7\u5236\u5668\uff0cJSP \u662f\u89c6\u56fe<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p>\u597d\uff0c\u90a3\u6211\u76f4\u63a5\u7ed9\u4f60<strong>\u6700\u5e38\u7528\u3001\u6700\u6709\u542b\u91d1\u91cf\u7684\u5b9e\u6218\uff1a<br>\ud83d\udc49\u3010Servlet + JSP + MySQL \u767b\u5f55 &amp; \u6ce8\u518c\u5b8c\u6574\u793a\u4f8b\uff08\u6807\u51c6 MVC\uff09\u3011<\/strong><br>\u8fd9\u662f<strong>\u5b66\u4e60 \/ \u4f5c\u4e1a \/ \u9762\u8bd5 \/ \u6bd5\u8bbe<\/strong>\u90fd\u80fd\u76f4\u63a5\u7528\u7684\u7248\u672c\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u4e00\u3001\u9879\u76ee\u7ed3\u6784\uff08\u6807\u51c6 MVC\uff09<\/h1>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nlogin-demo\/\n\u2502\n\u251c\u2500\u2500 src\/\n\u2502   \u251c\u2500\u2500 com.example.servlet\n\u2502   \u2502   \u251c\u2500\u2500 LoginServlet.java\n\u2502   \u2502   \u2514\u2500\u2500 RegisterServlet.java\n\u2502   \u2502\n\u2502   \u251c\u2500\u2500 com.example.dao\n\u2502   \u2502   \u2514\u2500\u2500 UserDao.java\n\u2502   \u2502\n\u2502   \u251c\u2500\u2500 com.example.entity\n\u2502   \u2502   \u2514\u2500\u2500 User.java\n\u2502\n\u251c\u2500\u2500 web\/\n\u2502   \u251c\u2500\u2500 login.jsp\n\u2502   \u251c\u2500\u2500 register.jsp\n\u2502   \u251c\u2500\u2500 success.jsp\n\u2502   \u2514\u2500\u2500 WEB-INF\/web.xml\n\n<\/pre><\/div>\n\n\n<p>\ud83d\udccc <strong>\u804c\u8d23\u6e05\u6670\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Servlet\uff1a\u63a7\u5236\u5668<\/li>\n\n\n\n<li>DAO\uff1a\u6570\u636e\u8bbf\u95ee<\/li>\n\n\n\n<li>JSP\uff1a\u9875\u9762\u5c55\u793a<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u4e8c\u3001\u6570\u636e\u5e93\u8bbe\u8ba1\uff08MySQL\uff09<\/h1>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nCREATE DATABASE login_demo;\n\nUSE login_demo;\n\nCREATE TABLE user (\n    id INT PRIMARY KEY AUTO_INCREMENT,\n    username VARCHAR(50) UNIQUE,\n    password VARCHAR(50)\n);\n\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u4e09\u3001\u5b9e\u4f53\u7c7b\uff08Model\uff09<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\"><code>User.java<\/code><\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\npublic class User {\n    private int id;\n    private String username;\n    private String password;\n\n    \/\/ getter \/ setter\n}\n\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u56db\u3001DAO \u5c42\uff08\u6570\u636e\u5e93\u64cd\u4f5c\uff09<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\"><code>UserDao.java<\/code><\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\npublic class UserDao {\n\n    private Connection getConn() throws Exception {\n        Class.forName(&quot;com.mysql.cj.jdbc.Driver&quot;);\n        return DriverManager.getConnection(\n            &quot;jdbc:mysql:\/\/localhost:3306\/login_demo?useSSL=false&amp;amp;serverTimezone=UTC&quot;,\n            &quot;root&quot;,\n            &quot;123456&quot;\n        );\n    }\n\n    \/\/ \u767b\u5f55\u6821\u9a8c\n    public User login(String username, String password) throws Exception {\n        String sql = &quot;SELECT * FROM user WHERE username=? AND password=?&quot;;\n        Connection conn = getConn();\n        PreparedStatement ps = conn.prepareStatement(sql);\n        ps.setString(1, username);\n        ps.setString(2, password);\n\n        ResultSet rs = ps.executeQuery();\n        if (rs.next()) {\n            User u = new User();\n            u.setId(rs.getInt(&quot;id&quot;));\n            u.setUsername(rs.getString(&quot;username&quot;));\n            return u;\n        }\n        return null;\n    }\n\n    \/\/ \u6ce8\u518c\n    public boolean register(String username, String password) throws Exception {\n        String sql = &quot;INSERT INTO user(username,password) VALUES (?,?)&quot;;\n        Connection conn = getConn();\n        PreparedStatement ps = conn.prepareStatement(sql);\n        ps.setString(1, username);\n        ps.setString(2, password);\n        return ps.executeUpdate() &gt; 0;\n    }\n}\n\n<\/pre><\/div>\n\n\n<p>\ud83d\udccc <strong>\u9762\u8bd5\u52a0\u5206\u70b9\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4f7f\u7528 <code>PreparedStatement<\/code>\uff08\u9632 SQL \u6ce8\u5165\uff09<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u4e94\u3001Servlet\uff08Controller\uff09<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">1\ufe0f\u20e3 \u767b\u5f55 Servlet<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><code>LoginServlet.java<\/code><\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n@WebServlet(&quot;\/login&quot;)\npublic class LoginServlet extends HttpServlet {\n\n    protected void doPost(HttpServletRequest req, HttpServletResponse resp)\n            throws ServletException, IOException {\n\n        String username = req.getParameter(&quot;username&quot;);\n        String password = req.getParameter(&quot;password&quot;);\n\n        UserDao dao = new UserDao();\n        try {\n            User user = dao.login(username, password);\n            if (user != null) {\n                req.setAttribute(&quot;user&quot;, user);\n                req.getRequestDispatcher(&quot;success.jsp&quot;).forward(req, resp);\n            } else {\n                resp.sendRedirect(&quot;login.jsp?error=1&quot;);\n            }\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n    }\n}\n\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2\ufe0f\u20e3 \u6ce8\u518c Servlet<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><code>RegisterServlet.java<\/code><\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n@WebServlet(&quot;\/register&quot;)\npublic class RegisterServlet extends HttpServlet {\n\n    protected void doPost(HttpServletRequest req, HttpServletResponse resp)\n            throws ServletException, IOException {\n\n        String username = req.getParameter(&quot;username&quot;);\n        String password = req.getParameter(&quot;password&quot;);\n\n        UserDao dao = new UserDao();\n        try {\n            dao.register(username, password);\n            resp.sendRedirect(&quot;login.jsp&quot;);\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n    }\n}\n\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u516d\u3001JSP \u9875\u9762\uff08View\uff09<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">1\ufe0f\u20e3 \u767b\u5f55\u9875\u9762 <code>login.jsp<\/code><\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&amp;lt;form action=&quot;login&quot; method=&quot;post&quot;&gt;\n    \u7528\u6237\u540d\uff1a&amp;lt;input name=&quot;username&quot;&gt;&amp;lt;br&gt;\n    \u5bc6\u7801\uff1a&amp;lt;input type=&quot;password&quot; name=&quot;password&quot;&gt;&amp;lt;br&gt;\n    &amp;lt;button type=&quot;submit&quot;&gt;\u767b\u5f55&amp;lt;\/button&gt;\n&amp;lt;\/form&gt;\n\n&amp;lt;%\n    if (&quot;1&quot;.equals(request.getParameter(&quot;error&quot;))) {\n        out.print(&quot;\u7528\u6237\u540d\u6216\u5bc6\u7801\u9519\u8bef&quot;);\n    }\n%&gt;\n\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2\ufe0f\u20e3 \u6ce8\u518c\u9875\u9762 <code>register.jsp<\/code><\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&amp;lt;form action=&quot;register&quot; method=&quot;post&quot;&gt;\n    \u7528\u6237\u540d\uff1a&amp;lt;input name=&quot;username&quot;&gt;&amp;lt;br&gt;\n    \u5bc6\u7801\uff1a&amp;lt;input type=&quot;password&quot; name=&quot;password&quot;&gt;&amp;lt;br&gt;\n    &amp;lt;button type=&quot;submit&quot;&gt;\u6ce8\u518c&amp;lt;\/button&gt;\n&amp;lt;\/form&gt;\n\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3\ufe0f\u20e3 \u6210\u529f\u9875\u9762 <code>success.jsp<\/code><\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&amp;lt;h2&gt;\u6b22\u8fce\u4f60\uff1a${user.username}&amp;lt;\/h2&gt;\n\n<\/pre><\/div>\n\n\n<p>\ud83d\udccc \u4f7f\u7528 <strong>EL \u8868\u8fbe\u5f0f<\/strong>\uff08\u63a8\u8350\uff09<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u4e03\u3001\u6267\u884c\u6d41\u7a0b\uff08\u4e00\u5b9a\u8981\u61c2\uff09<\/h1>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\u6d4f\u89c8\u5668\n \u2193\nlogin.jsp\n \u2193\nLoginServlet\n \u2193\nUserDao \u67e5\u8be2\u6570\u636e\u5e93\n \u2193\nsuccess.jsp\n\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u516b\u3001\u8fd9\u4e2a\u6848\u4f8b\u4f60\u80fd\u5b66\u5230\u4ec0\u4e48\uff1f\uff08\u91cd\u70b9\uff09<\/h1>\n\n\n\n<p>\u2705 Servlet \u63a5\u6536\u8bf7\u6c42<br>\u2705 JSP \u5c55\u793a\u6570\u636e<br>\u2705 MVC \u5206\u5c42\u601d\u60f3<br>\u2705 JDBC \u57fa\u7840<br>\u2705 \u8f6c\u53d1 vs \u91cd\u5b9a\u5411<br>\u2705 \u9762\u8bd5\u80fd\u5b8c\u6574\u8bb2\u6e05\u6d41\u7a0b<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u4e5d\u3001\u9762\u8bd5\u4e00\u53e5\u8bdd\u603b\u7ed3\uff08\u76f4\u63a5\u80cc\uff09<\/h1>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Servlet \u8d1f\u8d23\u4e1a\u52a1\u63a7\u5236\uff0cJSP \u8d1f\u8d23\u9875\u9762\u5c55\u793a\uff0cDAO \u8d1f\u8d23\u6570\u636e\u8bbf\u95ee\uff0c\u4e09\u8005\u89e3\u8026\u6784\u6210 MVC<\/strong><\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>\u4e0b\u9762\u6211\u7528\u901a\u4fd7 + \u5b9e\u6218 + \u9762\u8bd5\u53cb\u597d\u7684\u65b9\u5f0f\uff0c\u7cfb\u7edf\u8bb2\u6e05\u695a Servlet \u4e0e JS&#8230; <a class=\"more-link\" href=\"https:\/\/www.52runoob.com\/index.php\/2026\/01\/10\/servlet%e4%b8%8ejsp%e4%bd%bf%e7%94%a8%e7%ae%80%e4%bb%8b%e5%8f%8a%e5%8c%ba%e5%88%ab%e8%af%a6%e8%a7%a3\/\">Continue Reading &rarr;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[54,1],"tags":[],"class_list":["post-1287","post","type-post","status-publish","format-standard","hentry","category-jsp","category-1"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts\/1287","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/comments?post=1287"}],"version-history":[{"count":1,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts\/1287\/revisions"}],"predecessor-version":[{"id":1289,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts\/1287\/revisions\/1289"}],"wp:attachment":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/media?parent=1287"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/categories?post=1287"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/tags?post=1287"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}