{"id":1156,"date":"2025-03-24T08:52:43","date_gmt":"2025-03-23T23:52:43","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=1156"},"modified":"2025-03-24T08:52:43","modified_gmt":"2025-03-23T23:52:43","slug":"%e3%80%902024%e5%b9%b4%e4%bf%9d%e5%ad%98%e7%89%88%e3%80%91javaserver-pages%e3%82%92%e5%ae%8c%e5%85%a8%e3%83%9e%e3%82%b9%e3%82%bf%e3%83%bc%ef%bc%81%e5%88%9d%e5%bf%83%e8%80%85%e3%81%a7%e3%82%82%e3%82%8f","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=1156","title":{"rendered":"\u30102024\u5e74\u4fdd\u5b58\u7248\u3011JavaServer Pages\u3092\u5b8c\u5168\u30de\u30b9\u30bf\u30fc\uff01\u521d\u5fc3\u8005\u3067\u3082\u308f\u304b\u308b\u5c0e\u5165\u304b\u3089\u5b9f\u8df5\u307e\u3067 \u8a18\u4e8b\u69cb\u6210"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">JavaServer Pages\uff08JSP\uff09\u3068\u306f\u4f55\u304b\uff1f<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">Java\u30d9\u30fc\u30b9\u306e\u52d5\u7684Web\u30da\u30fc\u30b8\u751f\u6210\u6280\u8853\u3068\u3057\u3066\u306eJSP<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-2\">JSP\u304c\u3082\u305f\u3089\u3059\u958b\u767a\u52b9\u7387\u5316\u306e\u30e1\u30ea\u30c3\u30c8<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-3\">JSP\u306e\u57fa\u672c\u69cb\u6587\u3068\u52d5\u4f5c\u306e\u4ed5\u7d44\u307f<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-4\">JSP\u30d5\u30a1\u30a4\u30eb\u306e\u57fa\u672c\u69cb\u9020\u3068\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u8981\u7d20<\/a>      <\/li>      <li>        <a href=\"#i-5\">\u30b9\u30af\u30ea\u30d7\u30c8\u30ec\u30c3\u30c8\u3001\u5f0f\u3001\u5ba3\u8a00\u306e\u4f7f\u3044\u65b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-6\">JSP\u304c\u30b5\u30fc\u30d6\u30ec\u30c3\u30c8\u306b\u30b3\u30f3\u30d1\u30a4\u30eb\u3055\u308c\u308b\u4ed5\u7d44\u307f<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-7\">JSP\u306e\u958b\u767a\u74b0\u5883\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-8\">\u5fc5\u8981\u306a\u30c4\u30fc\u30eb\u3068\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-9\">\u7d71\u5408\u958b\u767a\u74b0\u5883\uff08IDE\uff09\u3067\u306e\u52b9\u7387\u7684\u306aJSP\u958b\u767a\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-10\">\u5b9f\u8df5\u7684\u306aJSP\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-11\">MVC\u30e2\u30c7\u30eb\u306b\u57fa\u3065\u3044\u305fJSP\u306e\u5b9f\u88c5\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-12\">\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u9023\u643a\u6a5f\u80fd\u306e\u5b9f\u88c5\u624b\u9806<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-13\">\u30bb\u30c3\u30b7\u30e7\u30f3\u7ba1\u7406\u3068\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u306e\u5b9f\u88c5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-14\">JSP\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-15\">JSP\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u306e\u63a8\u5968\u30d1\u30bf\u30fc\u30f3\u3068\u6ce8\u610f\u70b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-16\">\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\u3068\u30ec\u30b9\u30dd\u30f3\u30b9\u6642\u9593\u306e\u6539\u5584\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-17\">\u6700\u65b0\u306eWeb\u958b\u767a\u306b\u304a\u3051\u308bJSP\u306e\u4f4d\u7f6e\u3065\u3051<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-18\">\u30e2\u30c0\u30f3\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u306e\u6bd4\u8f03\u3068\u4f7f\u3044\u5206\u3051<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-19\">\u30ec\u30ac\u30b7\u30fc\u30b7\u30b9\u30c6\u30e0\u3067\u306eJSP\u6d3b\u7528\u6226\u7565<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-20\">\u3088\u304f\u3042\u308b\u958b\u767a\u4e0a\u306e\u8ab2\u984c\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-21\">\u4e00\u822c\u7684\u306a\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u610f\u5473\u3068\u5bfe\u51e6\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-22\">\u30c7\u30d0\u30c3\u30b0\u3068\u30c6\u30b9\u30c8\u306e\u52b9\u679c\u7684\u306a\u9032\u3081\u65b9<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">JavaServer Pages\uff08JSP\uff09\u3068\u306f\u4f55\u304b\uff1f<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">Java\u30d9\u30fc\u30b9\u306e\u52d5\u7684Web\u30da\u30fc\u30b8\u751f\u6210\u6280\u8853\u3068\u3057\u3066\u306eJSP<\/h3>\n\n\n\n<p>JavaServer Pages\uff08JSP\uff09\u306f\u3001Java\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u304c\u63d0\u4f9b\u3059\u308b\u52d5\u7684\u306aWeb\u30da\u30fc\u30b8\u751f\u6210\u6280\u8853\u3067\u3059\u3002HTML\u3084XML\u306bJava\u30b3\u30fc\u30c9\u3092\u57cb\u3081\u8fbc\u3080\u3053\u3068\u3067\u3001\u52d5\u7684\u306a\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u751f\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002JSP\u306f\u30011999\u5e74\u306bSun Microsystems\uff08\u73feOracle\uff09\u306b\u3088\u3063\u3066\u958b\u767a\u3055\u308c\u3001Java EE\uff08\u73feJakarta EE\uff09\u4ed5\u69d8\u306e\u91cd\u8981\u306a\u4e00\u90e8\u3068\u3057\u3066\u4f4d\u7f6e\u3065\u3051\u3089\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>JSP\u306e\u4e3b\u306a\u7279\u5fb4\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30b5\u30fc\u30d0\u30fc\u30b5\u30a4\u30c9\u6280\u8853<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Web\u30b5\u30fc\u30d0\u30fc\u4e0a\u3067Java\u30b3\u30fc\u30c9\u304c\u5b9f\u884c\u3055\u308c\u308b<\/li>\n\n\n\n<li>\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306b\u306f\u751f\u6210\u3055\u308c\u305fHTML\u306e\u307f\u304c\u9001\u4fe1\u3055\u308c\u308b<\/li>\n\n\n\n<li>\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u3092\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304b\u3089\u96a0\u853d\u53ef\u80fd<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u72ec\u7acb\u6027<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Java\u8a00\u8a9e\u306e\u7279\u5fb4\u3092\u6d3b\u304b\u3057\u305f\u300cWrite Once, Run Anywhere\u300d<\/li>\n\n\n\n<li>\u69d8\u3005\u306a\u30aa\u30da\u30ec\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0\u3067\u52d5\u4f5c<\/li>\n\n\n\n<li>\u7570\u306a\u308bWeb\u30b5\u30fc\u30d0\u30fc\u9593\u3067\u306e\u79fb\u690d\u6027\u304c\u9ad8\u3044<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u6307\u5411<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u518d\u5229\u7528\u53ef\u80fd\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u4f5c\u6210\u304c\u5bb9\u6613<\/li>\n\n\n\n<li>\u30ab\u30b9\u30bf\u30e0\u30bf\u30b0\u30e9\u30a4\u30d6\u30e9\u30ea\u306b\u3088\u308b\u6a5f\u80fd\u62e1\u5f35<\/li>\n\n\n\n<li>\u30e2\u30b8\u30e5\u30fc\u30eb\u5316\u306b\u3088\u308b\u958b\u767a\u52b9\u7387\u306e\u5411\u4e0a<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">JSP\u304c\u3082\u305f\u3089\u3059\u958b\u767a\u52b9\u7387\u5316\u306e\u30e1\u30ea\u30c3\u30c8<\/h3>\n\n\n\n<p>JSP\u306e\u63a1\u7528\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u958b\u767a\u52b9\u7387\u5316\u304c\u5b9f\u73fe\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>HTML\/Java\u30b3\u30fc\u30c9\u306e\u30b9\u30e0\u30fc\u30ba\u306aUI\u8a2d\u8a08<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d7\u30ec\u30bc\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u5c64\u3068\u30ed\u30b8\u30c3\u30af\u5c64\u306e\u5206\u96e2<\/li>\n\n\n\n<li>\u30c7\u30b6\u30a4\u30ca\u30fc\u3068\u30d7\u30ed\u30b0\u30e9\u30de\u30fc\u306e\u5354\u696d\u304c\u3057\u3084\u3059\u3044<\/li>\n\n\n\n<li>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u3068\u3057\u3066\u306e\u6d3b\u7528<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u8c4a\u5bcc\u306a\u7d44\u307f\u8fbc\u307f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   &lt;%\n   \/\/ \u30bb\u30c3\u30b7\u30e7\u30f3\u60c5\u5831\u3078\u306e\u30a2\u30af\u30bb\u30b9\n   String userName = session.getAttribute(\"userName\");\n\n   \/\/ \u30ea\u30af\u30a8\u30b9\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u53d6\u5f97\n   String param = request.getParameter(\"id\");\n\n   \/\/ \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30b9\u30b3\u30fc\u30d7\u306e\u5229\u7528\n   application.setAttribute(\"counter\", visitorCount);\n   %&gt;<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30a8\u30e9\u30fc\u51e6\u7406\u306e\u5bb9\u6613\u3055<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>try-catch\u69cb\u6587\u306b\u3088\u308b\u4f8b\u5916\u51e6\u7406<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u30da\u30fc\u30b8\u306e\u67d4\u8edf\u306a\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/li>\n\n\n\n<li>\u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u306e\u8a73\u7d30\u306a\u51fa\u529b<\/li>\n<\/ul>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u306e\u78ba\u4fdd<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b9\u30ec\u30c3\u30c9\u30bb\u30fc\u30d5\u306a\u5b9f\u88c5\u304c\u53ef\u80fd<\/li>\n\n\n\n<li>\u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u30d7\u30fc\u30ea\u30f3\u30b0\u306b\u3088\u308b\u30ea\u30bd\u30fc\u30b9\u6700\u9069\u5316<\/li>\n\n\n\n<li>\u30af\u30e9\u30b9\u30bf\u30ea\u30f3\u30b0\u74b0\u5883\u3067\u306e\u52d5\u4f5c\u4fdd\u8a3c<\/li>\n<\/ul>\n\n\n\n<p>JSP\u306e\u5b9f\u88c5\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;%@ page language=\"java\" contentType=\"text\/html; charset=UTF-8\" pageEncoding=\"UTF-8\"%&gt;\n&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n    &lt;title&gt;JSP\u30b5\u30f3\u30d7\u30eb&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;%-- Java\u30b3\u30fc\u30c9\u306e\u57cb\u3081\u8fbc\u307f\u4f8b --%&gt;\n    &lt;% \n    String greeting = \"\u3053\u3093\u306b\u3061\u306f\";\n    java.time.LocalDateTime now = java.time.LocalDateTime.now();\n    %&gt;\n\n    &lt;h1&gt;&lt;%= greeting %&gt;&lt;\/h1&gt;\n    &lt;p&gt;\u73fe\u5728\u6642\u523b: &lt;%= now %&gt;&lt;\/p&gt;\n\n    &lt;%-- \u6761\u4ef6\u5206\u5c90\u306e\u4f8b --%&gt;\n    &lt;% if (session.getAttribute(\"user\") != null) { %&gt;\n        &lt;p&gt;\u30ed\u30b0\u30a4\u30f3\u4e2d\u3067\u3059&lt;\/p&gt;\n    &lt;% } else { %&gt;\n        &lt;p&gt;\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u3044\u307e\u305b\u3093&lt;\/p&gt;\n    &lt;% } %&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/pre>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306b\u3001JSP\u306f Java \u306e\u5f37\u529b\u306a\u6a5f\u80fd\u3068 HTML \u306e\u67d4\u8edf\u6027\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u52b9\u7387\u7684\u306aWeb\u958b\u767a\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002\u7279\u306b\u3001\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30b7\u30b9\u30c6\u30e0\u306e\u958b\u767a\u306b\u304a\u3044\u3066\u3001\u305d\u306e\u771f\u4fa1\u3092\u767a\u63ee\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-3\">JSP\u306e\u57fa\u672c\u69cb\u6587\u3068\u52d5\u4f5c\u306e\u4ed5\u7d44\u307f<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">JSP\u30d5\u30a1\u30a4\u30eb\u306e\u57fa\u672c\u69cb\u9020\u3068\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u8981\u7d20<\/h3>\n\n\n\n<p>JSP\u30d5\u30a1\u30a4\u30eb\u306f\u3001HTML\/XML\u30b3\u30f3\u30c6\u30f3\u30c4\u3068JSP\u8981\u7d20\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u69cb\u6210\u3055\u308c\u307e\u3059\u3002\u57fa\u672c\u7684\u306a\u69cb\u9020\u8981\u7d20\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30c7\u30a3\u30ec\u30af\u30c6\u30a3\u30d6\u8981\u7d20<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;%@ page language=\"java\" contentType=\"text\/html; charset=UTF-8\" pageEncoding=\"UTF-8\"%&gt;\n&lt;%@ taglib prefix=\"c\" uri=\"http:\/\/java.sun.com\/jsp\/jstl\/core\"%&gt;\n&lt;%@ include file=\"header.jsp\"%&gt;<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>page: \u30da\u30fc\u30b8\u306e\u57fa\u672c\u5c5e\u6027\u3092\u8a2d\u5b9a<\/li>\n\n\n\n<li>taglib: \u30ab\u30b9\u30bf\u30e0\u30bf\u30b0\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u5c0e\u5165<\/li>\n\n\n\n<li>include: \u5916\u90e8\u30d5\u30a1\u30a4\u30eb\u3092\u9759\u7684\u306b\u53d6\u308a\u8fbc\u3080<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30c7\u30fc\u30bf<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u901a\u5e38\u306eHTML\/XML\u30de\u30fc\u30af\u30a2\u30c3\u30d7<\/li>\n\n\n\n<li>\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306b\u305d\u306e\u307e\u307e\u9001\u4fe1\u3055\u308c\u308b\u90e8\u5206<\/li>\n\n\n\n<li>JSP\u8981\u7d20\u3068\u81ea\u7531\u306b\u7d44\u307f\u5408\u308f\u305b\u53ef\u80fd<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u30b9\u30af\u30ea\u30d7\u30c8\u30ec\u30c3\u30c8\u3001\u5f0f\u3001\u5ba3\u8a00\u306e\u4f7f\u3044\u65b9<\/h3>\n\n\n\n<p>JSP\u306b\u306f3\u7a2e\u985e\u306e\u4e3b\u8981\u306a\u30b9\u30af\u30ea\u30d7\u30c8\u8981\u7d20\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30b9\u30af\u30ea\u30d7\u30c8\u30ec\u30c3\u30c8 <code>&lt;% ... %&gt;<\/code><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;%\n    \/\/ Java\u30b3\u30fc\u30c9\u30d6\u30ed\u30c3\u30af\n    String name = request.getParameter(\"name\");\n    int age = Integer.parseInt(request.getParameter(\"age\"));\n\n    if (age &gt;= 20) {\n        session.setAttribute(\"adult\", true);\n    }\n%&gt;<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u5f0f <code>&lt;%= ... %&gt;<\/code><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;p&gt;\u3053\u3093\u306b\u3061\u306f\u3001&lt;%= name %&gt;\u3055\u3093&lt;\/p&gt;\n&lt;p&gt;\u3042\u306a\u305f\u306f&lt;%= age %&gt;\u6b73\u3067\u3059&lt;\/p&gt;<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u5ba3\u8a00 <code>&lt;%! ... %&gt;<\/code><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;%!\n    \/\/ \u30af\u30e9\u30b9\u30ec\u30d9\u30eb\u306e\u5ba3\u8a00\n    private int accessCount = 0;\n\n    public String formatDate(java.util.Date date) {\n        return new java.text.SimpleDateFormat(\"yyyy\/MM\/dd\").format(date);\n    }\n%&gt;<\/pre>\n\n\n\n<p>\u5b9f\u8df5\u7684\u306a\u4f7f\u7528\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;%@ page language=\"java\" contentType=\"text\/html; charset=UTF-8\" pageEncoding=\"UTF-8\"%&gt;\n&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n    &lt;title&gt;\u30e6\u30fc\u30b6\u30fc\u60c5\u5831&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;%! \n        \/\/ \u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30e1\u30bd\u30c3\u30c9\u306e\u5b9a\u7fa9\n        private String sanitizeInput(String input) {\n            return input != null ? input.replaceAll(\"&lt;\", \"&amp;lt;\").replaceAll(\"&gt;\", \"&amp;gt;\") : \"\";\n        }\n    %&gt;\n\n    &lt;%\n        \/\/ \u30ea\u30af\u30a8\u30b9\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u51e6\u7406\n        String userName = request.getParameter(\"name\");\n        String userComment = request.getParameter(\"comment\");\n\n        \/\/ \u5165\u529b\u5024\u306e\u30b5\u30cb\u30bf\u30a4\u30ba\n        userName = sanitizeInput(userName);\n        userComment = sanitizeInput(userComment);\n    %&gt;\n\n    &lt;h1&gt;\u30e6\u30fc\u30b6\u30fc\u60c5\u5831&lt;\/h1&gt;\n    &lt;p&gt;\u540d\u524d: &lt;%= userName %&gt;&lt;\/p&gt;\n    &lt;p&gt;\u30b3\u30e1\u30f3\u30c8: &lt;%= userComment %&gt;&lt;\/p&gt;\n\n    &lt;% if (userName != null &amp;&amp; !userName.isEmpty()) { %&gt;\n        &lt;p&gt;\u3088\u3046\u3053\u305d\uff01&lt;\/p&gt;\n    &lt;% } else { %&gt;\n        &lt;p&gt;\u540d\u524d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002&lt;\/p&gt;\n    &lt;% } %&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">JSP\u304c\u30b5\u30fc\u30d6\u30ec\u30c3\u30c8\u306b\u30b3\u30f3\u30d1\u30a4\u30eb\u3055\u308c\u308b\u4ed5\u7d44\u307f<\/h3>\n\n\n\n<p>JSP\u30d5\u30a1\u30a4\u30eb\u304c\u30b5\u30fc\u30d6\u30ec\u30c3\u30c8\u306b\u5909\u63db\u3055\u308c\u308b\u904e\u7a0b\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5909\u63db\u30d5\u30a7\u30fc\u30ba<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>JSP\u30d5\u30a1\u30a4\u30eb\u304cJava\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306b\u5909\u63db<\/li>\n\n\n\n<li>\u30b9\u30af\u30ea\u30d7\u30c8\u8981\u7d20\u304cservlet API\u306b\u5bfe\u5fdc\u3059\u308bJava\u30b3\u30fc\u30c9\u306b\u5909\u63db<\/li>\n\n\n\n<li>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30c7\u30fc\u30bf\u304cout.print()\u30e1\u30bd\u30c3\u30c9\u306b\u5909\u63db<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30b3\u30f3\u30d1\u30a4\u30eb\u30d5\u30a7\u30fc\u30ba<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u751f\u6210\u3055\u308c\u305fJava\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u304c\u30b3\u30f3\u30d1\u30a4\u30eb\u3055\u308c\u308b<\/li>\n\n\n\n<li>\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u304c\u751f\u6210\u3055\u308c\u308b<\/li>\n\n\n\n<li>\u30b5\u30fc\u30d6\u30ec\u30c3\u30c8\u3068\u3057\u3066\u5b9f\u884c\u53ef\u80fd\u306a\u72b6\u614b\u306b\u306a\u308b<\/li>\n<\/ul>\n\n\n\n<p>\u5909\u63db\u5f8c\u306e\u30b5\u30fc\u30d6\u30ec\u30c3\u30c8\u306e\u57fa\u672c\u69cb\u9020\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class example_jsp extends HttpJspBase {\n    \/\/ \u5ba3\u8a00\u90e8\u5206\u304c\u3053\u3053\u306b\u5909\u63db\u3055\u308c\u308b\n    private int accessCount = 0;\n\n    public void _jspService(HttpServletRequest request, \n                           HttpServletResponse response) \n        throws ServletException, IOException {\n\n        \/\/ \u6697\u9ed9\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u521d\u671f\u5316\n        PageContext pageContext = ...;\n        HttpSession session = ...;\n        ServletContext application = ...;\n        JspWriter out = ...;\n\n        \/\/ \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30c7\u30fc\u30bf\u3068\u30b9\u30af\u30ea\u30d7\u30c8\u30ec\u30c3\u30c8\u304c\n        \/\/ \u3053\u3053\u306b\u5909\u63db\u3055\u308c\u308b\n        out.write(\"&lt;html&gt;\");\n        String name = request.getParameter(\"name\");\n        out.write(\"&lt;p&gt;Hello, \" + name + \"&lt;\/p&gt;\");\n\n        \/\/ \u4ee5\u4e0b\u7d9a\u304f...\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u306e\u5909\u63db\u30fb\u30b3\u30f3\u30d1\u30a4\u30eb\u30d7\u30ed\u30bb\u30b9\u306f\u901a\u5e38\u3001\u6700\u521d\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u6642\u306b\u81ea\u52d5\u7684\u306b\u5b9f\u884c\u3055\u308c\u3001\u305d\u306e\u5f8c\u306f\u30b3\u30f3\u30d1\u30a4\u30eb\u6e08\u307f\u306e\u30b5\u30fc\u30d6\u30ec\u30c3\u30c8\u304c\u518d\u5229\u7528\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u30012\u56de\u76ee\u4ee5\u964d\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3067\u306f\u9ad8\u3044\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u5b9f\u73fe\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-7\">JSP\u306e\u958b\u767a\u74b0\u5883\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">\u5fc5\u8981\u306a\u30c4\u30fc\u30eb\u3068\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65b9\u6cd5<\/h3>\n\n\n\n<p>JSP\u958b\u767a\u306b\u5fc5\u8981\u306a\u57fa\u672c\u7684\u306a\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3068\u305d\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>JDK\uff08Java Development Kit\uff09\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # Ubuntu\u306e\u5834\u5408\n   sudo apt update\n   sudo apt install openjdk-17-jdk\n\n   # Windows: \u516c\u5f0f\u30b5\u30a4\u30c8\u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\n   # \u74b0\u5883\u5909\u6570\u306e\u8a2d\u5b9a\n   JAVA_HOME=C:\\Program Files\\Java\\jdk-17\n   PATH=%PATH%;%JAVA_HOME%\\bin<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Apache Tomcat\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # Ubuntu\u306e\u5834\u5408\n   sudo apt install tomcat9\n\n   # Windows: \u516c\u5f0f\u30b5\u30a4\u30c8\u304b\u3089zip\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\n   # \u89e3\u51cd\u5f8c\u3001\u4ee5\u4e0b\u306e\u74b0\u5883\u5909\u6570\u3092\u8a2d\u5b9a\n   CATALINA_HOME=C:\\apache-tomcat-9.0.x\n   PATH=%PATH%;%CATALINA_HOME%\\bin<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Tomcat\u306e\u57fa\u672c\u8a2d\u5b9a<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   &lt;!-- conf\/server.xml --&gt;\n   &lt;Connector port=\"8080\" protocol=\"HTTP\/1.1\"\n              connectionTimeout=\"20000\"\n              redirectPort=\"8443\" \/&gt;\n\n   &lt;!-- conf\/tomcat-users.xml --&gt;\n   &lt;role rolename=\"manager-gui\"\/&gt;\n   &lt;user username=\"admin\" password=\"password\" roles=\"manager-gui\"\/&gt;<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u69cb\u9020\u306e\u4f5c\u6210<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   webapp\/\n   \u251c\u2500\u2500 WEB-INF\/\n   \u2502   \u251c\u2500\u2500 web.xml\n   \u2502   \u251c\u2500\u2500 classes\/\n   \u2502   \u2514\u2500\u2500 lib\/\n   \u251c\u2500\u2500 META-INF\/\n   \u2514\u2500\u2500 jsp\/\n       \u2514\u2500\u2500 index.jsp<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">\u7d71\u5408\u958b\u767a\u74b0\u5883\uff08IDE\uff09\u3067\u306e\u52b9\u7387\u7684\u306aJSP\u958b\u767a\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Eclipse IDE\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Eclipse IDE for Enterprise Java and Web Developers\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9<\/li>\n\n\n\n<li>\u4ee5\u4e0b\u306e\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb \u201c`plaintext\n<ul class=\"wp-block-list\">\n<li>Jakarta EE Developer Tools<\/li>\n\n\n\n<li>Web Developer Tools<\/li>\n\n\n\n<li>XML Editor<br>\u201c`<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u65b0\u898fJSP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210\u624b\u9806<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   1. File \u2192 New \u2192 Dynamic Web Project\n   2. \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u3092\u5165\u529b\n   3. \u30bf\u30fc\u30b2\u30c3\u30c8\u30e9\u30f3\u30bf\u30a4\u30e0\u3068\u3057\u3066Tomcat 9.0\u3092\u9078\u629e\n   4. \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u69cb\u6210\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u8a2d\u5b9a<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Eclipse\u56fa\u6709\u306e\u8a2d\u5b9a<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   &lt;!-- .settings\/org.eclipse.jdt.core.prefs --&gt;\n   eclipse.preferences.version=1\n   org.eclipse.jdt.core.compiler.codegen.targetPlatform=17\n   org.eclipse.jdt.core.compiler.compliance=17\n   org.eclipse.jdt.core.compiler.source=17<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>\u30c7\u30d0\u30c3\u30b0\u74b0\u5883\u306e\u69cb\u7bc9<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   1. \u30b5\u30fc\u30d0\u30fc\u30d3\u30e5\u30fc\u3092\u8868\u793a\n   2. \u65b0\u898f\u30b5\u30fc\u30d0\u30fc\u306e\u8ffd\u52a0\n   3. \u30d6\u30ec\u30fc\u30af\u30dd\u30a4\u30f3\u30c8\u306e\u8a2d\u5b9a\u65b9\u6cd5\n   4. \u30c7\u30d0\u30c3\u30b0\u30e2\u30fc\u30c9\u3067\u306e\u5b9f\u884c\u65b9\u6cd5<\/pre>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li>\u958b\u767a\u52b9\u7387\u3092\u4e0a\u3052\u308b\u305f\u3081\u306e\u8a2d\u5b9a a. \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u6d3b\u7528<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   &lt;%@ page language=\"java\" contentType=\"text\/html; charset=UTF-8\"\n       pageEncoding=\"UTF-8\"%&gt;\n   &lt;!DOCTYPE html&gt;\n   &lt;html&gt;\n   &lt;head&gt;\n   &lt;meta charset=\"UTF-8\"&gt;\n   &lt;title&gt;Insert title here&lt;\/title&gt;\n   &lt;\/head&gt;\n   &lt;body&gt;\n\n   &lt;\/body&gt;\n   &lt;\/html&gt;<\/pre>\n\n\n\n<p>b. \u30db\u30c3\u30c8\u30c7\u30d7\u30ed\u30a4\u306e\u8a2d\u5b9a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   &lt;!-- context.xml --&gt;\n   &lt;Context reloadable=\"true\"&gt;\n       &lt;!-- \u305d\u306e\u4ed6\u306e\u8a2d\u5b9a --&gt;\n   &lt;\/Context&gt;<\/pre>\n\n\n\n<ol start=\"6\" class=\"wp-block-list\">\n<li>\u4fbf\u5229\u306a\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8\u30ad\u30fc<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   - Ctrl + Space: \u30b3\u30fc\u30c9\u88dc\u5b8c\n   - Ctrl + Shift + F: \u30b3\u30fc\u30c9\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\n   - Ctrl + Shift + O: \u30a4\u30f3\u30dd\u30fc\u30c8\u306e\u6574\u7406\n   - Alt + Shift + R: \u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0<\/pre>\n\n\n\n<ol start=\"7\" class=\"wp-block-list\">\n<li>\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u7528\u306e\u8a2d\u5b9a<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   &lt;!-- web.xml --&gt;\n   &lt;error-page&gt;\n       &lt;error-code&gt;404&lt;\/error-code&gt;\n       &lt;location&gt;\/error\/404.jsp&lt;\/location&gt;\n   &lt;\/error-page&gt;\n   &lt;error-page&gt;\n       &lt;error-code&gt;500&lt;\/error-code&gt;\n       &lt;location&gt;\/error\/500.jsp&lt;\/location&gt;\n   &lt;\/error-page&gt;<\/pre>\n\n\n\n<p>\u3053\u306e\u74b0\u5883\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u306b\u3088\u308a\u3001\u52b9\u7387\u7684\u306aJSP\u958b\u767a\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u7279\u306b\u521d\u671f\u6bb5\u968e\u3067\u306e\u30c7\u30d0\u30c3\u30b0\u74b0\u5883\u306e\u6574\u5099\u306f\u3001\u958b\u767a\u52b9\u7387\u3092\u5927\u304d\u304f\u5411\u4e0a\u3055\u305b\u308b\u91cd\u8981\u306a\u8981\u7d20\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-10\">\u5b9f\u8df5\u7684\u306aJSP\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">MVC\u30e2\u30c7\u30eb\u306b\u57fa\u3065\u3044\u305fJSP\u306e\u5b9f\u88c5\u65b9\u6cd5<\/h3>\n\n\n\n<p>MVC\u30d1\u30bf\u30fc\u30f3\u3092\u7528\u3044\u305fJSP\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30e2\u30c7\u30eb\uff08Model\uff09\u306e\u5b9f\u88c5<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ User.java\npublic class User {\n    private int id;\n    private String username;\n    private String email;\n\n    \/\/ getters, setters\n}\n\n\/\/ UserDAO.java\npublic class UserDAO {\n    private Connection conn;\n\n    public UserDAO() {\n        \/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u306e\u521d\u671f\u5316\n    }\n\n    public User findById(int id) {\n        \/\/ \u30e6\u30fc\u30b6\u30fc\u691c\u7d22\u30ed\u30b8\u30c3\u30af\n    }\n\n    public void save(User user) {\n        \/\/ \u30e6\u30fc\u30b6\u30fc\u4fdd\u5b58\u30ed\u30b8\u30c3\u30af\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\uff08Controller\uff09\u306e\u5b9f\u88c5<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ UserServlet.java\n@WebServlet(\"\/users\/*\")\npublic class UserServlet extends HttpServlet {\n    private UserDAO userDAO;\n\n    @Override\n    public void init() {\n        userDAO = new UserDAO();\n    }\n\n    @Override\n    protected void doGet(HttpServletRequest request, HttpServletResponse response) \n            throws ServletException, IOException {\n        String action = request.getPathInfo();\n\n        switch (action) {\n            case \"\/list\":\n                listUsers(request, response);\n                break;\n            case \"\/edit\":\n                editUser(request, response);\n                break;\n            default:\n                response.sendError(HttpServletResponse.SC_NOT_FOUND);\n        }\n    }\n\n    private void listUsers(HttpServletRequest request, HttpServletResponse response) \n            throws ServletException, IOException {\n        List&lt;User&gt; users = userDAO.findAll();\n        request.setAttribute(\"users\", users);\n        request.getRequestDispatcher(\"\/WEB-INF\/views\/user\/list.jsp\")\n               .forward(request, response);\n    }\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30d3\u30e5\u30fc\uff08View\uff09\u306e\u5b9f\u88c5<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;%-- \/WEB-INF\/views\/user\/list.jsp --%&gt;\n&lt;%@ page language=\"java\" contentType=\"text\/html; charset=UTF-8\" pageEncoding=\"UTF-8\"%&gt;\n&lt;%@ taglib prefix=\"c\" uri=\"http:\/\/java.sun.com\/jsp\/jstl\/core\" %&gt;\n\n&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n    &lt;title&gt;\u30e6\u30fc\u30b6\u30fc\u4e00\u89a7&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;h1&gt;\u30e6\u30fc\u30b6\u30fc\u4e00\u89a7&lt;\/h1&gt;\n    &lt;table&gt;\n        &lt;tr&gt;\n            &lt;th&gt;ID&lt;\/th&gt;\n            &lt;th&gt;\u30e6\u30fc\u30b6\u30fc\u540d&lt;\/th&gt;\n            &lt;th&gt;\u30e1\u30fc\u30eb&lt;\/th&gt;\n            &lt;th&gt;\u64cd\u4f5c&lt;\/th&gt;\n        &lt;\/tr&gt;\n        &lt;c:forEach items=\"${users}\" var=\"user\"&gt;\n            &lt;tr&gt;\n                &lt;td&gt;${user.id}&lt;\/td&gt;\n                &lt;td&gt;${user.username}&lt;\/td&gt;\n                &lt;td&gt;${user.email}&lt;\/td&gt;\n                &lt;td&gt;\n                    &lt;a href=\"edit?id=${user.id}\"&gt;\u7de8\u96c6&lt;\/a&gt;\n                &lt;\/td&gt;\n            &lt;\/tr&gt;\n        &lt;\/c:forEach&gt;\n    &lt;\/table&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u9023\u643a\u6a5f\u80fd\u306e\u5b9f\u88c5\u624b\u9806<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u8a2d\u5b9a<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ DatabaseUtil.java\npublic class DatabaseUtil {\n    private static final String URL = \"jdbc:mysql:\/\/localhost:3306\/myapp\";\n    private static final String USER = \"username\";\n    private static final String PASSWORD = \"password\";\n\n    public static Connection getConnection() throws SQLException {\n        try {\n            Class.forName(\"com.mysql.cj.jdbc.Driver\");\n            return DriverManager.getConnection(URL, USER, PASSWORD);\n        } catch (ClassNotFoundException e) {\n            throw new SQLException(\"\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c9\u30e9\u30a4\u30d0\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\", e);\n        }\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u30d7\u30fc\u30eb\u306e\u8a2d\u5b9a<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!-- context.xml --&gt;\n&lt;Context&gt;\n    &lt;Resource name=\"jdbc\/MyDB\" \n              auth=\"Container\" \n              type=\"javax.sql.DataSource\"\n              maxTotal=\"100\" \n              maxIdle=\"30\" \n              maxWaitMillis=\"10000\"\n              username=\"username\" \n              password=\"password\" \n              driverClassName=\"com.mysql.cj.jdbc.Driver\"\n              url=\"jdbc:mysql:\/\/localhost:3306\/myapp\"\/&gt;\n&lt;\/Context&gt;<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public void updateUser(User user) throws SQLException {\n    Connection conn = null;\n    try {\n        conn = DatabaseUtil.getConnection();\n        conn.setAutoCommit(false);\n\n        \/\/ \u30e6\u30fc\u30b6\u30fc\u60c5\u5831\u306e\u66f4\u65b0\n        UserDAO userDAO = new UserDAO(conn);\n        userDAO.update(user);\n\n        \/\/ \u95a2\u9023\u60c5\u5831\u306e\u66f4\u65b0\n        ProfileDAO profileDAO = new ProfileDAO(conn);\n        profileDAO.update(user.getProfile());\n\n        conn.commit();\n    } catch (SQLException e) {\n        if (conn != null) {\n            conn.rollback();\n        }\n        throw e;\n    } finally {\n        if (conn != null) {\n            conn.close();\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">\u30bb\u30c3\u30b7\u30e7\u30f3\u7ba1\u7406\u3068\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u306e\u5b9f\u88c5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30bb\u30c3\u30b7\u30e7\u30f3\u7ba1\u7406<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ LoginServlet.java\n@WebServlet(\"\/login\")\npublic class LoginServlet extends HttpServlet {\n    @Override\n    protected void doPost(HttpServletRequest request, HttpServletResponse response) \n            throws ServletException, IOException {\n        String username = request.getParameter(\"username\");\n        String password = request.getParameter(\"password\");\n\n        UserService userService = new UserService();\n        if (userService.authenticate(username, password)) {\n            HttpSession session = request.getSession();\n            session.setAttribute(\"user\", username);\n            session.setMaxInactiveInterval(1800); \/\/ 30\u5206\n\n            response.sendRedirect(\"dashboard\");\n        } else {\n            request.setAttribute(\"error\", \"\u30ed\u30b0\u30a4\u30f3\u306b\u5931\u6557\u3057\u307e\u3057\u305f\");\n            request.getRequestDispatcher(\"\/login.jsp\").forward(request, response);\n        }\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30d5\u30a3\u30eb\u30bf\u30fc<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@WebFilter(\"\/*\")\npublic class SecurityFilter implements Filter {\n    @Override\n    public void doFilter(ServletRequest request, ServletResponse response, \n                        FilterChain chain) \n            throws IOException, ServletException {\n        HttpServletRequest httpRequest = (HttpServletRequest) request;\n        HttpServletResponse httpResponse = (HttpServletResponse) response;\n        HttpSession session = httpRequest.getSession(false);\n\n        boolean isLoggedIn = (session != null &amp;&amp; session.getAttribute(\"user\") != null);\n        String loginURI = httpRequest.getContextPath() + \"\/login\";\n\n        boolean isLoginRequest = httpRequest.getRequestURI().equals(loginURI);\n        boolean isLoginPage = httpRequest.getRequestURI().endsWith(\"login.jsp\");\n\n        if (isLoggedIn &amp;&amp; (isLoginRequest || isLoginPage)) {\n            \/\/ \u30ed\u30b0\u30a4\u30f3\u6e08\u307f\u30e6\u30fc\u30b6\u30fc\u306e\u30ed\u30b0\u30a4\u30f3\u30da\u30fc\u30b8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u9632\u3050\n            httpResponse.sendRedirect(\"dashboard\");\n        } else if (!isLoggedIn &amp;&amp; !(isLoginRequest || isLoginPage)) {\n            \/\/ \u672a\u30ed\u30b0\u30a4\u30f3\u30e6\u30fc\u30b6\u30fc\u306e\u4fdd\u8b77\u30da\u30fc\u30b8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u9632\u3050\n            httpResponse.sendRedirect(loginURI);\n        } else {\n            chain.doFilter(request, response);\n        }\n    }\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>XSS\u5bfe\u7b56<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class SecurityUtil {\n    public static String escapeHTML(String input) {\n        if (input == null) {\n            return \"\";\n        }\n        return input.replace(\"&amp;\", \"&amp;amp;\")\n                   .replace(\"&lt;\", \"&amp;lt;\")\n                   .replace(\"&gt;\", \"&amp;gt;\")\n                   .replace(\"\\\"\", \"&amp;quot;\")\n                   .replace(\"'\", \"&amp;#x27;\");\n    }\n}<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>CSRF\u5bfe\u7b56<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ CSRF\u30c8\u30fc\u30af\u30f3\u306e\u751f\u6210\u3068\u691c\u8a3c\npublic class CSRFProtection {\n    public static String generateToken(HttpSession session) {\n        String token = UUID.randomUUID().toString();\n        session.setAttribute(\"csrf_token\", token);\n        return token;\n    }\n\n    public static boolean validateToken(HttpServletRequest request) {\n        String token = request.getParameter(\"csrf_token\");\n        String sessionToken = (String) request.getSession().getAttribute(\"csrf_token\");\n        return token != null &amp;&amp; token.equals(sessionToken);\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u306b\u3088\u308a\u3001\u30bb\u30ad\u30e5\u30a2\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044JSP\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u767a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-14\">JSP\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-15\">JSP\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u306e\u63a8\u5968\u30d1\u30bf\u30fc\u30f3\u3068\u6ce8\u610f\u70b9<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30d7\u30ec\u30bc\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u5c64\u3068\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306e\u5206\u96e2<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!-- \u60aa\u3044\u4f8b --&gt;\n&lt;%\n    Connection conn = DriverManager.getConnection(\"jdbc:mysql:\/\/localhost\/db\");\n    Statement stmt = conn.createStatement();\n    ResultSet rs = stmt.executeQuery(\"SELECT * FROM users\");\n%&gt;\n\n&lt;!-- \u826f\u3044\u4f8b --&gt;\n&lt;%@ taglib prefix=\"c\" uri=\"http:\/\/java.sun.com\/jsp\/jstl\/core\" %&gt;\n&lt;c:forEach items=\"${users}\" var=\"user\"&gt;\n    ${user.name}\n&lt;\/c:forEach&gt;<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>JSTL\u3068EL\u5f0f\u306e\u7a4d\u6975\u7684\u306a\u6d3b\u7528<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!-- \u60aa\u3044\u4f8b --&gt;\n&lt;% if (session.getAttribute(\"user\") != null) { %&gt;\n    Welcome, &lt;%= session.getAttribute(\"user\") %&gt;\n&lt;% } %&gt;\n\n&lt;!-- \u826f\u3044\u4f8b --&gt;\n&lt;c:if test=\"${not empty user}\"&gt;\n    Welcome, ${user}\n&lt;\/c:if&gt;<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30a8\u30e9\u30fc\u51e6\u7406\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;%@ page errorPage=\"\/error.jsp\" %&gt;\n&lt;%!\n    public void validateInput(String input) throws ValidationException {\n        if (input == null || input.trim().isEmpty()) {\n            throw new ValidationException(\"\u5165\u529b\u304c\u7a7a\u3067\u3059\");\n        }\n    }\n%&gt;\n\n&lt;!-- error.jsp --&gt;\n&lt;%@ page isErrorPage=\"true\" %&gt;\n&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;&lt;title&gt;\u30a8\u30e9\u30fc&lt;\/title&gt;&lt;\/head&gt;\n&lt;body&gt;\n    &lt;h1&gt;\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f&lt;\/h1&gt;\n    &lt;p&gt;${pageContext.exception.message}&lt;\/p&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>\u30a4\u30f3\u30af\u30eb\u30fc\u30c9\u306e\u9069\u5207\u306a\u4f7f\u7528<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!-- \u9759\u7684\u30a4\u30f3\u30af\u30eb\u30fc\u30c9 --&gt;\n&lt;%@ include file=\"header.jsp\" %&gt;\n\n&lt;!-- \u52d5\u7684\u30a4\u30f3\u30af\u30eb\u30fc\u30c9 --&gt;\n&lt;jsp:include page=\"footer.jsp\"&gt;\n    &lt;jsp:param name=\"year\" value=\"2024\" \/&gt;\n&lt;\/jsp:include&gt;<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\u3068\u30ec\u30b9\u30dd\u30f3\u30b9\u6642\u9593\u306e\u6539\u5584\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30ec\u30b9\u30dd\u30f3\u30b9\u30d8\u30c3\u30c0\u30fc\u306e\u6700\u9069\u5316<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Servlet\u3084Filter\u3067\u306e\u8a2d\u5b9a\nresponse.setHeader(\"Cache-Control\", \"public, max-age=31536000\");\nresponse.setHeader(\"Expires\", getExpiresDateString());<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u52b9\u7387\u7684\u306a\u30ad\u30e3\u30c3\u30b7\u30f3\u30b0\u5b9f\u88c5<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class CacheFilter implements Filter {\n    private static final Map&lt;String, CachedContent&gt; cache = \n        new ConcurrentHashMap&lt;&gt;();\n\n    @Override\n    public void doFilter(ServletRequest request, ServletResponse response,\n                        FilterChain chain) throws IOException, ServletException {\n        HttpServletRequest req = (HttpServletRequest) request;\n        String uri = req.getRequestURI();\n\n        CachedContent content = cache.get(uri);\n        if (content != null &amp;&amp; !content.isExpired()) {\n            \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u305f\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u8fd4\u3059\n            response.getWriter().write(content.getContent());\n            return;\n        }\n\n        \/\/ \u65b0\u3057\u3044\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u751f\u6210\u3057\u3066\u30ad\u30e3\u30c3\u30b7\u30e5\n        chain.doFilter(request, response);\n    }\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ 1. \u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u30d7\u30fc\u30eb\u306e\u6700\u9069\u5316\nContext initContext = new InitialContext();\nContext envContext = (Context) initContext.lookup(\"java:\/comp\/env\");\nDataSource ds = (DataSource) envContext.lookup(\"jdbc\/myDB\");\n\n\/\/ 2. \u30d7\u30ea\u30b3\u30f3\u30d1\u30a4\u30ebJSP\u306e\u5229\u7528\npublic class PrecompileServlet extends HttpServlet {\n    @Override\n    public void init() {\n        \/\/ \u4e3b\u8981\u306aJSP\u30da\u30fc\u30b8\u3092\u4e8b\u524d\u306b\u30b3\u30f3\u30d1\u30a4\u30eb\n        JspFactory factory = JspFactory.getDefaultFactory();\n        ServletContext ctx = getServletContext();\n        String[] pages = {\"\/index.jsp\", \"\/product.jsp\"};\n\n        for (String page : pages) {\n            ctx.getNamedDispatcher(page).include(\n                request, response);\n        }\n    }\n}\n\n\/\/ 3. \u30ea\u30bd\u30fc\u30b9\u306e\u9069\u5207\u306a\u89e3\u653e\ntry (Connection conn = dataSource.getConnection();\n     PreparedStatement stmt = conn.prepareStatement(sql)) {\n    \/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\n} catch (SQLException e) {\n    \/\/ \u30a8\u30e9\u30fc\u51e6\u7406\n}<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u5b9f\u88c5<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class PerformanceFilter implements Filter {\n    private static final Logger logger = \n        LoggerFactory.getLogger(PerformanceFilter.class);\n\n    @Override\n    public void doFilter(ServletRequest request, ServletResponse response,\n                        FilterChain chain) throws IOException, ServletException {\n        long startTime = System.currentTimeMillis();\n\n        try {\n            chain.doFilter(request, response);\n        } finally {\n            long elapsed = System.currentTimeMillis() - startTime;\n            HttpServletRequest req = (HttpServletRequest) request;\n            logger.info(\"Request to {} took {} ms\", \n                       req.getRequestURI(), elapsed);\n\n            if (elapsed &gt; 1000) {\n                logger.warn(\"Slow request detected: {} ms for {}\",\n                          elapsed, req.getRequestURI());\n            }\n        }\n    }\n}<\/pre>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li>\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u9632\u6b62\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class CleanupListener implements HttpSessionListener {\n    @Override\n    public void sessionDestroyed(HttpSessionEvent se) {\n        HttpSession session = se.getSession();\n        \/\/ \u30bb\u30c3\u30b7\u30e7\u30f3\u306b\u95a2\u9023\u3059\u308b\u30ea\u30bd\u30fc\u30b9\u306e\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\n        Enumeration&lt;String&gt; attributeNames = session.getAttributeNames();\n        while (attributeNames.hasMoreElements()) {\n            String attributeName = attributeNames.nextElement();\n            Object attribute = session.getAttribute(attributeName);\n            if (attribute instanceof AutoCloseable) {\n                try {\n                    ((AutoCloseable) attribute).close();\n                } catch (Exception e) {\n                    \/\/ \u30a8\u30e9\u30fc\u30ed\u30b0\n                }\n            }\n        }\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3068\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af\u3092\u9069\u7528\u3059\u308b\u3053\u3068\u3067\u3001JSP\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u4fdd\u5b88\u6027\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-17\">\u6700\u65b0\u306eWeb\u958b\u767a\u306b\u304a\u3051\u308bJSP\u306e\u4f4d\u7f6e\u3065\u3051<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">\u30e2\u30c0\u30f3\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u306e\u6bd4\u8f03\u3068\u4f7f\u3044\u5206\u3051<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>JSP\u3068\u30e2\u30c0\u30f3\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u7279\u5fb4\u6bd4\u8f03<\/li>\n<\/ol>\n\n\n<div id=\"id-f77b0dda-2128-4182-adde-c426c47b8a6b\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u7279\u5fb4<\/th><th>JSP<\/th><th>\u30e2\u30c0\u30f3\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\uff08React\/Vue\u7b49\uff09<\/th><\/tr><\/thead><tbody><tr><td>\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0<\/td><td>\u30b5\u30fc\u30d0\u30fc\u30b5\u30a4\u30c9<\/td><td>\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30b5\u30a4\u30c9\uff08\u4e3b\u306b\uff09<\/td><\/tr><tr><td>\u5b66\u7fd2\u66f2\u7dda<\/td><td>\u6bd4\u8f03\u7684\u7de9\u3084\u304b<\/td><td>\u3088\u308a\u6025\u52fe\u914d<\/td><\/tr><tr><td>\u958b\u767a\u901f\u5ea6<\/td><td>\u4e2d\u7a0b\u5ea6<\/td><td>\u9ad8\u901f\uff08\u958b\u767a\u30c4\u30fc\u30eb\u5145\u5b9f\uff09<\/td><\/tr><tr><td>SEO\u5bfe\u5fdc<\/td><td>\u512a\u308c\u3066\u3044\u308b<\/td><td>\u8ffd\u52a0\u8a2d\u5b9a\u304c\u5fc5\u8981<\/td><\/tr><tr><td>\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3<\/td><td>\u4e2d\u7a0b\u5ea6<\/td><td>\u9ad8\u3044<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>JSP\u304c\u9069\u3057\u3066\u3044\u308b\u7528\u9014<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30b7\u30b9\u30c6\u30e0\u306e\u7ba1\u7406\u753b\u9762<\/li>\n\n\n\n<li>SEO\u91cd\u8996\u306e\u9759\u7684\u30b3\u30f3\u30c6\u30f3\u30c4\u4e2d\u5fc3\u306e\u30b5\u30a4\u30c8<\/li>\n\n\n\n<li>\u30ec\u30ac\u30b7\u30fc\u30b7\u30b9\u30c6\u30e0\u3068\u306e\u7d71\u5408\u304c\u5fc5\u8981\u306a\u30b1\u30fc\u30b9<\/li>\n\n\n\n<li>Java\u57fa\u76e4\u304c\u78ba\u7acb\u3057\u3066\u3044\u308b\u7d44\u7e54\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/li>\n<\/ul>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30e2\u30c0\u30f3\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u304c\u9069\u3057\u3066\u3044\u308b\u7528\u9014<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SPA\u304c\u5fc5\u8981\u306a\u30ea\u30c3\u30c1\u306aWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/li>\n\n\n\n<li>\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u6027\u306e\u9ad8\u3044\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/li>\n\n\n\n<li>\u30de\u30a4\u30af\u30ed\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u69cb\u6210\u306e\u30b7\u30b9\u30c6\u30e0<\/li>\n\n\n\n<li>\u30e2\u30d0\u30a4\u30eb\u30a2\u30d7\u30ea\u3068\u306e\u9023\u643a\u304c\u91cd\u8981\u306a\u30b1\u30fc\u30b9<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">\u30ec\u30ac\u30b7\u30fc\u30b7\u30b9\u30c6\u30e0\u3067\u306eJSP\u6d3b\u7528\u6226\u7565<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u6bb5\u968e\u7684\u306a\u30e2\u30c0\u30ca\u30a4\u30bc\u30fc\u30b7\u30e7\u30f3<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ 1. API\u30ec\u30a4\u30e4\u30fc\u306e\u5206\u96e2\n@WebServlet(\"\/api\/*\")\npublic class APIServlet extends HttpServlet {\n    @Override\n    protected void doGet(HttpServletRequest request, \n                        HttpServletResponse response) \n            throws ServletException, IOException {\n        response.setContentType(\"application\/json\");\n        response.setCharacterEncoding(\"UTF-8\");\n\n        \/\/ REST API\u3068\u3057\u3066\u30c7\u30fc\u30bf\u3092\u63d0\u4f9b\n        JSONObject json = new JSONObject();\n        json.put(\"data\", getData());\n        response.getWriter().write(json.toString());\n    }\n}\n\n\/\/ 2. \u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u306e\u6bb5\u968e\u7684\u79fb\u884c\n&lt;%@ page contentType=\"text\/html;charset=UTF-8\" language=\"java\" %&gt;\n&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n    &lt;title&gt;\u30cf\u30a4\u30d6\u30ea\u30c3\u30c9\u30a2\u30d7\u30ed\u30fc\u30c1&lt;\/title&gt;\n    &lt;!-- \u30e2\u30c0\u30f3\u306aJavaScript\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u7d44\u307f\u8fbc\u307f --&gt;\n    &lt;script src=\"https:\/\/unpkg.com\/vue@3\"&gt;&lt;\/script&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;!-- \u5f93\u6765\u306eJSP\u30b3\u30f3\u30c6\u30f3\u30c4 --&gt;\n    &lt;div class=\"legacy-content\"&gt;\n        &lt;%= getLegacyContent() %&gt;\n    &lt;\/div&gt;\n\n    &lt;!-- \u30e2\u30c0\u30f3\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8 --&gt;\n    &lt;div id=\"vue-app\"&gt;\n        &lt;modern-component&gt;&lt;\/modern-component&gt;\n    &lt;\/div&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u4fdd\u5b88\u6027\u5411\u4e0a\u306e\u305f\u3081\u306e\u6226\u7565<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5171\u901a\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30af\u30e9\u30b9\u306e\u4f5c\u6210\npublic class ModernizationUtil {\n    \/\/ \u30ec\u30ac\u30b7\u30fc\u30b3\u30fc\u30c9\u306e\u30e9\u30c3\u30d1\u30fc\n    public static String wrapLegacyContent(String content) {\n        return \"&lt;div class='legacy-wrapper'&gt;\" + content + \"&lt;\/div&gt;\";\n    }\n\n    \/\/ API\u30a2\u30c0\u30d7\u30bf\u30fc\n    public static JSONObject convertLegacyDataToJSON(ResultSet rs) \n            throws SQLException {\n        JSONObject json = new JSONObject();\n        \/\/ \u30ec\u30ac\u30b7\u30fc\u30c7\u30fc\u30bf\u306e\u5909\u63db\u30ed\u30b8\u30c3\u30af\n        return json;\n    }\n}\n\n\/\/ \u8a2d\u5b9a\u306e\u5916\u90e8\u5316\n@Configuration\npublic class LegacyConfig {\n    @Value(\"${legacy.database.url}\")\n    private String databaseUrl;\n\n    @Bean\n    public DataSource legacyDataSource() {\n        \/\/ \u30ec\u30ac\u30b7\u30fc\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u306e\u8a2d\u5b9a\n    }\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u5c64\u306e\u8ffd\u52a0\npublic class ModernCacheManager {\n    private static final Cache&lt;String, Object&gt; cache = \n        CacheBuilder.newBuilder()\n            .maximumSize(1000)\n            .expireAfterWrite(10, TimeUnit.MINUTES)\n            .build();\n\n    public static Object get(String key) {\n        return cache.getIfPresent(key);\n    }\n\n    public static void put(String key, Object value) {\n        cache.put(key, value);\n    }\n}\n\n\/\/ \u975e\u540c\u671f\u51e6\u7406\u306e\u5c0e\u5165\n@WebServlet(asyncSupported = true)\npublic class AsyncLegacyServlet extends HttpServlet {\n    @Override\n    protected void doGet(HttpServletRequest request, \n                        HttpServletResponse response) \n            throws ServletException, IOException {\n        AsyncContext asyncContext = request.startAsync();\n        asyncContext.start(() -&gt; {\n            \/\/ \u30ec\u30ac\u30b7\u30fc\u51e6\u7406\u306e\u975e\u540c\u671f\u5b9f\u884c\n            try {\n                processLegacyRequest(asyncContext);\n            } catch (Exception e) {\n                handleAsyncError(asyncContext, e);\n            }\n        });\n    }\n}<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>\u79fb\u884c\u8a08\u753b\u306e\u7b56\u5b9a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6a5f\u80fd\u306e\u512a\u5148\u9806\u4f4d\u4ed8\u3051<\/li>\n\n\n\n<li>\u30ea\u30b9\u30af\u8a55\u4fa1<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u6226\u7565\u306e\u7acb\u6848<\/li>\n\n\n\n<li>\u6bb5\u968e\u7684\u306a\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u8a08\u753b<\/li>\n<\/ul>\n\n\n\n<p>JSP\u306f\u3001\u9069\u5207\u306b\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u73fe\u4ee3\u306eWeb\u958b\u767a\u306b\u304a\u3044\u3066\u3082\u5341\u5206\u306a\u4fa1\u5024\u3092\u63d0\u4f9b\u3067\u304d\u307e\u3059\u3002\u7279\u306b\u3001\u65e2\u5b58\u306eJava\u30d9\u30fc\u30b9\u306e\u30b7\u30b9\u30c6\u30e0\u3068\u306e\u7d71\u5408\u3084\u3001\u6bb5\u968e\u7684\u306a\u30e2\u30c0\u30ca\u30a4\u30bc\u30fc\u30b7\u30e7\u30f3\u306b\u304a\u3044\u3066\u91cd\u8981\u306a\u5f79\u5272\u3092\u679c\u305f\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-20\">\u3088\u304f\u3042\u308b\u958b\u767a\u4e0a\u306e\u8ab2\u984c\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-21\">\u4e00\u822c\u7684\u306a\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u610f\u5473\u3068\u5bfe\u51e6\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30b3\u30f3\u30d1\u30a4\u30eb\u30a8\u30e9\u30fc<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">JSP\u306e\u30a8\u30e9\u30fc: [\u884c: 10, \u5217: 25] \u30d1\u30fc\u30b5\u30fc\u30a8\u30e9\u30fc: \u8981\u7d20\u30bf\u30a4\u30d7 \"input\" \u306f \"EMPTY\" \u3068\u3057\u3066\u5ba3\u8a00\u3055\u308c\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\n\n\u5bfe\u51e6\u6cd5:\n- HTML\u8981\u7d20\u306e\u9589\u3058\u5fd8\u308c\u3092\u78ba\u8a8d\n- JSP\u30bf\u30b0\u306e\u69cb\u6587\u3092\u78ba\u8a8d\n- \u6587\u5b57\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u306e\u8a2d\u5b9a\u3092\u78ba\u8a8d<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u5b9f\u884c\u6642\u30a8\u30e9\u30fc<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ NullPointerException\njavax.servlet.ServletException: java.lang.NullPointerException\n    at org.apache.jasper.runtime.PageContextImpl.handlePageException\n\n\u5bfe\u51e6\u6cd5:\ntry {\n    \/\/ null\u30c1\u30a7\u30c3\u30af\u306e\u8ffd\u52a0\n    if (request.getParameter(\"userId\") != null) {\n        User user = userService.findById(\n            Integer.parseInt(request.getParameter(\"userId\")));\n    }\n} catch (NumberFormatException e) {\n    \/\/ \u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u578b\u5909\u63db\u30a8\u30e9\u30fc\u51e6\u7406\n    request.setAttribute(\"error\", \"Invalid user ID format\");\n    request.getRequestDispatcher(\"\/error.jsp\").forward(request, response);\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30af\u30e9\u30b9\u30ed\u30fc\u30c9\u30a8\u30e9\u30fc<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">java.lang.ClassNotFoundException: org.apache.jsp.index_jsp\n\n\u5bfe\u51e6\u6cd5:\n1. WEB-INF\/lib\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u5fc5\u8981\u306aJAR\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3059\u308b\u304b\u78ba\u8a8d\n2. \u30af\u30e9\u30b9\u30d1\u30b9\u306e\u8a2d\u5b9a\u3092\u78ba\u8a8d\n3. Tomcat\u306e\u518d\u8d77\u52d5\u3092\u8a66\u307f\u308b<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>\u30bb\u30c3\u30b7\u30e7\u30f3\u95a2\u9023\u30a8\u30e9\u30fc<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30bb\u30c3\u30b7\u30e7\u30f3\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u306e\u51e6\u7406\npublic class SessionTimeoutFilter implements Filter {\n    @Override\n    public void doFilter(ServletRequest request, ServletResponse response,\n                        FilterChain chain) throws IOException, ServletException {\n        HttpServletRequest httpRequest = (HttpServletRequest) request;\n        HttpSession session = httpRequest.getSession(false);\n\n        if (session == null || \n            session.getAttribute(\"user\") == null) {\n            \/\/ \u30bb\u30c3\u30b7\u30e7\u30f3\u5207\u308c\u306e\u51e6\u7406\n            ((HttpServletResponse) response)\n                .sendRedirect(httpRequest.getContextPath() + \"\/login\");\n            return;\n        }\n        chain.doFilter(request, response);\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-22\">\u30c7\u30d0\u30c3\u30b0\u3068\u30c6\u30b9\u30c8\u306e\u52b9\u679c\u7684\u306a\u9032\u3081\u65b9<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30ed\u30ae\u30f3\u30b0\u306e\u6d3b\u7528<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Log4j\u306e\u8a2d\u5b9a\u4f8b\npublic class LoggingUtil {\n    private static final Logger logger = \n        LogManager.getLogger(LoggingUtil.class);\n\n    public static void logDebugInfo(String message, Object... params) {\n        logger.debug(message, params);\n    }\n\n    public static void logError(String message, Throwable t) {\n        logger.error(message, t);\n    }\n}\n\n\/\/ JSP\u3067\u306e\u4f7f\u7528\u4f8b\n&lt;%\n    LoggingUtil.logDebugInfo(\"\u30da\u30fc\u30b8\u30a2\u30af\u30bb\u30b9: {}\", \n        request.getRequestURI());\n    try {\n        \/\/ \u51e6\u7406\n    } catch (Exception e) {\n        LoggingUtil.logError(\"\u51e6\u7406\u30a8\u30e9\u30fc\", e);\n    }\n%&gt;<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30c7\u30d0\u30c3\u30b0\u7528JSP\u306e\u4f5c\u6210<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;%@ page contentType=\"text\/html;charset=UTF-8\" language=\"java\" %&gt;\n&lt;%@ page import=\"java.util.*\" %&gt;\n&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n    &lt;title&gt;\u30c7\u30d0\u30c3\u30b0\u60c5\u5831&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;h2&gt;\u30ea\u30af\u30a8\u30b9\u30c8\u60c5\u5831&lt;\/h2&gt;\n    &lt;table border=\"1\"&gt;\n        &lt;tr&gt;\n            &lt;th&gt;\u30d1\u30e9\u30e1\u30fc\u30bf\u540d&lt;\/th&gt;\n            &lt;th&gt;\u5024&lt;\/th&gt;\n        &lt;\/tr&gt;\n        &lt;% for (Enumeration&lt;String&gt; e = request.getParameterNames(); \n                e.hasMoreElements();) {\n            String name = e.nextElement();\n        %&gt;\n        &lt;tr&gt;\n            &lt;td&gt;&lt;%= name %&gt;&lt;\/td&gt;\n            &lt;td&gt;&lt;%= Arrays.toString(request.getParameterValues(name)) %&gt;&lt;\/td&gt;\n        &lt;\/tr&gt;\n        &lt;% } %&gt;\n    &lt;\/table&gt;\n\n    &lt;h2&gt;\u30bb\u30c3\u30b7\u30e7\u30f3\u60c5\u5831&lt;\/h2&gt;\n    &lt;table border=\"1\"&gt;\n        &lt;% for (Enumeration&lt;String&gt; e = session.getAttributeNames();\n                e.hasMoreElements();) {\n            String name = e.nextElement();\n        %&gt;\n        &lt;tr&gt;\n            &lt;td&gt;&lt;%= name %&gt;&lt;\/td&gt;\n            &lt;td&gt;&lt;%= session.getAttribute(name) %&gt;&lt;\/td&gt;\n        &lt;\/tr&gt;\n        &lt;% } %&gt;\n    &lt;\/table&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\u306e\u5b9f\u88c5<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ JSP\u306e\u30ed\u30b8\u30c3\u30af\u30af\u30e9\u30b9\u306e\u30c6\u30b9\u30c8\npublic class UserValidatorTest {\n    private UserValidator validator;\n\n    @Before\n    public void setUp() {\n        validator = new UserValidator();\n    }\n\n    @Test\n    public void testValidateUserInput() {\n        \/\/ \u6b63\u5e38\u7cfb\u30c6\u30b9\u30c8\n        assertTrue(validator.validateInput(\"validUser\"));\n\n        \/\/ \u7570\u5e38\u7cfb\u30c6\u30b9\u30c8\n        assertFalse(validator.validateInput(\"\"));\n        assertFalse(validator.validateInput(null));\n    }\n}\n\n\/\/ \u30e2\u30c3\u30af\u3092\u4f7f\u7528\u3057\u305f\u30c6\u30b9\u30c8\npublic class UserServletTest {\n    @Mock\n    private HttpServletRequest request;\n    @Mock\n    private HttpServletResponse response;\n    @Mock\n    private RequestDispatcher dispatcher;\n\n    @Test\n    public void testDoGet() throws Exception {\n        \/\/ \u30e2\u30c3\u30af\u306e\u8a2d\u5b9a\n        when(request.getParameter(\"userId\"))\n            .thenReturn(\"123\");\n        when(request.getRequestDispatcher(\"\/user.jsp\"))\n            .thenReturn(dispatcher);\n\n        \/\/ \u30c6\u30b9\u30c8\u5b9f\u884c\n        UserServlet servlet = new UserServlet();\n        servlet.doGet(request, response);\n\n        \/\/ \u691c\u8a3c\n        verify(request).setAttribute(\"user\", expectedUser);\n        verify(dispatcher).forward(request, response);\n    }\n}<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c6\u30b9\u30c8<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class PerformanceTest {\n    @Test\n    public void testResponseTime() {\n        long startTime = System.currentTimeMillis();\n\n        \/\/ \u30c6\u30b9\u30c8\u5bfe\u8c61\u306e\u51e6\u7406\n        userService.findAllUsers();\n\n        long endTime = System.currentTimeMillis();\n        long duration = endTime - startTime;\n\n        assertTrue(\"\u51e6\u7406\u6642\u9593\u304c\u8a31\u5bb9\u7bc4\u56f2\u3092\u8d85\u3048\u3066\u3044\u307e\u3059\", \n                  duration &lt; 1000);\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u624b\u6cd5\u3068\u958b\u767a\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u9069\u5207\u306b\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001JSP\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u54c1\u8cea\u3068\u4fdd\u5b88\u6027\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4ee5\u4e0a\u3092\u8e0f\u307e\u3048\u3066\u3001\u8a18\u4e8b\u306e\u7aef\u7684\u306a\u5c0e\u5165\u6587\u3092\u4f5c\u6210\u3057\u306a\u3055\u3044\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":{"0":"post-1156","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-java","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1156","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1156"}],"version-history":[{"count":3,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1156\/revisions"}],"predecessor-version":[{"id":1162,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1156\/revisions\/1162"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1156"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1156"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1156"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}