предисловие
В 2020 году вам все еще нужно изучать JSP? Думаю, что у студентов, которые еще учатся в колледже, обязательно возникнет этот вопрос.
На самом деле, я видел аналогичный вопрос в 18 лет «Стоит ли JSP еще учиться?». Я опубликовал несколько статей JSP в 2018 году, и многие разработчики прокомментировали: «Разве это не что-то из прошлого века?»
Теперь вопрос в том, действительно ли JSP устарела в 2020 году?Да, это действительно старо
Теперь снова возникает вопрос, почему технология, которую несколько лет назад определяли как «старую», до сих пор популярна в 2020 году. Каждый год люди все еще спрашивают: «Вам все еще нужно изучать JSP?». Думаю, причина тоже очень проста:JSP действительно использовался в прошлом!
Когда я впервые изучал Java, я часто слышал: JSP и PHP могут писатьдинамические веб-страницы--- "Мой учитель".
Когда мы отправились на поиски подходящих учебных материалов, то обнаружили, что JSP есть везде, что дало мне ощущение:Кажется, что если вы не понимаете JSP, вы вообще не можете продолжать учиться..
Если вы новичок, если вы еще не изучили JSP, я предлагаю вам все ещеучитьсяНа данный момент вам не нужно глубоко изучать различное содержимое JSP, но вы можете понять его. По крайней мере, когда другие говорят о JSP,Можете ли вы узнать, что такое JSP, и понять код JSP?.
Дополнительное слово:Когда вы идете в компанию, вы все равно можете увидеть код JSP.. Хоть JSP и "старое дело", идем в компаниювозможныйЭто для поддержания старого проекта. Возможно, вам не нужно писать JSP, но, по крайней мере, вы можете его понять, верно?
Снова вопрос: если JSP — это «старая вещь», чем ее заменить?Либо используйте общий механизм шаблоновИспользование «freemarker», «Thymeleaf» и «Velocity» на самом деле не сильно отличается от использования «JSP», но их производительность будет лучше.Либо фронт-энд и бэк-энд разделение, бэкэнд просто должен вернутьсяJSONДля внешнего интерфейса страница вообще не нуждается в внутреннем канале.
Сказав все это, я хочу сказать следующее:"JSP все еще необходимо понимать, это не займет много времени, просто знайте, эта статья я могу показать вам, чтобы знать JSP"
Что такое JSP?
Полное название JSP — Java Server Pages, страница Java-сервера. JSP — это текстовая программа,Он характеризуется сосуществованием кода HTML и Java.! JSP является альтернативой для упрощения работы сервлета, вывод HTML сервлета очень сложен,JSP является альтернативой сервлету, выводящему HTML.
В блоге Tomcat я упомянул:Tomcat обращается к любому ресурсу, обращаясь к сервлету! , конечно, JSP не исключение!JSP сам по себе является сервлетом. Почему я говорю, что JSP сам по себе является сервлетом?Фактически, JSP будет скомпилирован в класс HttpJspPage при первом обращении к нему (этот класс является подклассом HttpServlet).
Например, если я случайно найду JSP, скомпилированный JSP будет выглядеть так:
package org.apache.jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import java.util.Date;
public final class _1_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {
private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();
private static java.util.List<String> _jspx_dependants;
private javax.el.ExpressionFactory _el_expressionfactory;
private org.apache.tomcat.InstanceManager _jsp_instancemanager;
public java.util.List<String> getDependants() {
return _jspx_dependants;
}
public void _jspInit() {
_el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
_jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());
}
public void _jspDestroy() {
}
public void _jspService(final HttpServletRequest request, final HttpServletResponse response)
throws java.io.IOException, ServletException {
final PageContext pageContext;
HttpSession session = null;
final ServletContext application;
final ServletConfig config;
JspWriter out = null;
final Object page = this;
JspWriter _jspx_out = null;
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\n");
out.write("\r\n");
out.write("<html>\r\n");
out.write("<head>\r\n");
out.write(" <title>简单使用JSP</title>\r\n");
out.write("</head>\r\n");
out.write("<body>\r\n");
String s = "HelloWorda";
out.println(s);
out.write("\r\n");
out.write("</body>\r\n");
out.write("</html>\r\n");
} catch (Throwable t) {
if (!(t instanceof SkipPageException)){
out = _jspx_out;
if (out != null && out.getBufferSize() != 0)
try { out.clearBuffer(); } catch (java.io.IOException e) {}
if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
}
} finally {
_jspxFactory.releasePageContext(_jspx_page_context);
}
}
}
Процесс компиляции выглядит следующим образом:Когда браузер запрашивает 1.jsp в первый раз, Tomcat преобразует 1.jsp в класс, такой как 1_jsp.java, и компилирует файл в файл класса. После компиляции запустите файл класса, чтобы ответить на запрос браузера..
После доступа к 1.jsp файл jsp не будет перекомпилирован, а файл класса будет вызываться напрямую для ответа браузеру. Конечно,Если Tomcat обнаружит, что страница JSP изменилась, он перекомпилирует.
Поскольку JSP — это сервлет,Как теги набора текста HTML на странице JSP отправляются в браузер?? Давайте взглянем на исходный код 1_jsp.java выше. Оригинал заключается в использовании записи (), чтобы выйти.В конце концов, JSP — это просто программа на Java, которая инкапсулирует сервлет.
out.write("\r\n");
out.write("\r\n");
out.write("<html>\r\n");
out.write("<head>\r\n");
out.write(" <title>简单使用JSP</title>\r\n");
out.write("</head>\r\n");
out.write("<body>\r\n");
Можно также спросить:Как работает кодовый сервер страницы JSP?? Посмотрите еще раз на файл 1_jsp.java,Java-код находится непосредственно в сервисе() класса.
String s = "HelloWorda";
out.println(s);
**JSP имеет 9 встроенных объектов! **Встроенные объекты: out, session, response, request, config, page, application, pageContext, exception.
Важно помнить:Суть JSP на самом деле Servlet. Просто JSP изначально был разработан для упрощения вывода HTML-кода сервлета.
Когда использовать JSP
Повторять:Суть JSP на самом деле Servlet. Просто JSP изначально был разработан для упрощения вывода HTML-кода сервлета.
Наш Java-код по-прежнему написан на сервлете, а не на JSP. Однажды я увидел вопрос в Zhihu: «Как использовать JSP для подключения к JDBC». Очевидно,Мы можем сделать это, но это не обязательно.
JSP выглядит как HTML, а затем добавляет к нему много Java-кода, который ненормальен и неудобен для чтения.
Итак, наша общая схема:Данные, обработанные в сервлете, пересылаются в JSP, а JSP обрабатывает только небольшую часть данных и страниц, написанных самой JSP.
Например, следующий сервлет обрабатывает данные формы, помещает их в объект запроса и перенаправляет в JSP.
//验证表单的数据是否合法,如果不合法就跳转回去注册的页面
if(formBean.validate()==false){
//在跳转之前,把formbean对象传递给注册页面
request.setAttribute("formbean", formBean);
request.getRequestDispatcher("/WEB-INF/register.jsp").forward(request, response);
return;
}
JSP получает данные, обработанные сервлетом, и отображает их, используя:
Чему нужно научиться JSP
На самом деле нам достаточно двух кусков JSP для изучения:Выражения JSTL и EL
ЭЛ выражение
**Язык выражений (EL), используются выражения EL${}Прилагаемый скрипт используется для более удобного чтения объектов! **Выражения EL в основном используются для чтения данных и отображения содержимого!
Зачем использовать выражения EL?Давайте сначала посмотримКак читать данные объекта без выражений EL?! Свойство Session установлено в 1.jsp
<%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%>
<html>
<head>
<title>向session设置一个属性</title>
</head>
<body>
<%
//向session设置一个属性
session.setAttribute("name", "aaa");
System.out.println("向session设置了一个属性");
%>
</body>
</html>
Получите свойства, установленные сеансом в 2.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title></title>
</head>
<body>
<%
String value = (String) session.getAttribute("name");
out.write(value);
%>
</body>
</html>
Эффект:
Из вышесказанного это не выглядит слишком сложным, так что давайте попробуем выражения EL!
Прочитайте свойства, установленные сеансом в 2.jsp.
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title></title>
</head>
<body>
${name}
</body>
</html>
Используйте только несколько простых букв для вывода свойств, установленных сеансом! И вывод на браузер!
Использование выражений ELМожет легко читать свойства в объектах, переданных параметрах, JavaBeans и даже коллекциях.!
JSTL
JSTL означает стандартную библиотеку тегов JSP, то есть стандартную библиотеку тегов JSP.. JSTL — самая основная библиотека тегов,Предоставляет ряд тегов JSP для выполнения основных функций: обход коллекции, вывод данных, обработка строк, форматирование данных и многое другое!
Зачем использовать JSTL?
Выражения EL не идеальны и нуждаются в поддержке JSTL.! В JSP мы использовали выражения EL раньше и реализовали мощные функции выражений EL: **Использование выражений EL может легко ссылаться на некоторые компоненты JavaBeans и их свойства, не вызывая исключение NullPointerException и другие ошибки! **Тем не менее, выражения EL очень ограничены,Он не может перемещаться по коллекции и выполнять логический контроль. В это время вам нужна поддержка JSTL!
** Удобочитаемость, ремонтопригодность и возможность повторного использования скриптлета очень плохие! **JSTL очень похож на код HTML и следует синтаксису тегов XML.Используйте JSTL, чтобы страницы JSP выглядели аккуратно, читабельно и повторно использовались, а также могли выполнять сложные функции!
Раньше мы использовали выражения EL для получения данных коллекции, а код скриптлета использовался для обхода коллекции.Теперь, когда мы изучили тег forEach, мы можем отказаться от кода скриптлета.
Задайте для свойства значение Session, типом свойства является коллекция List.
<%
List list = new ArrayList<>();
list.add("zhongfucheng");
list.add("ouzicheng");
list.add("xiaoming");
session.setAttribute("list", list);
%>
Просмотрите коллекцию List в атрибуте сеанса, items: коллекция для повторения. var: текущий итерируемый элемент
<c:forEach var="list" items="${list}" >
${list}<br>
</c:forEach>
Эффект:
положить галантерейные товары
Это уже давно работает, почему ты все еще пишешь?JSPНу по следующим причинам:
- я паранабор текстаТе, у кого есть стремление, если вы обратите внимание на моих одноклассников рано, вы можете обнаружить, что мой GitHub, навигация по статьям
read.meбудет часто заменяться. настоящее времяGitHubНавигация мне не понравилась (слишком длинная), а ранние статьи, честно говоря, были не очень хороши в верстке, поэтому решил сделать новую волну. - Моя статья будет распространяться на нескольких платформах, но после того, как статья будет опубликована, ее никто не сможет прочитать, а кровать с картинками, скорее всего, зависнет из-за противоугонной цепочки платформы. И потому многие читатели спрашивали меня: "Можете ли вы преобразовать свою статью в PDF?? "
- Я написал много статей на уровне серии, которые почти никогда не меняются, поэтому они идеально подходят для их публикации».Упорство".
По вышеуказанным причинам я решил собрать свой цикл статей в одинPDF/HTML/WORDдокументация. Честно говоря, создание такого документаУ меня ушло много времени. предотвращатьпроституция, обратите внимание на мой публичный аккаунт, чтобы ответить "888" может быть получен.
Содержимое PDF-файла очень длинное, а галантерейные товары очень и очень сложные. Заинтересованные учащиеся могут просмотреть волну. Помните: нам нужно только понимать JSP, нам не нужно углубляться в каждый пункт знаний, потому что он, вероятно, не используется в реальной разработке.
содержание документавсе вручную, если вы ничего не понимаете, вы можете напрямуюспросите меня(В официальном аккаунте есть мои контактные данные).
Последний вопрос о "Сортировка и структуры данных"изPDFОтклик в паблике неплохой, цель -180один смотрит,Превзошел ожидания, поэтому я обновил раньше.
еслиНа этот раз более 180 лайков, то на следующей неделе выйдет еще одна серия.Что вы хотите увидеть, дайте мне знать
Проект с открытым исходным кодом, охватывающий все точки знаний о бэкэнде Java (уже 6 тысяч звезд):GitHub.com/Zhongf UC очень…
если ты хочешьв реальном времениЕсли вы обратите внимание на мои обновленные статьи и галантерейные товары, которыми я делюсь, поищите в WeChat.Java3y.
Содержимое PDF-документоввсе вручную, если вы ничего не понимаете, вы можете напрямуюспросите меня(В официальном аккаунте есть мои контактные данные).