目录

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过滤器

2).HttpModule 和 ActionFilter

HttpModule 是asp.net WebForm 的Filter

浅谈HttpModule

ActionFilter 是 asp.net MVC 的Filter

四种基本Filter概述

5.JSTL,EL 和 Razor 表达式

把代码标签化,表达式化,让前端人员也能维护,实现前后端分离

1). JSTL标签

JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。

JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。

2).EL表达式

EL(Expression Language)  目的:为了使JSP写起来更加简单。

它提供了在 JSP 中简化表达式的方法。它是一种简单的语言,基于可用的命名空间(PageContext 属性)、嵌套属性和对集合、操作符(算术型、关系型和逻辑型)的访问符、映射到 Java 类中静态方法的可扩展函数以及一组隐式对象。

3).Razor

这里对比的是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()
该方法返回该区域设置的语言的三个字母的缩写。

.NET C#与Java比较——Servlet的更多相关文章

  1. Ed Burns谈HTTP/2和Java EE Servlet 4规范

    在2015年JavaLand大会上,Ed Burns展示了Java EE Servlet 4.0规范(JSR 369)的概要,演讲的重点在于Java EE平台对HTTP/2的支持.HTTP/2旨在解决 ...

  2. 用Delphi的TIdHttp控件发起POST请求和Java的Servlet响应

    http://blog.csdn.net/panjunbiao/article/details/8615880   用Delphi的TIdHttp控件发起POST请求和Java的Servlet响应

  3. 如何使用Java、Servlet创建二维码

    归功于智能手机,QR码逐渐成为主流,它们正变得越来越有用.从候车亭.产品包装.家装卖场.汽车到很多网站,都在自己的网页集成QR码,让人们快速找到它们.随着智能手机的用户量日益增长,二维码的使用正在呈指 ...

  4. java之servlet入门操作教程一续

    本节主要是在java之servlet入门操作教程一  的基础上使用myeclipse实现自动部署的功能 准备: java之servlet入门操作教程一 中完成myFirstServlet项目的创建: ...

  5. JSP、Java和Servlet获取当前工程的路径

    JSP.Java和Servlet获取当前工程的路径: 1.JSP中取得路径: 以工程名为TEST为例: (1)得到包含工程名的当前页面全路径:request.getRequestURI()结果:/TE ...

  6. 【转】如何使用Java、Servlet创建二维码

    归功于智能手机,QR码逐渐成为主流,它们正变得越来越有用.从候车亭.产品包装.家装卖场.汽车到很多网站,都在自己的网页集成QR码,让人们快速找到它们.随着智能手机的用户量日益增长,二维码的使用正在呈指 ...

  7. (转)如何使用Java、Servlet创建二维码

    归功于智能手机,QR码逐渐成为主流,它们正变得越来越有用.从候车亭.产品包装.家装卖场.汽车到很多网站,都在自己的网页集成QR码,让人们快速找到它们.随着智能手机的用户量日益增长,二维码的使用正在呈指 ...

  8. java的servlet执行过程是怎么样的?

    java的servlet执行过程是怎么样   答: Servlet执行过程:程序第一次访问,会调用servlet的init()方法初始化(只执行一次),每次程序执行都会根据请求调用doGet()或者d ...

  9. Java Web Servlet知识点讲解(一)

    一.Web应用架构 如图所示: HTTP协议:一个简单的请求一响应协议,通常运行在TCP之上,它指定了客户端可能发送给服务器什么样的信息以及得到什么样的响应. JDBC:Java语言中用来规范客户端程 ...

  10. java+jsp+servlet实现分页

    web.xml配置: <servlet> <servlet-name>abc</servlet-name> <servlet-class>test.pa ...

随机推荐

  1. 调用Lua脚本print(xxx)报attempt to call a nil value (global 'print')错误

    在自己程序里调用Lua脚本print(xxx) 报出attempt to call a nil value (global 'print')错误 解决方法: luaopen_base(L); 或者 l ...

  2. database homework3

    查询所有大于60分的学生的姓名和学号 (DISTINCT: 去重) mysql> select student.sname,student.sid,score.number from stude ...

  3. JasperStudio study..

    https://blog.csdn.net/shiyun123zw/article/details/79166448

  4. react-jd-index

    看见一些代码的产物,会觉得非常的漂亮~感谢无私开源的程序员们~你们是最可爱的人儿~~ //index.jsx require('./app/lib/common.css'); import React ...

  5. PHP验证码文件类

    转自:http://www.blhere.com/1165.html 12345678910111213141516171819202122232425262728293031323334353637 ...

  6. initwithcoder和 initwithframe 区别?

    每个ios开发者对loadView和viewDidLoad肯定都很熟悉,虽然这两个函数使用上真的是非常简单,但是和类似的initWithNibName/awakeFromNib/initWithCod ...

  7. VS中,卸载,移除,删除项目的区别

    不说话,上图.

  8. Libevent:5events相关

    Libevents的基本操作单元是event,每一个event代表了一些条件的集合,这些条件包括: 文件描述符已经准备好读或写 文件描述符正在变为就绪,准备好读或写(仅限于边沿触发) 超时事件 信号发 ...

  9. 阿里云oss上传图片报错,The OSS Access Key Id you provided does not exist in our records.解决方法

    vue项目 1.安装OSS的Node SDK npm install ali-oss --save 2.参考官方提示https://help.aliyun.com/document_detail/11 ...

  10. oracle获取中文出现乱码问题解决

    首先搞清楚字符集和字符编码概念,了解oracle字符集原理,请参考一位大神的讲解: ref:http://blog.csdn.net/dbanote/article/details/9158367#c ...