700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【Java从0到架构师】Servlet_JSP

【Java从0到架构师】Servlet_JSP

时间:2020-07-26 17:35:54

相关推荐

【Java从0到架构师】Servlet_JSP

Servlet_JSP

Servlet乱码问题Servlet 的细节Servlet 处理请求的常见过程Servlet 生命周期loadOnStartupServletContextJSPEL表达式、JSTL标签库JSP 处理请求的常见过程Servlet + JSPServlet + JSP 处理请求的常见过程转发 (forward)转发链条重定向 (redirect)转发 vs 重定向JSP 九大内置对象

Java 从 0 到架构师目录:【Java从0到架构师】学习记录

码云代码:/szluyu99/mj_java/tree/master

Servlet

对应代码:/szluyu99/mj_java/blob/master/02_crm/src/com/mj/servlet/LoginServlet.java

Servlet 是 Server Applet 的简称,译为“小型的服务程序”,用于响应客户端的请求

一般的使用要素:

继承javax.servlet.http.HttpServlet,实现 doGet、doPost 或 service 方法通过request对象获取客户端的请求数据

request.getParameter()通过response对象给客户端返回响应

response.getWriter().write()通过注解@WebService设置 Servlet 对应的请求路径

乱码问题

客户端的请求数据乱码

request.setCharacterEncoding("UTF-8");

服务器的响应数据乱码

response.setContentType("text/plain;charset=UTF-8");

"text/plain"是数据的 MIMEType,根据实际情况而定

更多的 MIMEType 可以参考TOMCAT_HOME/conf/web.xml

Servlet 的细节

通过 response 拿到的输出流对象(比如 getwriter),不需要程序员调用 close 去关闭

默认情况下,一个 Servlet 类,只会被服务器创建一个实例对象,而且是在第一次处理客户端请求才创建实例

注意:Servlet 并没有设计成单例模式!!!建议:不要在 Servlet 中定义可写(writable)的成员变量,会引发线程安全问题

HTTP 请求的默认端口号是 80,所以,如果 Tomcat 服务器的端口号设置为 80,那么:

localhost/path等价于localhost:80/path

Servlet 处理请求的常见过程

如果要返回一个网页给客户端,会存在大量可读性差、难以维护的字符串拼接代码

比如下面这种代码:

Servlet 生命周期

Servlet 有initdestory生命周期方法

Servlet 可以通过注解、XML 方式使用

loadOnStartup

可以使用 loadOnStartup 属性设置 Servlet 的创建时机

负数:首次访问 Servlet 时,才会创建 Servlet非负数:项目部署到 Web 容器中时就会创建 Servlet,数值越小,越先创建默认值是 -1

ServletContext

一个 ServletContext 对象就代表一个 Web 应用,可以用来与 Web 容器(Tomcat)通信

获取 ServletContext:

request.getServletContext()servlet.getServletContext()

常用方法:

getMIMETypesetAttribute\qetAttribute\removeAttributegetRealPath

JSP

JSP 是 Java Server Pages的简称,是一种动态网页技术标准

常用指令

<%@ page %>:配置当前页面信息<%@ include %>:包含其他页面<%@ taglib %>:导入标签库

输出<%= 需要输出的内容 %>,等价于out.print(需要输出的内容)

嵌入 Java 代码<% Java代码 %>

声明<%! 声明成员变量、方法 %>

注释<%-- 注释内容 -->,HTML、CSS、JS 注释照常使用

EL表达式、JSTL标签库

EL 是 Expression Language 的简称

${obj.property}${obj["property"]}${obj[propertyVar]}emptynot empty

JSTL 是 JSP Standard Tag Library 的简称,译为 “JSP标准标签库”

JSTL 由 Apache 的 Jakarta 小组维护

EL表达式、JSTL标签库都可以简化 JSP 代码

下载使用 JSTL 核心标签库

下载地址:/download-taglibs.cgi

如果使用其核心标签库,只需要下载 2 个 jar 包即可

taglibs-standard-impl-1.2.5. jar、taglibs-standard-spec-1.2.5. jar

使用方法:

将 jar 包加入到WEB-INF/lib中,并且右击选择 “Add as Library”使用 taglib 指令导入 JSTL 核心标签库

<%@ taglib prefix="c" uri="/jsp/jstl/core" %>

常用标签:

<c:if test="条件"><c:forEach items="集合" var="元素" varStatus="循环相关的信息"><c:choose><c:when test="条件"><c:otherwise>

JSP 处理请求的常见过程

明显的缺点:

Java 代码 和 HTML 代码 混合在一起,导致可读性差,难以维护整个 JSP 文件基本得由 Java 后台工程师来完成,前端工程师根本无非维护

在很久以前,有些公司是需要前端后台一起开发 JSP,现在流行前后端分离

Servlet + JSP

项目代码:/szluyu99/mj_java/tree/master/03_crm

Servlet + JSP 处理请求的常见过程

MVC 开发模式:

M (Model):数据V (View):页面展示 (JSP)C (Controller):控制器 (Servlet)

转发 (forward)

在同一个 Context 中进行请求转发:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 获取客户数据List<Customer> customers = Data.getCustomers();// 将客户数据存储到request中request.setAttribute("customers", customers);// 转发到list.jsp页面进行数据展示request.getRequestDispatcher("/page/list.jsp").forward(request, response);}

转发链条

在同一次请求中,可以转发多次,形成一个转发链条

在一个转发链条上可以通过request.setAttributerequest.getArrribute来共享数据每一次转发都会创建一个新的 request 对象,用成员变量request指向前一个 request 对象

在转发链条上,所有的 attribute 都存储在头部Request对象中

重定向 (redirect)

重定向:服务器通知客户端重新发送请求到新的任意 URL 地址

以下两种写法等价:

response.sendRedirect("/crm/list");

// 重定向response.setStatus(302); // 状态码: 302response.setHeader("Location", "/crm/list"); // 响应头Location: /crm/list

转发 vs 重定向

转发

request.getRequestDispatcher("/路径").forward(request, response)

只能转发到同一个 Context 下,路径中不用包含 ContextPath客户端只发了一次请求浏览器地址栏的 URL不会发生变化转发的操作只由服务器完成

重定向

// 重定向response.sendRedirect("/路径")

可以重定向到任意 URL,如果重定向到同一个 Context 下,路径中需要包含 ContextPath客户端发了两次请求浏览器地址栏的 URL发生变化重定向的操作由服务器+客户端配合完成

JSP 九大内置对象

4个域对象:pageContextrequestsessionapplication

共享范围从左至右,逐渐增大

利用 EL 表达式从 JSP 域对象中获取数据

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。