Servlet学习Word格式文档下载.docx
《Servlet学习Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Servlet学习Word格式文档下载.docx(30页珍藏版)》请在冰豆网上搜索。
∙是一个软件:
能够运行Java项目的软件
∙和浏览器相对应、平级
3.举例
∙Tomcat
∙JBoss
∙WebLogic
∙WebSphere
四、如何使用tomcat
1.单独使用
1)配置JAVA_HOME
∙tomcat依赖于Java
2)下载及安装
∙在apache官网下载
∙直接解压缩(释放)即可,这是绿色免安装软件
3)启动tomcat
∙Linux:
打开/tomcat/bin目录,输入./startup.sh
∙window:
打开/tomcat/bin目录,双击startup.bat
给目录加权限:
chmod+x*sh
4)访问tomcat
∙打开浏览器,输入http:
//localhost:
8080
5)关闭tomcat
打开/tomcat/bin目录,输入./shutdown.sh
∙windows:
打开/tomcat/bin目录,双击shutdown.bat
2.用Eclipse管理tomcat(开发时)
∙配置失败需要重来:
∙window->
preference->
server->
runtime
∙选择tomcat点击remove
∙Eclipse左侧点击Servers项目将其删除
五、Servlet开发步骤
1.创建WEB项目
∙WEB项目有标准的WEB目录:
∙webapp/WEB-INF/web.xml
2.导入jar包
1)用maven搜javaee
∙在搜索结果中选择javaee-api.jar
2)使用tomcat内置的jar包
∙右键项目->
properties->
targetedruntimes->
勾选tomcat->
apply
3.开发Servlet
∙继承于HttpServlet
∙间接实现了Servlet接口(sun的规范)
4.配置Servlet
∙在web.xml中加以配置
5.部署项目
∙在Servers下点击tomcat
∙右键点击AddandRemove
∙弹出框中将项目从左侧移动到右侧
∙启动tomcat
部署:
就是拷贝
6.访问Servlet
∙http:
8080/servlet1/ts
六、代码执行过程及错误
补充
一、端口占用错误
1.出现问题的情况
∙报错:
Addressalreadyinuser,JVM_BIND:
2.原因及解决方案
1)tomcat启动了2次,造成端口冲突
∙打开/tomcat/bin目录,执行shutdown命令,强制关闭它
2)其他软件占用了此端口(Oracle)
∙修改tomcat的端口
∙打开tomcat配置文件server.xml
∙在65行修改port="
8080"
,建议改为8088、8089等
∙注意:
关闭tomcat时修改,然后重新启动
在Servers项目下可以找到server.xml配置文件
一、HTTP协议
1.什么是HTTP协议
∙就是一个规范(w3c)
∙规定了:
浏览器和服务器如何通信及数据格式
2.如何通信
∙建立连接
∙发送请求
∙接收响应
∙关闭连接
3.数据格式
1)请求数据(浏览器向服务器发送的数据)
∙请求行:
请求的基本信息
∙消息头:
请求数据的描述信息
∙实体内容:
请求的业务数据
2)响应数据(服务器向浏览器发送的数据)
∙状态行:
响应的基本信息
响应数据的描述信息
响应的业务数据
4.对开发的要求
1)不需要管的地方
∙通信的过程已经由浏览器和服务器实现了
∙请求数据的组装由浏览器实现了
∙响应数据的组装由服务器实现了
2)需要处理的地方
∙请求的业务数据由开发者提供
∙响应的业务数据由开发者提供
使用request处理请求数据,使用response处理响应数据
二、注册案例
三、Servlet运行原理
四、请求方式
1.什么是请求方式
∙浏览器向服务器发送数据的方式
∙包括很多种方式,需要掌握的是GET和POST
2.GET和POST方式的区别
1)GET
∙采用路径传参,参数在传递过程中可见(地址栏)
∙隐私性差
∙传参能力有限,只能传少量参数
∙所有的请求默认都是GET请求
2)POST
∙采用实体内容传参,参数在传递过程中不可见
∙隐私性好
∙实体内容专门用来传参,大小不受限制
∙在form上加method="
post"
3.如何选择请求方式
∙一般查询时使用GET请求,因为查询条件一般比较少
∙一般保存时使用POST请求,因为保存的数据一般较多
五、乱码解决方案
六、案例
1.查询员工
2.增加员工
1.什么是JavaBean
∙满足如下规范的类:
∙有package
∙有默认构造器
∙实现序列化接口
∙有get/set方法
一、重定向
1.重定向在增加员工中的应用
response.sendRedirect(Stringurl);
2.重定向的作用及原理
在重定向的过程中,影响浏览器做出动作的关键点即响应中的状态码及Location这个消息头。
302状态就像一道命令一样,使得浏览器做出新的一次请求,而请求的地址会从头信息中查找。
由于这个新的请求动作是由浏览器发出的,所以浏览器的地址栏上的地址会变成Location消息头中的地址。
二、路径
1.路径是什么
2.如何获取路径
∙项目名:
req.getContextPath()
∙Servlet路径:
req.getServletPath()
∙绝对路径:
req.getRequestURI()
∙完整路径:
req.getRequestURL()
3.URI(UniformResourceIdentifier)和URL(UniformResourceLocator)的区别
1)狭义的理解(Java项目)
∙URI(统一资源标识符)是绝对路径,而URL是完整路径
∙URL(全球资源定位器)包含了URI
2)广义的理解(Web项目)*
∙URI是资源的名字
∙URL是资源的真名
∙URI包含了URL
真名只有一个,名字可以有多个
4.Servlet访问路径的配置方案
1)精确匹配(/hello)
∙只有这一个路径可以访问此Servlet
∙此Servlet只能处理一个请求
2)通配符(/*)
∙所有的路径都可以访问此Servlet
∙此Servlet能处理所有请求
3)后缀(*.abc)
∙所有以abc为后缀的路径都可以访问此Servlet
∙此Serlvet能处理多个请求
4)用1个Servlet处理多个请求的方案
5)通配符和后缀的典型应用场景
三、Servlet生命周期
Servlet容器如何创建Servlet对象、如何为Servlet对象分配、准备资源、如何调用对应的方法来处理请求以及如何销毁Servlet对象的整个过程即Servlet的生命周期。
1.生命周期相关方法的调用顺序
###阶段一、实例化
<
servlet>
<
servlet-name>
someServlet<
/servlet-name>
servlet-class>
test/SomeServlet<
/servlet-class>
load-on-startup>
1<
/load-on-startup>
/servlet>
servlet-mapping>
url-pattern>
/*<
/url-pattern>
/servlet-mapping>
配置文件中的load-on-startup节点用于设置该Servlet的创建时机。
当其中的值大于等于0时,表示容器在启动时就会创建实例小于0时或没有指定时,代表容器在该Servlet被请求时再执行创建正数的值越小,优先级越高,应用启动时就越先被创建。
###阶段二、初始化
在初始化阶段,init()方法会被调用。
这个方法在javax.servlet.Servlet接口中定义。
其中,方法以一个ServletConfig类型的对象作为参数。
ServletConfig对象由Servlet引擎负责创建,从中可以读取到事先在web.xml文件中通过节点配置的多个name-value名值对。
ServletConfig对象还可以让Servlet接受一个ServletContext对象。
一般情况下,init方法不需要编写,因GenericServlet已经提供了init方法的实现,并且提供了getServletConfig方法来获得ServletConfig对象。
注:
init方法只被执行一次。
###阶段三、就绪
Servlet被初始化以后就处于能够响应请求的就绪状态。
每个对Servlet的请求由一个ServletRequest对象代表,Servlet给客户端的响应由一个ServletResponse对象代表。
当客户端有一个请求时,容器就会将请求与响应对象转给Servlet,以参数的形式传给service方法。
service方法由javax.servlet.Servlet定义,由具体的Servlet实现。
###阶段四、销毁
Servlet容器在销毁Servlet对象时会调用destroy方法来释放资源。
通常情况下Servlet容器停止或者重新启动都会引起销毁Servlet对象的动作,但除此之外,Servlet容器也有自身管理Servlet对象的准则,整个生命周期并不需要人为进行干预。
2.config和context的联系和区别
3.ServletConfig
4.ServletContext
一、context的特殊用法
1.使用场景
∙之前使用config和context读取的都是web.xml中配置的常量
∙有时候我们需要存取的可能是变量
∙context支持存取变量,给多个Servlet共用
2.案例
∙给软件做一个统计流量(访问量)的功能
∙流量是一个变量,无论访问哪个Servlet,流量+1
二、线程安全问题
1.什么时候会出现线程安全问题
∙多人同时修改同一份数据时有此问题
∙局部变量存储在栈里,每个线程有自己的栈帧,没有问题
∙成员变量存储在堆里,所有线程共享这个数据,可能有问题
多个人同时修改成员变量
2.如何解决线程安全问题
∙加锁
三、HttpServlet介绍(了解)
∙sun这样设计是为了让开发者有更多选择的空间
∙制定的这种规范在实际使用中发现,并不会扩展为HTTP协议之外,所以有了过度设计的缺陷,也为在编写HTTP协议的Web应用时添加了一些不必要的操作。
四、JSP
JSP(JavaServerPage)是Sun公司制定的一种服务器端动态页面技术的组件规范,以“.jsp”为后缀的文件中既包含HTML静态标记用于表现页面,也包含特殊的代码,用于生成动态内容。
JSP作为简化Servlet开发的一种技术,实质上最终依然要转变为Servlet才可能运行,只不过这个转变过程由Servlet容器来完成。
所以遵循JSP的编写规范才能使得JSP转变为需要的Servlet。
JSP页面中的Java代码
###JSP表达式(方便输出)
%=3+5%>
%=add()%>
%=xx.getName()%>
%=xx.getName()+“abc”%>
这种形式的Java代码在转译成Servlet时,会成为service()方法中使用out.print语句的输出。
out.print(3+5);
out.print(add());
out.print(xx.getName());
out.print(xx.getName()+“abc”));
###JSP小脚本(完成相对较长的逻辑运算)
table>
%
List<
User>
allUser=(List<
)request.getAttribute(“users“);
for(Useru:
allUser){
%>
tr>
td>
%=u.getId()%>
/td>
%=u.getName()%>
/tr>
}
/table>
publicvoidservice(…){
out.write(“<
”);
out.print(u.getId());
out.print(u.getName());
out.write(“<
}
###JSP声明(添加属性或方法)
%!
publicvoidfun(){
//…方法体
publicclassXXX_JSPextendsJSPBase{
publicvoidfun(){
//…方法体
publicvoidservice(……){
###JSP指令####page指令#####导包
%--导包--%>
%@pageimport=“java.util.*“%>
%@pageimport=“java.util.*,java.sql.*“%>
#####设置response.setContentType()方法的参数值
%--设置response.setConentType方法的参数值--%>
%@pagecontentType=“text/html;
charset=utf-8“%>
#####设置容器读取该文件时的解码方法
%--设置容器读取该文件时的解码方式--%>
%@pagepageEncoding=“UTF-8“%>
####include指令
%@includefile=“header.html”%>
JSP运行原理
隐含(内置)对象
什么是隐含对象
∙就是在JSP上可以直接使用的对象
∙这些对象是在service方法一开始就声明的
有哪些隐含对象
1)request
∙HttpServletRequest
2)response
∙HttpServletResponse
3)out
∙JSPWriter
∙等价于PrintWriter
4)config
∙ServletConfig
5)application
∙ServletContext
6)exception
∙Throwable
∙是JSP生成的Servlet所报的错
7)session
∙HttpSession
8)page
∙Object
∙相当于this
9)pageContext
∙PageContext
∙管理者,引用了其他8个隐含对象
总结
∙上述9个对象的名字是固定的
∙它们都可以在JSP上直接使用
使用的例子
%Stringuser=request.getParameter("
user"
);
%=request.getParameter("
)%>
一、开发模式
1.Model1
∙使用一个组件(Servlet/JSP)处理请求
∙缺点:
该组件将java和HTML高度耦合在一起
2.Model2(MVC)
∙使用2个组件协同处理请求
∙优点:
将java和HTML代码解耦
二、转发和重定向
1.它们的相同点
∙都是用来解决web组件之间的跳转问题
∙web组件:
Servlet/JSP
2.它们的区别
3.它们的一般使用场景
∙一般查询时从查询Servlet转发到查询JSP
∙一般增加、修改、删除(Servlet)后重定向到查询(Servlet)
三、EL和JSTL
1.作用
3.JSTL运行原理