Servlet
server applet,小服务程序/服务连接器,用Java编写的运行于服务器的程序,具有独立于平台和协议的特性,功能是交互式的浏览和生成数据,生成动态页面。
Servlet生命周期
实现过程
1.客户端向服务器发送请求
2.服务器初始化一个servlet,创建一个servlet实例
3.将客户端请求交由servlet处理
4.处理结果返回给服务器,服务器再发送客户端
生命周期
- 第一个HTTP请求委派到servlet容器
- servlet容器在调用service()之前加载servlet到内存
- 实例化init()一个实例对象
- service()根据请求调用不同方法doGet/doPost,回应请求生成动态页面返给服务器
- server关闭时调用servlet的destroy()回收资源。
server只初始化一次servlet实例,当服务器处理多个响应时,servlet容器启动多个线程调用service()方法。
因此,和OGI相比,具有以下优点:
- 开销小
- 响应快
- 可移植性好(Java编写)
- 功能强大
与JSP不同
JSP是servlet更完善的版本,换句话,servlet并不是完美的,servlet注重于business layer,而没有将presentation layer层分离开来,两层混杂。JSP虽然没有完成servlet不能完成的功能,但JSP将两层分离开来,和PHP,ASP一样属于镶套型,可以镶套在HTML中,同时JSP又引入Java bean,这样jsp中就可以只包含presentation layer的内容,将business layer交由Javabean处理,然后JSP通过调用实现两层融合。
这样的好处就是,当发生大量用户点击时,能够提高效率,纯script很容易达到功能上线。
所以说,先从servlet入手,在学习JSP,最后JavaBean。
Tomcat, Jetty, resin, Oracle Application server, WebLogic Server, Glassfish, Websphere, JBoss 等等。(提供了 Servlet 功能的服务器,叫做 Servlet 容器。对 web 程序来说,Servlet 容器的作用就相当于桌面程序里操作系统的作用,都是提供一些编程基础设施)
那么,为什么还用 JSP+BEAN?因为 Java 实在前途远大。操作系统群雄并起,应用软件的开发商必定要找一个通用开发语言进行开发,Java 一统天下的时机就到了。
简单分析了一下 JSP 和 Servlet 的区别和 Java Web 开发方面的发展。随着机器速度越来越快,Java 的速度劣势很快就可以被克服。
Servlet创建
Servlet API有两个包javax.servlet和javax.servlet.http
一般直接从javax.servlet.GenericServlt和javax.servlet.http.httpservlet继承创建一个自己的servlet类
然后再去web.xml里配置,再web.xml里注册和映射需要两个标签和,如下:
<servlet>
<!-- 当前servlet的名称 -->
<servlet-name>HelloServlet</servlet-name>
<!-- servlet所在的包名跟类名 -->
<servlet-class>com.helloservlet.hello.HelloWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<!-- 必须于上一个servlet标签中的名称保持一致 -->
<servlet-name>HelloServlet</servlet-name>
<!-- 这是你在浏览器上访问的地址,必须要提 /servlet/xxxx 格式,不然tomcat启动会报错-->
<url-pattern>/servlet/helloWorld</url-pattern>
</servlet-mapping>
JSP初始
JSP
Java server page,servlet的简化版,将表示和处理分开。在HTML插入代码。
实现原理
JSP的所有处理都在服务器端进行,在接到客户端请求后,根据request内容处理,或者根据实际需要将Request对象转发给由JSP文件所指定的其他的服务器端组件(如Servlet组件、JavaBean组件或EJB组件等)进行处理,得出的结果返回给客户端
运行机制
JSP-----翻译-------servelt(.java)------编译--------.class--------执行-------结果
语法
分为三种类型:
脚本语法:<%%>
编译器指令<%page import=" java.io.*"%>
动作语法<%jsp:include %> ,<%jsp: forword%>
脚本语法
- HTML注释<!-- -->
- JSP注释<%-- --%>
- 声明<%! 生明;%>声明只在本页有效,在声明时赋值,临时变量。
- 表达式
- 代码段
编译器指令
包含在<%@%>里
页面环境,配置。作用整个页面,也作用静态包含
page指令,不唯一
include指令
向当前页面静态插入一段HTML或JSP,会在JSP被解释为servlet时,引入被插入的片段,是一种静态包含,所谓静态包含:就是在解释为servlet之前把包含进来的文件一起整合为一个文件解释转换为一个servlet文件。
<%@include file=“url(相对)”%>
taglib指令
引入定制标签
动作语法
<jsp:include>:动态包含,和静态包含不同,动态包含是将包含页面的处理后的结果包含进来。
语法格式:
<jsp:include="{relativeURL|<%=expression%>}">
<jsp:param name="parameterName" value="{parameterValue|<%= expression %>}" />
[<jsp:param …/>]
</jsp:include>
<jsp:forword>:跳转一个动态页面,并可以向该页面传递含有用户请求的参request对象,用户无需点击鼠标,Java代码块控制跳转,地址栏地址不会改变。
<jsp:forward page={"relativeURL" | "<%= expression %>"} >
<jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" />
[<jsp:param … />]
</jsp:forward>
内置对象
大小写敏感,都由Java类生成,在服务器上根据情况自动生成
- session
- application
- request
- response
- out
- pageContest
- config
- page
- exception
表单确认
客户端确认,JS
响应快,减小服务器负担。兼容差
服务器端确认,JavaBean JSP
开销大,兼容性强,统一确认
JavaBean
是一个跨平台且可重复使用的软件组件。
特点:
- 都是public
- 有一个不带参数的构造方法
- 通过set设置属性,get获取属性。
引用JavaBean:<jsp:useBean id="" class=""/>
id指定Bean的对象名。class指定Bean的完成包名,说明了类型。
设置属性:<jsp:setProperty property="" name="" value="" param=""/>
<jps:setProperty name = “JavaBean实例名” property = “*”/>
<jsp:setProperty name = “JavaBean实例名” property = “JavaBean属性名” />
<jsp:setProperty name = “JavaBean实例名” property = “JavaBean属性名” value = “BeanValue”/>
<jsp:setProperty name = “JavaBean实例名” property = “propertyName” param = “request对象中的参数名”/>
name是Bean实例名,property是属性名,value是该属性的值。
value不可和param同时使用
获取属性值:<jsp:getProperty property="" name=""/>
总结
Integer类常用方法
- .ParseInt(String s)方法(将基本类型转换成字符串。)
- .toString(int i)
- .任何类型+"" 变成String类型(推荐使用)基本数据类型int转换成字符串