目录
1. Servlet 和 Ashx(一般处理程序)
2. Servlet 和 JSP
3. Servlet 的生命周期
4. Java Filter 和 HttpModule,ActionFilter
5.JSTL,EL 和 Razor 表达式
6. JSP 内置 9 大对象, 可和 ASP.NET 对应
7. Servlet 示例代码
8. Servlet 国际化
1. Servlet 和 Ashx(一般处理程序)
Java web 和 ASP.NET 也是有相似的, java Web 的核心是 Servlet,Jsp 其实本质都是 Servlet, 而 Servlet 的流程可以比较清晰看到整个前后台是怎么工作的, 类似. NET 的 ashx 一般处理程序, Java 是 MVC 的主要倡导者, 随着 Web 技术发展, Servlet 主要被当作 Controler 使用, Jsp 作为 View 使用, 这在许多 MVC 框架有所体现. 得益于开源社区的活跃, 流行的 Java MVC 框架都比较成熟了.
2. Servlet 和 JSP
jsp 最终也是转化被成 Servlet,.java 就是一个 Servlet
当一个 JSP 文件第一次被请求的时候, Tomcat 首先会把这个 JSP 文件转换成一个 Java 源文件. 在转换过程中如果发现 JSP 文件有语法错误, 转换过程将中断, 并向服务端和客户端输出出错信息. 如果转换成功, Tomcat 用 javac 把该 Java 源文件编译成相应的. class 文件并将该. class 文件加载到内存中.
3. Servlet 的生命周期
1).Servlet 生命周期分为三个阶段:
1, 初始化阶段: 调用 init()方法
2, 响应客户请求阶段: 调用 service()方法
Service()方法内部对请求的类型 (get/post) 进行了判断, 自动调用 doPost/doGet
3, 终止阶段: 调用 destroy()方法
2).Servlet 的单例多线程:
单例: Servlet 只在用户第一次请求时被实例化, 并且是单例的, 在服务器重启或关闭时才会被销毁.
多线程: 当请求到达时, Servlet 容器 (Tomcat...) 通过线程池中可用的线程给请求者并执行 Service 方法, 每个线程执行一个单一的 Servlet 实例的 service() 方法
4. Java Filter 和 HttpModule,ActionFilter
1).Java Filter
Filter 也称之为过滤器, 它是 Servlet 技术中最实用的技术, Web 开发人员通过 Filter 技术, 对 Web 服务器管理的所有 Web 资源: 例如 Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截, 从而实现一些特殊的功能. 例如实现 URL 级别的权限访问控制, 过滤敏感词汇, 压缩响应信息等一些高级功能.
它主要用于对用户请求进行预处理, 也可以对 HttpServletResponse 进行后处理. 使用 Filter 的完整流程: Filter 对用户请求进行预处理, 接着将请求交给 Servlet 进行处理并生成响应, 最后 Filter 再对服务器响应进行后处理.
Java Filter 过滤器 https://www.cnblogs.com/coderland/p/5902878.html
2).HttpModule 和 ActionFilter
HttpModule 是 ASP.NET WebForm 的 Filter
浅谈 HttpModule
ActionFilter 是 ASP.NET MVC 的 Filter
四种基本 Filter 概述 https://www.cnblogs.com/willick/p/3331520.html
5.JSTL,EL 和 Razor 表达式
把代码标签化, 表达式化, 让前端人员也能维护, 实现前后端分离
1). JSTL 标签 http://www.runoob.com/jsp/jsp-jstl.html
JSP 标准标签库 (JSTL) 是一个 JSP 标签集合, 它封装了 JSP 应用的通用核心功能.
JSTL 支持通用的, 结构化的任务, 比如迭代, 条件判断, xml 文档操作, 国际化标签, SQL 标签. 除了这些, 它还提供了一个框架来使用集成 JSTL 的自定义标签.
2).EL 表达式
EL(Expression Language) 目的: 为了使 JSP 写起来更加简单.
它提供了在 JSP 中简化表达式的方法. 它是一种简单的语言, 基于可用的命名空间 (PageContext 属性), 嵌套属性和对集合, 操作符(算术型, 关系型和逻辑型) 的访问符, 映射到 Java 类中静态方法的可扩展函数以及一组隐式对象.
3).Razor http://www.runoob.com/aspnet/razor-syntax.html
这里对比的是 Razor 表达式
6. JSP 内置 9 大对象, 可和 ASP.NET 对应
1).request 对象
客户端的请求信息被封装在 request 对象中, 通过它才能了解到客户的需求, 然后做出响应. 它是 HttpServletRequest 类的实例.
2).response 和 out 对象
response 对象包含了响应客户请求的有关信息, 它是 HttpServletResponse 类的实例.
out 对象是 JspWriter 类的实例, 是向客户端输出内容常用的对象
response 和 out
3).session 对象
session 对象指的是客户端与服务器的一次会话, 从客户连到服务器的一个
WebApplication 开始, 直到客户端与服务器断开连接为止. 它是 HttpSession
类的实例.
4).page 和 pageContext 对象
page 对象就是指向当前 JSP 页面本身, 有点象类中的 this 指针, 它是 java.lang.Object 类的实例
pageContext 对象提供了对 JSP 页面内所有的对象及名字空间的访问, 也就是
说他可以访问到本页所在的 SESSION, 也可以取本页面所在的 application 的
某一属性值, 他相当于页面中所有功能的集大成者, 它的本类名也叫
page 和 pageContext
5).application 对象
application 对象实现了用户间数据的共享, 可存放全局变量. 它开始于服务器
的启动, 直到服务器的关闭, 在此期间, 此对象将一直存在; 这样在用户的前
后连接或不同用户之间的连接中, 可以对此对象的同一属性进行操作; 在任何
地方对此对象属性的操作, 都将影响到其他用户对此的访问. 服务器的启动和
关闭决定了 application 对象的生命. 它是 ServletContext 类的实例.
6).exception 对象
exception 对象是一个例外对象, 当一个页面在运行过程中发生了例外, 就产
生这个对象. 如果一个 JSP 页面要应用此对象, 就必须把 isErrorPage 设为 true,
否则无法编译. 他实际上是 Java.lang.Throwable 的对象
7).config 对象
config 对象是在一个 Servlet 初始化时, JSP 引擎向它传递信息用的, 此信息包括 Servlet 初始化时所要用到的参数 (通过属性名和属性值构成) 以及服务器的有关信息(通过传递一个 ServletContext 对象)
7. Servlet 示例代码
1).Hello World 示例代码
- // 导入必需的 java 库
- import java.io.*;
- import javax.servlet.*;
- import javax.servlet.http.*;
- // 扩展 HttpServlet 类
- public class HelloWorld extends HttpServlet {
- private String message;
- public void init() throws ServletException
- {
- // 执行必需的初始化
- message = "Hello World";
- }
- public void doGet(HttpServletRequest request,
- HttpServletResponse response)
- throws ServletException, IOException
- {
- // 设置响应内容类型
- response.setContentType("text/html");
- // 实际的逻辑是在这里
- PrintWriter out = response.getWriter();
- out.println("<h1>" + message + "</h1>");
- }
- public void destroy()
- {
- // 什么也不做
- }
- }
2).Web-INF/ Web.xml 配制
- <Web-App>
- <servlet>
- <servlet-name>HelloWorld</servlet-name>
- <servlet-class>HelloWorld</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>HelloWorld</servlet-name>
- <url-pattern>/HelloWorld</url-pattern>
- </servlet-mapping>
- </Web-App>
3). 然后运行 tomcat, 访问你的 Servlet
8. Servlet 国际化
在我们开始之前, 先来看看三个重要术语:
国际化(I18N): 这意味着一个网站提供了不同版本的翻译成访问者的语言或国籍的内容.
本地化(l10n): 这意味着向网站添加资源, 以使其适应特定的地理或文化区域, 例如网站翻译成印地文(Hindi).
区域设置(locale): 这是一个特殊的文化或地理区域. 它通常指语言符号后跟一个下划线和一个国家符号. 例如 "en_US" 表示针对 US 的英语区域设置.
当建立一个全球性的网站时有一些注意事项. 本教程不会讲解这些注意事项的完整细节, 但它会通过一个很好的实例向您演示如何通过差异化定位 (即区域设置) 来让网页以不同语言呈现.
Servlet 可以根据请求者的区域设置拾取相应版本的网站, 并根据当地的语言, 文化和需求提供相应的网站版本. 以下是 request 对象中返回 Locale 对象的方法.
java.util.Locale request.getLocale()
检测区域设置
下面列出了重要的区域设置方法, 您可以使用它们来检测请求者的地理位置, 语言和区域设置. 下面所有的方法都显示了请求者浏览器中设置的国家名称和语言名称.
序号 | 方法 & 描述 |
---|---|
1 | String getCountry() 该方法以 2 个大写字母形式的 ISO 3166 格式返回该区域设置的国家 / 地区代码。 |
2 | String getDisplayCountry() 该方法返回适合向用户显示的区域设置的国家的名称。 |
3 | String getLanguage() 该方法以小写字母形式的 ISO 639 格式返回该区域设置的语言代码。 |
4 | String getDisplayLanguage() 该方法返回适合向用户显示的区域设置的语言的名称。 |
5 | String getISO3Country() 该方法返回该区域设置的国家的三个字母缩写。 |
6 | String getISO3Language() 该方法返回该区域设置的语言的三个字母的缩写。 |
来源: http://www.bubuko.com/infodetail-3198791.html