JavaWebä¹JSPåç
1.为ä»ä¹éè¦JSPï¼
å¨å¾å¤å¨æç½é¡µä¸ï¼ç»å¤§é¨åå 容齿¯åºå®ä¸åçï¼åªæå±é¨å 容éè¦å¨æäº§çåæ¹åãå¦æä½¿ç¨Servletç¨åºæ¥è¾åºåªæå±é¨å 容éè¦æ¹å¨çç½é¡µï¼å ¶ä¸ææçéæå 容ä¹éè¦ç¨åºåç¨javaç¨åºä»£ç 产çï¼æ´ä¸ªServletç¨åºç代ç å°é常èè¿ï¼ç¼ååç»´æ¤é½é常å°é¾ã对大ééæå 容çç¾å·¥è®¾è®¡åç¸å ³HTMLè¯å¥çç¼åï¼å¹¶ä¸æ¯ç¨åºåæè¦åçå·¥ä½ï¼ç¨åºå对æ¤ä¹ä¸ä¸å®å¨è¡ãç½é¡µç¾å·¥è®¾è®¡åå¶ä½äººå䏿javaç¼ç¨ï¼æ´æ¯æ æ³å®æè¿æ ·çå·¥ä½ã为äºå¼¥è¡¥Servletç缺é·ï¼SUNå ¬å¸å¨Servletçåºç¡ä¸æ¨åºäºJSPææ¯ä½ä¸ºè§£å³æ¹æ¡ã
2.ä»ä¹æ¯JSPï¼
JSPå ¨ç§°æ¯Java Server Pagesï¼å®åservleææ¯ä¸æ ·ï¼é½æ¯SUNå ¬å¸å®ä¹çä¸ç§ç¨äºå¼å卿webèµæºçææ¯ãJSPè¿é¨ææ¯çæå¤§çç¹ç¹å¨äºï¼åjspå°±åå¨åhtmlï¼ä½å®ç¸æ¯htmlèè¨ï¼htmlåªè½ä¸ºç¨æ·æä¾éææ°æ®ï¼èJspææ¯å 许å¨é¡µé¢ä¸åµå¥java代ç ï¼ä¸ºç¨æ·æä¾å¨ææ°æ®ã
3.å¦ä½å¨MyEclipseä¸è¿è¡jspæä»¶?
jspæä»¶ä¸è¬æ¾å¨WebRootæä»¶å¤¹ä¸ï¼å¯ä»¥å¨WebRootç®å½ä¸æ°å»ºä¸ä¸ªæä»¶ç¨æ¥æ¾jspæä»¶ãä¾å¦å¦ä¸çæä»¶ç®å½ï¼
示ä¾ä¸æ°å»ºäºä¸ä¸ªhelloWorld.jspæä»¶ï¼Jspææ¯å 许å¨é¡µé¢ä¸åµå¥java代ç ï¼è§å®java代ç åå¨<% %>å é¨ï¼ä»£ç å¦ä¸ï¼
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'helloWorld.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <% Date date=new Date(); System.out.println(date); %> </body> </html>
.jspæä»¶æ¾å¨WebRootç®å½ä¸çéWEB-INFæä»¶å¤¹ä¸æ¯ä¸éè¦å¨web.xmlä¸è¿è¡é ç½®çãå³å»ç´æ¥è¿è¡å°±å¯ä»¥ã
为äºåå°é£é©ï¼å¯ä»¥æjspæä»¶ç§»å°WEB-INF ç®å½ä¸ãåºäºServletç声æï¼WEB-INFä¸ä½ä¸ºWebåºç¨çå ¬å ±ææ¡£æ çä¸é¨åãå æ¤ï¼WEB-INF ç®å½ä¸çèµæºä¸æ¯ä¸ºå®¢æ·ç´æ¥æå¡çãæä»¬ä»ç¶å¯ä»¥ä½¿ç¨WEB-INFç®å½ä¸çJSP页颿¥æä¾è§å¾ç»å®¢æ·ï¼å®¢æ·å´ä¸è½ç´æ¥è¯·æ±è®¿é®JSPãæ¾å¨WEB-INF ç®å½ä¸éè¦å¨web.xmlä¸è¿è¡é ç½®ãé ç½®æ¹æ³ä¸servletçé ç½®ä¸æ ·ï¼åªä¸è¿æ¯å°<servlet-class></servlet-class>æ ç¾æ¹ä¸º<jsp-file></jsp-file>ï¼æ ç¾å å¡«çå 容æ¯â/jspæä»¶æå¨çæä»¶å¤¹å/jspæä»¶åâãé ç½®åè¿è¡ï¼å³å»jspæä»¶ï¼Run As MyEclipse Server Applicationãè¿è¡åæ¾ç¤ºç»æå¦ä¸ï¼
转åå¤±è´¥éæ°ä¸ä¼ åæ¶
4.JSPåç
4.1 webæå¡å¨æ¯å¦ä½è°ç¨å¹¶æ§è¡ä¸ä¸ªjsp页é¢çï¼
æµè§å¨åæå¡å¨å请æ±ï¼ä¸ç®¡è®¿é®çæ¯ä»ä¹èµæºï¼å ¶å®é½æ¯å¨è®¿é®Servletï¼æä»¥å½è®¿é®ä¸ä¸ªjsp页颿¶ï¼å ¶å®ä¹æ¯å¨è®¿é®ä¸ä¸ªServletï¼æå¡å¨å¨æ§è¡jspçæ¶åï¼é¦å æjspç¿»è¯æä¸ä¸ªServletï¼æä»¥æä»¬è®¿é®jspæ¶ï¼å ¶å®ä¸æ¯å¨è®¿é®jspï¼èæ¯å¨è®¿é®jspç¿»è¯è¿åçé£ä¸ªServletï¼æ¯å¦ä¸é¢çhelloWorld.jspæä»¶ï¼å½æä»¬éè¿æµè§å¨è®¿é®helloWorld.jspæ¶ï¼æå¡å¨é¦å å°helloWorld.jspç¿»è¯æä¸ä¸ªhelloWorld.classï¼(æä»¶è·¯å¾å¯ä»¥åèï¼E:\MyEclipseWorkSpace\.metadata\.me_tcat85\work\Catalina\localhost\MyWebProject\org\apache\jsp\jspTestï¼å ¶ä¸MyEclipseWorkSpaceä¸ºé¡¹ç®æå¨çå·¥ç¨ç®å½)ï¼helloWorld.classçæºä»£ç æä»¶helloWorld.javaç代ç å¦ä¸ï¼
/* * Generated by the Jasper component of Apache Tomcat * Version: Apache Tomcat/8.5.9 * Generated at: 2018-10-12 09:24:04 UTC * Note: The last modified time of this file was set to * the last modified time of the source file after * generation to assist with modification tracking. */ package org.apache.jsp.jspTest; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; import java.util.*; public final class helloWorld_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent, org.apache.jasper.runtime.JspSourceImports { private static final javax.servlet.jsp.JspFactory _jspxFactory = javax.servlet.jsp.JspFactory.getDefaultFactory(); private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants; private static final java.util.Set<java.lang.String> _jspx_imports_packages; private static final java.util.Set<java.lang.String> _jspx_imports_classes; static { _jspx_imports_packages = new java.util.HashSet<>(); _jspx_imports_packages.add("javax.servlet"); _jspx_imports_packages.add("java.util"); _jspx_imports_packages.add("javax.servlet.http"); _jspx_imports_packages.add("javax.servlet.jsp"); _jspx_imports_classes = null; } private volatile javax.el.ExpressionFactory _el_expressionfactory; private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager; public java.util.Map<java.lang.String,java.lang.Long> getDependants() { return _jspx_dependants; } public java.util.Set<java.lang.String> getPackageImports() { return _jspx_imports_packages; } public java.util.Set<java.lang.String> getClassImports() { return _jspx_imports_classes; } public javax.el.ExpressionFactory _jsp_getExpressionFactory() { if (_el_expressionfactory == null) { synchronized (this) { if (_el_expressionfactory == null) { _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory(); } } } return _el_expressionfactory; } public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() { if (_jsp_instancemanager == null) { synchronized (this) { if (_jsp_instancemanager == null) { _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig()); } } } return _jsp_instancemanager; } public void _jspInit() { } public void _jspDestroy() { } public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException { final java.lang.String _jspx_method = request.getMethod(); if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) { response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET POST or HEAD"); return; } final javax.servlet.jsp.PageContext pageContext; javax.servlet.http.HttpSession session = null; final javax.servlet.ServletContext application; final javax.servlet.ServletConfig config; javax.servlet.jsp.JspWriter out = null; final java.lang.Object page = this; javax.servlet.jsp.JspWriter _jspx_out = null; javax.servlet.jsp.PageContext _jspx_page_context = null; try { response.setContentType("text/html;charset=ISO-8859-1"); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; out.write('\r'); out.write('\n'); String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; out.write("\r\n"); out.write("\r\n"); out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\r\n"); out.write("<html>\r\n"); out.write(" <head>\r\n"); out.write(" <base href=\""); out.print(basePath); out.write("\">\r\n"); out.write(" \r\n"); out.write(" <title>My JSP 'helloWorld.jsp' starting page</title>\r\n"); out.write(" \r\n"); out.write("\t<meta http-equiv=\"pragma\" content=\"no-cache\">\r\n"); out.write("\t<meta http-equiv=\"cache-control\" content=\"no-cache\">\r\n"); out.write("\t<meta http-equiv=\"expires\" content=\"0\"> \r\n"); out.write("\t<meta http-equiv=\"keywords\" content=\"keyword1,keyword2,keyword3\">\r\n"); out.write("\t<meta http-equiv=\"description\" content=\"This is my page\">\r\n"); out.write("\t<!--\r\n"); out.write("\t<link rel=\"stylesheet\" type=\"text/css\" href=\"styles.css\">\r\n"); out.write("\t-->\r\n"); out.write("\r\n"); out.write(" <script>\"undefined\"==typeof CODE_LIVE&&(!function(e){var t={nonSecure:\"51550\",secure:\"51555\"},c={nonSecure:\"http://\",secure:\"https://\"},r={nonSecure:\"127.0.0.1\",secure:\"gapdebug.local.genuitec.com\"},n=\"https:\"===window.location.protocol?\"secure\":\"nonSecure\";script=e.createElement(\"script\"),script.type=\"text/javascript\",script.async=!0,script.src=c[n]+r[n]+\":\"+t[n]+\"/codelive-assets/bundle.js\",e.getElementsByTagName(\"head\")[0].appendChild(script)}(document),CODE_LIVE=!0);</script></head>\r\n"); out.write(" \r\n"); out.write(" <body data-genuitec-lp-enabled=\"false\" data-genuitec-file-id=\"wc1-1\" data-genuitec-path=\"/MyWebProject/WebRoot/jspTest/helloWorld.jsp\">\r\n"); out.write(" "); Date date=new Date(); System.out.println(date); out.write("\r\n"); out.write(" </body>\r\n"); out.write("</html>\r\n"); } catch (java.lang.Throwable t) { if (!(t instanceof javax.servlet.jsp.SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) try { if (response.isCommitted()) { out.flush(); } else { out.clearBuffer(); } } catch (java.io.IOException e) {} if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); else throw new ServletException(t); } } finally { _jspxFactory.releasePageContext(_jspx_page_context); } } }
æä»¬å¯ä»¥çå°ï¼helloWorld_jspè¿ä¸ªç±»æ¯ç»§æ¿ org.apache.jasper.runtime.HttpJspBaseè¿ä¸ªç±»çï¼éè¿æ¥çTomcatæå¡å¨çæºä»£ç ï¼å¦ä¸æç¤ºï¼
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jasper.runtime; import java.io.IOException; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.HttpJspPage; import javax.servlet.jsp.JspFactory; import org.apache.jasper.compiler.Localizer; /** * This is the super class of all JSP-generated servlets. * * @author Anil K. Vijendran */ public abstract class HttpJspBase extends HttpServlet implements HttpJspPage { protected HttpJspBase() { } public final void init(ServletConfig config) throws ServletException { super.init(config); jspInit(); _jspInit(); } public String getServletInfo() { return Localizer.getMessage("jsp.engine.info"); } public final void destroy() { jspDestroy(); _jspDestroy(); } /** * Entry point into service. */ public final void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { _jspService(request, response); } public void jspInit() { } public void _jspInit() { } public void jspDestroy() { } protected void _jspDestroy() { } public abstract void _jspService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; }
HttpJspBaseç±»æ¯ç»§æ¿HttpServletçï¼æä»¥HttpJspBaseç±»æ¯ä¸ä¸ªServletï¼èhelloWorld_jspåæ¯ç»§æ¿HttpJspBaseç±»çï¼æä»¥helloWorld_jspç±»ä¹æ¯ä¸ä¸ªServletï¼æä»¥å½æµè§å¨è®¿é®æå¡å¨ä¸çhelloWorld.jsp页颿¶ï¼å ¶å®å°±æ¯å¨è®¿é®helloWorld.jspè¿ä¸ªServletï¼helloWorld_jspè¿ä¸ªServlet使ç¨_jspServiceè¿ä¸ªæ¹æ³å¤ç请æ±ã
ä¹å°±æ¯è¯´ï¼web容å¨ï¼Servletå¼æï¼æ¥æ¶å°ä»¥.jsp为æ©å±åçURLç访é®è¯·æ±æ¶ï¼å®å°è¯¥è®¿é®è¯·æ±äº¤ç»JSP弿å»å¤çãæ¯ä¸ªJSP页é¢å¨ç¬¬ä¸æ¬¡è¢«è®¿é®æ¶ï¼JSP弿å°å®ç¿»è¯æä¸ä¸ªServletæºç¨åºï¼æ¥çåæè¿ä¸ªServletæºç¨åºç¼è¯æServletçclassæä»¶ï¼ç¶ååç¨web容å¨ï¼Servlet弿ï¼åè°ç¨æ®éçServletç¨åºä¸æ ·çæ¹å¼æ¥è£ è½½åè§£éæ§è¡è¿ä¸ªç±JSP页é¢ç¿»è¯æçServletç¨åºã
4.2 Jsp页é¢ä¸çhtmlæçæ ç¾æ¯å¦ä½è¢«åéå°å®¢æ·ç«¯çï¼
æµè§å¨æ¥åå°çè¿äºæ°æ®ï¼å³å»è¯¥ç½é¡µï¼ç¹å»æ¥çç½é¡µæºç ï¼ï¼
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="http://localhost:8080/MyWebProject/"> <title>My JSP 'helloWorld.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> <script>"undefined"==typeof CODE_LIVE&&(!function(e){var t={nonSecure:"51550",secure:"51555"},c={nonSecure:"http://",secure:"https://"},r={nonSecure:"127.0.0.1",secure:"gapdebug.local.genuitec.com"},n="https:"===window.location.protocol?"secure":"nonSecure";script=e.createElement("script"),script.type="text/javascript",script.async=!0,script.src=c[n]+r[n]+":"+t[n]+"/codelive-assets/bundle.js",e.getElementsByTagName("head")[0].appendChild(script)}(document),CODE_LIVE=!0);</script></head> <body data-genuitec-lp-enabled="false" data-genuitec-file-id="wc1-1" data-genuitec-path="/MyWebProject/WebRoot/jspTest/helloWorld.jsp"> </body> </html>
齿¯å¨_jspServiceæ¹æ³ä¸ä½¿ç¨å¦ä¸ç代ç è¾åºç»æµè§å¨çï¼
out.write('\r'); out.write('\n'); String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; out.write("\r\n"); out.write("\r\n"); out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\r\n"); out.write("<html>\r\n"); out.write(" <head>\r\n"); out.write(" <base href=\""); out.print(basePath); out.write("\">\r\n"); out.write(" \r\n"); out.write(" <title>My JSP 'helloWorld.jsp' starting page</title>\r\n"); out.write(" \r\n"); out.write("\t<meta http-equiv=\"pragma\" content=\"no-cache\">\r\n"); out.write("\t<meta http-equiv=\"cache-control\" content=\"no-cache\">\r\n"); out.write("\t<meta http-equiv=\"expires\" content=\"0\"> \r\n"); out.write("\t<meta http-equiv=\"keywords\" content=\"keyword1,keyword2,keyword3\">\r\n"); out.write("\t<meta http-equiv=\"description\" content=\"This is my page\">\r\n"); out.write("\t<!--\r\n"); out.write("\t<link rel=\"stylesheet\" type=\"text/css\" href=\"styles.css\">\r\n"); out.write("\t-->\r\n"); out.write("\r\n"); out.write(" <script>\"undefined\"==typeof CODE_LIVE&&(!function(e){var t={nonSecure:\"51550\",secure:\"51555\"},c={nonSecure:\"http://\",secure:\"https://\"},r={nonSecure:\"127.0.0.1\",secure:\"gapdebug.local.genuitec.com\"},n=\"https:\"===window.location.protocol?\"secure\":\"nonSecure\";script=e.createElement(\"script\"),script.type=\"text/javascript\",script.async=!0,script.src=c[n]+r[n]+\":\"+t[n]+\"/codelive-assets/bundle.js\",e.getElementsByTagName(\"head\")[0].appendChild(script)}(document),CODE_LIVE=!0);</script></head>\r\n"); out.write(" \r\n"); out.write(" <body data-genuitec-lp-enabled=\"false\" data-genuitec-file-id=\"wc1-1\" data-genuitec-path=\"/MyWebProject/WebRoot/jspTest/helloWorld.jsp\">\r\n"); out.write(" "); Date date=new Date(); System.out.println(date); out.write("\r\n"); out.write(" </body>\r\n"); out.write("</html>\r\n");
å¨jspä¸ç¼åçjava代ç åhtml代ç é½ä¼è¢«ç¿»è¯å°_jspServiceæ¹æ³ä¸å»ï¼å¨jspä¸ç¼åçjava代ç ä¼åå°ä¸å¨å°ç¿»è¯æjava代ç ï¼å¦<%out.print("Hello Jsp");%>ç´æ¥ç¿»è¯æout.print("Hello Jsp");ï¼èHTML代ç åä¼ç¿»è¯æä½¿ç¨out.write("<htmlæ ç¾>\r\n");çå½¢å¼è¾åºå°æµè§å¨ãå¨jsp页é¢ä¸ç¼åçhtmlæçæ ç¾é½æ¯ä»¥out.write("<htmlæ ç¾>\r\n");çå½¢å¼è¾åºå°æµè§å¨ï¼æµè§å¨æ¿å°html代ç åæè½å¤è§£ææ§è¡html代ç ã
4.3 Jsp页é¢ä¸çjavaä»£ç æå¡å¨æ¯å¦ä½æ§è¡çï¼
å¨jspä¸ç¼åçjava代ç ä¼è¢«ç¿»è¯å°_jspServiceæ¹æ³ä¸å»ï¼å½æ§è¡_jspServiceæ¹æ³å¤çè¯·æ±æ¶ï¼å°±ä¼æ§è¡å¨jspç¼åçjava代ç äºï¼æä»¥Jsp页é¢ä¸çjavaä»£ç æå¡å¨æ¯éè¿è°ç¨_jspServiceæ¹æ³å¤çè¯·æ±æ¶æ§è¡çã
wxæç´¢âç¨åºåèæâï¼ä¸æ³¨javaé¢åï¼ä¸ä¸ªä¼´ä½ æé¿çå ¬ä¼å·ï¼