來百度APP暢享高清圖片
//下栽のke:chaoxingit.com/1534/
從網頁搭建入門到JavaWeb:2019版詳解
一、引言
隨著互聯網技術的飛速發展,JavaWeb已經成為了一種非常流行的開發技術。通過JavaWeb,我們可以快速地構建出功能強大、安全可靠的Web應用程序。本文將詳細介紹如何從網頁搭建入門到JavaWeb,幫助你掌握這門技術。
二、JavaWeb簡介
JavaWeb指的是使用Java技術開發的Web應用程序。它是基于Java平臺的一種開發模式,用于構建和部署在Web服務器上運行的應用程序。JavaWeb通常涉及以下關鍵組件和技術:
JavaWeb應用程序通常遵循HTTP協議,與客戶端通過HTTP請求和響應進行通信。它們可以處理各種類型的請求,包括GET、POST等,并能夠生成動態內容以及與數據庫等外部資源進行交互。 JavaWeb的發展已經成為構建企業級應用程序的主流方式之一,它提供了強大的功能和豐富的生態系統,使得開發者能夠構建高性能、可靠和安全的Web應用程序。
三、學習資源
要想入門JavaWeb,你可以選擇以下學習資源:
四、搭建開發環境
搭建JavaWeb開發環境涉及到幾個主要組件,包括Java Development Kit (JDK)、集成開發環境(IDE)、Servlet容器等。以下是從頭開始搭建JavaWeb開發環境的步驟:
在完成上述步驟后,你就建立了一個基本的JavaWeb開發環境,并且能夠開始編寫和部署簡單的Web應用程序。從這里開始,你可以深入學習JavaWeb的各個方面,包括Servlet、JSP、數據庫連接等,以構建更復雜和功能豐富的Web應用程序。
五、網頁搭建基礎
網頁搭建是學習JavaWeb的基礎,主要包括HTML、CSS和JavaScript等基礎知識。通過學習這些基礎知識,你可以快速搭建出基本的網頁。
六、JavaWeb核心技術
JavaWeb 是使用 Java 技術進行 Web 開發的一種方式,它涵蓋了多個核心技術和框架。以下是 JavaWeb 的一些核心技術:
以上是 JavaWeb 的一些核心技術,這些技術一起構成了一個完整的 JavaWeb 開發生態系統。開發人員可以根據項目需求選擇適當的技術和框架來構建穩健、高效的 Web 應用程序。
七、實踐項目
實踐項目是學習JavaWeb的重要環節,你可以選擇以下項目進行實踐:
通過實踐項目,你可以更好地掌握JavaWeb技術,并提高自己的編程能力和團隊協作能力。
八、總結與展望
通過本文的介紹,相信你已經對從網頁搭建入門到JavaWeb有了更深入的了解。要想成為一名優秀的JavaWeb開發者,你需要不斷學習、實踐和總結。同時,隨著技術的不斷發展,你需要不斷關注新技術和趨勢,并努力提升自己的技能水平。希望本文能夠幫助你成功邁向后端工程師的高階之路!
.把JSP頁面放在WEB-INF目錄下,存放在此目錄或者它的子目錄里的任何東西都受到了保護。
2.使用servlet過濾器過濾對jsp頁面的請求。
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.Writer;
public class AdminsessionFilter implements Filter {
@Override
public void init(FilterConfig filterConfig)throws ServletException {
}
@Override
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
throws IOException,ServletException
{
HttpServletRequest httpServletRequest=(HttpServletRequest)request;
HttpServletResponse httpServletResponse=(HttpServletResponse)response;
String url=httpServletRequest.getRequestURI();
if(url!=null && url.endsWith(".jsp")){
String contextPath=httpServletRequest.getContextPath();
httpServletResponse.sendRedirect(contextPath+"/index.html");
return;
}
chain.doFilter(httpServletRequest,httpServletResponse);
}
@Override
public void destroy(){
}
}
3.在部署文件web.xml中使用安全限制.配置如下:
SP指令是指:用于設置JSP頁面相關屬性的一個語法命令,例如:設置頁面編碼字符集、導入其他包等等。JSP中提供了三個指令,分別是:page指令、include指令、taglib指令。其中page指令用于設置JSP頁面屬性,include指令用于引入其他的JSP文件,taglib指令用于引入標簽庫。這一小節內容介紹include指令的使用。
include指令作用:將指定的文件引入到當前JSP頁面里面。include指令會將引入的文件內容嵌入到當前JSP頁面中的對應位置。
<%@ include file="文件的相對路徑" %>
案例代碼:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>這是HTML頭部</title>
</head>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%-- 引入頭部文件 --%>
<%@ include file="header.jsp" %>
<body>
<div style="background-color: cadetblue">
這是正文內容區域
</div>
<%-- 引入底部文件 --%>
<%@ include file="footer.html" %>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<div style="background-color: antiquewhite;">
這是footer底部內容區域
</div>
啟動Tomcat容器,瀏覽器訪問http://localhost:8080/servlet/include.jsp,結果如下:
include指令的本質是什么呢???我們來查看下編譯之后的Java源代碼,找到上面include.jsp文件編譯之后的源文件,如下所示:
/*
* Generated by the Jasper component of Apache Tomcat
* Version: Apache Tomcat/8.5.98
* Generated at: 2024-02-25 05:06:41 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 com.gitcode.servlet;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
public final class include_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;
static {
_jspx_dependants=new java.util.HashMap<java.lang.String,java.lang.Long>(2);
_jspx_dependants.put("/footer.jsp", Long.valueOf(1708837593266L));
_jspx_dependants.put("/header.jsp", Long.valueOf(1708837593271L));
}
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("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, "JSP 只允許 GET、POST 或 HEAD。Jasper 還允許 OPTIONS");
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=UTF-8");
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');
out.write('\r');
out.write('\n');
out.write("\r\n");
out.write("<html>\r\n");
out.write("<head>\r\n");
out.write(" <title>這是HTML頭部</title>\r\n");
out.write("</head>");
out.write("\r\n");
out.write("<body>\r\n");
out.write("\r\n");
out.write("<div style=\"background-color: cadetblue\">\r\n");
out.write(" 這是正文內容區域\r\n");
out.write("</div>\r\n");
out.write("\r\n");
out.write('\r');
out.write('\n');
out.write("\r\n");
out.write("<div style=\"background-color: antiquewhite;\">\r\n");
out.write(" 這是footer底部內容區域\r\n");
out.write("</div>");
out.write("\r\n");
out.write("</body>\r\n");
out.write("</html>");
} 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);
}
}
}
通過上面源代碼,可以看到,使用include指令引入的兩個文件,最終都會將兩個文件中的內容直接嵌入到當前include.jsp文件里面,如下所示:
所以include指令的本質就是將引入文件中的內容,直接拼接到當前JSP頁面的對應位置。這里也就會存在一個問題,引入的JSP文件中,不能存在和當前JSP頁面相同的變量名稱,因為變量名稱相同會導致編譯失敗。另外,使用include指令引入其他的JSP文件時候,只會生成訪問的那個JSP文件的源代碼,被引入的JSP文件不會生成對應的源代碼。
以上,就是include指令的使用及其本質。
今天就到這里,未完待續~~
*請認真填寫需求信息,我們會在24小時內與您取得聯系。