На дворе 2020 год, вы все еще хотите изучать JSP?

Java Java EE
На дворе 2020 год, вы все еще хотите изучать JSP?

предисловие

В 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 лайков, то на следующей неделе выйдет еще одна серия.Что вы хотите увидеть, дайте мне знать

img

Проект с открытым исходным кодом, охватывающий все точки знаний о бэкэнде Java (уже 6 тысяч звезд):GitHub.com/Zhongf UC очень…

если ты хочешьв реальном времениЕсли вы обратите внимание на мои обновленные статьи и галантерейные товары, которыми я делюсь, поищите в WeChat.Java3y.

Содержимое PDF-документоввсе вручную, если вы ничего не понимаете, вы можете напрямуюспросите меня(В официальном аккаунте есть мои контактные данные).