Java программисты написали интервью Коллекция Глава 5 Java Web: 5.1 Servlet и JSP (1-8 вопросов)

запрос 5.1.1 страница рабочего процесса, как

Веб-приложение, как правило, состоит из двух частей подпрограмм клиента и на стороне сервера. Среди них, клиент в основном относится к пользователю и браузер, пользователи могут найти ресурсы, необходимые в браузере, но эти ресурсы находятся на сервере. Браузер программного обеспечение является инструментом, он имеет две основных функций: один завершен, и на стороне сервера взаимодействие, а второй является полной HTML (Hyper-Text Markup Language, HTML, используемый для указания браузера, как текущее содержимое пользователя) из разрешение, что позволяет пользователям нужно информации вид ресурсов, чтобы показать в интуитивной форме. Сервер клиентского принимать входящие запросы и обрабатывает запрос, найти ресурсы, запрашиваемые клиентом, и, наконец, найти ресурсы обратно клиенту, эти ресурсы включают в себя HTML-страницы, изображения, аудио, видео, содержимое PDF-документов.

1) пользователям запрашивать ресурсы, необходимые для входа через ссылку браузера.

2) браузер принимает запрос пользователя, а запрос смонтирован в указанный формат на сервер передачи для выполнения конкретных взаимодействий между клиентом и сервером через HTTP. В котором запрос на поток данных в основном содержится в HTTP (протокол передачи гипертекста, Hypertext Transfer Protocol, протокол для установления TCP / IP на основе, в основном используется для связи между стороне клиента и сервера) метод запроса (GET или POST ), веб - адрес (URL, Uniform Resource Lo-каторый , унифицированный указатель ресурса) запрос и параметры для информационных запросов.

3) сервер получает запрос, отправленный клиентом, и найти ресурсы, необходимые пользователю.

4) Найти сервер ресурсов, запрошенный пользователем, чтобы ресурсы обратно клиенту.

5) После того, как сервер возвращает сообщение с ответом на собранные сообщения в определенном формате для клиента, этот процесс осуществляется с помощью HTTP. Отклика поток данных в основном содержит код состояния (представляющий запрос успех или неудачу), Content-Type (например , текст, изображения, HTML и т.д.), содержание ответа сообщения (изображения или контент в формате HTML).

6) HTML браузер для разбора ответа и результатов, представленных пользователя.


5.1.2 HTTP GET в чем разница и метод POST

Метод HTTP - запросов существует много типов, такие как GET, POST, HEAD, трассировка, ВАРИАНТЫ , и т.д., но и опубликовать два наиболее часто используемые методы. Который, GET является самым простым видом метода запроса, его основной функцией является получение пользователем требуемых ресурсов с сервера, и в качестве ответа обратно клиенту, эти ресурсы могут быть чем - либо HTML - страницы, изображения, документы, и в один из , но нужно отметить , что роль методы ПОЛУЧИТЬ в основном используются для получения информации о стороне сервера ресурсе, так же , как операции запросов к базам данных, это не повлияет на их собственные государственные ресурсы , такие как удаление, изменять или добавлять ресурсы не являются Это позволило. Метод POST обеспечивает более мощные функции , чем метод GET, который в дополнение к принятию ресурсов с сервера, но также может загружать данные на сервер.

Хотя метод GET используется в основном для получения данных с сервера, вы можете также загружать данные на сервер, но, как правило, не рекомендуется использовать метод GET для загрузки данных на сервер, но рекомендуется использовать метод POST для достижения этой функции. В частности, имеются следующие две причины:

1) При использовании метода GET для загрузки данных на сервер, добавить данные в целом за URL, и как использовать «?», Подключение «и» между различными переменными. Так как существует ограничение на длину URL, так что использование этого метода может загружать объем данных очень мало, как правило, около 1024Byte. Метод POST в то время как передача данных осуществляется по запросу присоединения HTTP, большее количество переданных данных, по умолчанию, как правило, не ограничивается.

2) В качестве метода GET для загрузки данных добавляются в URL, так что загруженные данные полностью «разоблачили» вне, риски, присущая безопасность, особенно, когда пользователям должны предоставить конфиденциальную информацию на сервер. Метод POST представить содержимое на сервер в URL не отображается в виде обычного текста, он невидим для пользователя, так что безопасность лучше.


5.1.3 Что такое Servlet

HTML можно использовать для хранения только статическое содержимое, но , как правило, статические страницы трудно для удовлетворения потребностей практического применения, в связи с этим, концепция динамических страниц введены. Так называемые динамические страницы, означает возможность отображать различное содержание в зависимости от времени, различные пользовательские страницы, такие как общие форумы, доски объявлений, сайты электронной коммерции осуществляются с помощью динамической страницы. Так как может генерировать динамические страницы? Один из способов заключается в использовании общего шлюзового интерфейса (Common Gateway Interface, CGI). CGI является программа , написанная на Perl скрипт , который может быть использован для создания динамических страниц , а другой путь использование технологии сервлетов .

Что такое Servlet это? Servlet является использование серверной части программы написаны на языке Java , который работает на Servlet контейнер веб - сервера, чья основная функция заключается в предоставлении веб - сервисов запрос / ответ модели, могут генерировать динамические веб - контента , который не доступен в HTML функция.

По сравнению с другими технологиями, которые генерируют динамические страницы, Servlet имеет много преимуществ, в частности, в основном в следующих аспектах:

1) лучшая переносимость. Поскольку язык Java и мощными возможностями кросс-платформенной переносимостью, что делает Servlet также имеет хорошую переносимость, то есть, без необходимости изменять код может быть развернут на различных типах веб-серверов.

2) осуществление высокой эффективности. Поскольку CGI создается для каждого запроса процесса для решения, и Servlet создает поток для каждого запрос, чтобы выполнить, и для создания потока, чем создать дешевле процесс, по сравнению с CGI, Servlet имеет более короткий период взаимодействия время отклика, высокая эффективность реакции.

3) простой в использовании. Servlet предоставляет множество полезного интерфейса будет использоваться для чтения или установить заголовок HTTP сообщения и обработку файлов cookie состояния сеанса трассировки.

4) масштабируемость. Поскольку Servlet написан на Java, поэтому он имеет все преимущества языка Java. Java язык является надежным, объектно-ориентированным языком программирования, легко расширить, Servlet, естественно, обладает преимуществом.

Как видно из приведенных выше структур программы сервлета, сервлет, нет основного метода (), даже так называемые методы ввода не являются, то в конце концов, как это осуществить? На самом деле, это осуществляется под управлением контейнера, контейнер часто используется для Tomcat. Когда веб-сервер получает запрос на Servlet, который будет передавать запрос на сервер, соответствующие емкости для обработки, контейнер, в ответ на запрос клиента с помощью метода (doGet () или doPost) () вызова к Servlet.

В частности, запрос Servlet клиент имеет следующие шаги:

1) пользователь, нажав на ссылку, чтобы инициировать запрос на Servlet.

2) Веб-сервер после получения запроса, то запрос будет обработан в соответствующий контейнер, когда контейнер обнаруживаются, что запрос, чтобы инициировать контейнер случая Servlet создает два объекта: HttpServletResponse и HttpServletRequest.

3) контейнер сервлетов может найти соответствующее сообщение в соответствии с URL в сообщении запроса, а затем создает отдельный поток для запроса, в то время как два объекта 2), созданных на шаге переносится на вновь созданную нить в виде параметров.

Метод 4) службы контейнер сервлетов вызова () осуществляется в ответ на запросы пользователей, обслуживание () метод вызывает doPost () или doGet () для выполнения конкретных задач в ответ, в то время как генерируется динамической страницы обратно в контейнер.

5) контейнер в сборе в формате HTTP, ответное сообщение обратно клиенту. В этом случае поток работает над удалите два объекта 2), созданные в шаге.

На рисунке 5-2 показано, описанный выше процесс.

Контейнер будет обработан для создания нового потока для каждого запроса, и она будет создавать HttpServletRe-sponse и HttpServletRequest два объекта для каждого запроса. После обработки поток будет бросить курить.

5.1.4 doPost () метод doGet () метод, как выбрать

Как можно видеть из потока обработки запроса Web-HTTP контейнера, окончательный запрос к Servlet будет обработан сервлет для обработки запроса вызывает метод метода сервиса (), сервис () запускает doPost Различных типов запросов () метод (для обработки запроса POST) или метода doGet () (для обработки запросов GET) для обработки запроса пользователя, чтобы добиться отклика клиентов. Если запрос GET, вызывает метод doGet (); если запрос POST, вызывает метод doPost (). Сервлет интерфейс и в GenericServlet (общий, не относящиеся к любому протоколу Servlet, он реализует интерфейс Servlet) не метод и метод doPost () doGet (), и эти методы HttpServlet определены, но возвращается информация об ошибке, при определении сервлета, необходимо реализовать метод doGet () или метод doPost (). doGet и doPost принимать запросы (HttpServletRequest) и ответ (HttpServletResponse).

В частности, когда запрос HTTP, атрибут метод GET, вызовите метод doGet (); если атрибут метод пост, то вызывается метод doPost ().


5.1.5 Что такое жизненный цикл сервлета

由于 Servlet 运行在容器中,没有 main()方法,因此,整个生命周期都是由容器来控制的。简单而言,Servlet 的生命周期只有两个状态:未创建状态与初始化状态。这两种状态的转换主要是由 3 个重要的方法来进行控制:init()、service()和 destroy()。其中,init()方法是 Servlet 生命的起点,用于创建或打开任何与 Servlet 相关的资源以及执行初始化工作。service()方法是 Servlet 中真正处理客户端传过来的请求的方法,它根据 HTTP 请求方法(GET、POST 等)将请求分发到 doGet()、doPost()等方法。destroy()方法释放任何在 init()方法中打开的与 Servlet 相关的资源。

具体而言,Servlet 的生命周期可以分为加载、创建、初始化、处理客户请求和卸载 5 个阶段。

1)加载。容器通过类加载器使用 Servlet 类对应的文件来加载 Servlet。

2)创建。通过调用 Servlet 的构造函数来创建一个 Servlet 实例。

3)初始化。通过调用 Servlet 的 init()方法来完成初始化工作,这个方法是在 Servlet 已被创建但向客户端提供服务之前调用的,需要注意的是,init()方法只会被调用一次。

4)处理客户请求。Servlet 一旦被创建后,它就可以为客户端提供服务了。每当有新的客户请求到来时,容器都会创建一个新的线程来处理该请求,接着会调用 Servlet 的 service()方法来完成客户端的请求,当然,service()方法会根据请求的 method 属性值的不同调用决定是调用 doGet()方法还是调用 doPost()方法来完成具体的响应。

5)卸载。容器在卸载 Servlet 之前需要调用 destroy()方法,让 Servlet 自己释放其占用的系统资源,一旦 destroy 方法被调用,容器就不会再向这个 Servlet 发送任何请求消息了。如果容器需要这个 Servlet,那么就必须重新创建并初始化一个实例。需要注意的是,destroy()方法只会被调用一次。


5.1.6 JSP 有哪些优点

JSP 的引入在一定程度上解决了 Servlet 存在的缺点。其实现理念是让每个 Servlet 只负责其对应的业务逻辑的处理,让 JSP 来负责用户的 HTML 显示,因此实现了业务逻辑与视图实现的分离,从而极大地提高了系统的可扩展性。

5.1.7 JSP 与 Servlet 有何异同

JSP 与 Servlet 的相同点为:JSP 可以被看作一个特殊的 Servlet,它只不过是对 Servlet 的扩展,只要是 JSP 可以完成的工作,使用 Servlet 都可以完成,例如生成动态页面。由于 JSP 页面最终要被转换成 Servlet 来运行,因此处理请求实际上是编译后的 Servlet。

JSP 与 Servlet 的不同点为:①Servlet 的实现方式是在 Java 中嵌入 HTML 代码,编写和修改 HTML 非常不方便,所以它比较适合做流程控制、业务处理;而 JSP 的实现方式为在 HTML 中嵌入 Java 代码,比较适合页面的显示,例如,在 Struts 框架中,Servlet 位于 MVC 设计模式的控制层,而 JSP 位于视图层。②Servlet 中没有内置对象,JSP 中的内置对象都是必须通过 HttpServletRequest 对象、HttpServletResponse 对象以及 HttpServlet 对象得到。


5.1.8 如何使用 JSP 与 Servlet 实现 MVC 模型

MVC 是 Model(模型)、View(视图)和 Controller(控制器)3 个单词的首字母组合。MVC 是一种目前广泛流行的应用模型,其目的是实现 Web 系统的职能分工。图 5-4 为 MVC 模型关系图,其中模型层实现系统中的业务逻辑,通常可以用 JavaBean 或 EJB 来实现;视图层则用于与用户的交互,通常用 JSP 来实现;控制层则是模型与视图之间沟通的桥梁,它可以把用户的请求分派并选择恰当的视图来显示它们,同时它也可以解释用户的输入并将其映射为模型层能够执行的操作。

MVC 强制性地分离 Web 应用的输入、处理和输出,使得 MVC 应用程序被分成 3 个核心部件:模型、视图和控制器。它们各自处理自己的任务。

(1)模型(业务逻辑层)

模型表示企业数据和业务逻辑,它是应用程序的主体部分。业务流程的处理过程对其他层来说是黑箱操作,模型接收视图请求数据,并返回最终的处理结果。业务模型的设计可以说是 MVC 最主要的核心。目前流行的 EJB 模型就是一个典型的应用例子,它从应用技术实现的角度对模型做了进一步的划分,以便充分利用现有的组件,但它不能作为应用设计模型的框架。它仅仅告诉设计人员按这种模型设计就可以利用某些技术组件,从而减少了技术上的困难,可以使设计人员专注于业务模型的设计。

MVC 把应用的模型按一定的规则抽象出来。抽象的层次很重要,这也是判断设计人员是否优秀的主要依据。抽象与具体不能隔得太远,也不能太近。MVC 并没有提供模型的设计方法,而只告诉设计人员应该如何组织管理这些模型,以便于模型的重构和提高重用性。

业务模型还有一个很重要的模型那就是数据模型。数据模型主要指实体对象的数据持续化,比如将一张订单保存到数据库,从数据库获取订单,将这个模型单独列出,所有相关数据库的操作只限制在该模型中。

(2)视图(表示层)

视图是用户看到的并与之交互的界面。对早期的 Web 应用来说,视图就是由 HTML 元素组成的界面,在新式的 Web 应用中,HTML 依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括 Adobe Flash 以及诸如 XHTML、XML/XSL 等一些标识语言和 Web 服务等。

随着 Web 应用开发技术的发展,用户要求的日益提高,如何处理应用程序的界面已经变得越来越有挑战性。MVC 架构一个大的好处是它能为 Web 应用处理很多不同的视图。在视图中其实没有真正的业务处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。

视图功能强大,主要表现在以下两个方面:

1)根据客户类型显示信息。

2)显示商业逻辑(模型)的结构,而不关心信息如何获得何时获得。

(3)控制器

控制器接收用户的输入并调用模型和视图去完成用户的需求。所以当用户单击 Web 页面中的超链接和发送 HTML 表单时,控制器(例如 Servlet)本身不输出任何东西,也不执行任何处理,它只是接收请求并决定调用哪个模型构件去处理请求,然后确定用哪个视图来显示模型处理返回的数据。

MVC 的处理过程是这样的:对于每一个用户输入的请求,先被控制器接收,并决定由哪个模型来进行处理,然后模型通过业务逻辑层处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过显示页面呈现给用户。

MVC 这种特殊的设计结构,给应用开发带来了很多便利,通过使用 MVC 架构,大大提高了 Web 应用的开发效率,具体来说,MVC 设计结构主要有以下几个方面的优点:

1)低耦合性。由于视图层和业务层分离,这样就使得修改视图层代码时不需要重新编译模型和控制器的代码,同样,一个应用的业务流程或者业务规则的改变只需要改动 MVC 的模型层即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。

2)高重用性和可适用性。由于技术的不断进步,现在访问应用程序可以有越来越多的方式。MVC 模式允许使用各种不同样式的视图来访问同一个服务器端的代码。它包括任何 Web(HTTP)浏览器或者无线浏览器(WAP),例如,用户可以通过计算机或手机来订购某样产品,虽然订购的方式不一样,但处理订购产品的方式是一样的。由于模型返回的数据没有进行格式化,因此同样的构件能被不同的界面使用,例如,很多数据可能用 HTML 来表示,但是也有可能用 WAP 来表示,而这些表示所需要的命令仅是改变视图层的实现方式,而控制层和模型层无需做任何改变。

3)较低的生命周期成本。MVC 使得开发和维护用户接口的技术难度降低。

4)部署快速。使用 MVC 模式可以大大缩减开发时间,这使得后台开发人员集中精力于业务逻辑上,使界面开发人员(包括 HTML 和 JSP 开发人员)集中精力于表现形式上。

5)可维护性。分离视图层和业务逻辑层也使得 Web 应用更易于维护和修改。

6)有利于软件工程化管理。由于采用了分层思想,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化管理程序代码。

用 JSP 与 Servlet 实现的 MVC 模型如图 5-5 所示。

在这个 MVC 模型中,视图模块采用 JSP 来实现,主要负责数据的展现。视图可以从控制器上获取模型的状态,当然不是直接从控制器上获取,而是控制器把模型的数据放到一个视图可以访问的地方,通过间接方式来访问模型的数据。控制器采用 Servlet 来实现,客户端的所有请求都发送给 Servlet,它接收请求,并根据请求消息把它们分发给对应的 JSP 页面来响应,同时根据需求生成 JavaBean 实例供 JSP 来使用。模型采用 JavaBean 来实现,这个模块实现了实际的业务逻辑。

发布了101 篇原创文章 · 获赞 20 · 访问量 6万+

рекомендация

отblog.csdn.net/qq_40993412/article/details/104066398