предисловие
В 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-документоввсе вручную, если вы ничего не понимаете, вы можете напрямуюспросите меня(В официальном аккаунте есть мои контактные данные).