1 Servlet 概述
1)Java技术细节分成三个子平台:
Java SE:(Standard Edition)标准版的Java平台,基础平台为下面两个平台提供底层的技术支持,同时桌面程序的编写也用此平台。
Java EE:(Enterprise Edition)Java的企业版平台,开发大型的企业级应用,包含java web开发。
Java ME:(Micro Edition)是为机顶盒、移动电话和PDA之类嵌入式消费电子设备提供的Java语言平台,包括虚拟机和一系列标准化的Java API。
2)一个Servlet就是一个标准的服务器端应用程序,它可以执行商务逻辑,处理HTTP请求。
需要运行在服务器端;需要Web容器的支持;Java编写
javax.servlet.Servlet 核心接口,定义了servlet中必须要实现的接口。我们一般不直接实现这个接口,而是继承实现这个接口的类。
javax.servlet.GenericServlet 已经实现了Servlet接口的类
javax.servlet.http.HttpServlet 我们一般选择这个类继承,其中的doGet和doPost方法是最重要的。
3)Servlet处理流程
(3.1)客户端使用浏览器提交对Servlet的调用的Get或者Post请求。通过Servlet的调用url地址(get请求)或者先请求HTML页面填表单(post请求)提交请求。
(3.2)服务器接到请求之后,如果该Servlet是第一次被调用,这个类将被加载并实例化这个Servlet,生成对象。
(3.3)服务器调用该Servlet对象的service()方法
(3.4)Servlet产生动态回复内容,放在response中
(3.5)服务器发送回复内容给客户端的浏览器
2 手工编写Servlet
具体步骤:
1)编写Servlet源程序,生成class文件
首先,新建java文件,构建一个继承自HttpServlet的类,如HelloServlet,在此类中实现
doGet(HttpServletRequest request,HttpServletResponse response) 和/或
doPost(HttpServletRequest request,HttpServletResponse response)方法。
通过上面两种方法实现用户访问的结果。然后,编译生成class文件。
2)建立Web应用目录结构
新建Web应用目录目录,如hello,在里面建WEB-INF目录,然后再在WEB-INF目录中建classes目录和lib目录。calsses目录用来放单个的类文件,而将类组成的类库jar文件放入lib中。
3)编写web.xml文件
在WEB-INF目录下新建web.xml文件(注意这里的目录结构都是指定的,一定不能乱放,包括classes目录和lib目录)。web.xml的开头的内容均为一些xml等的声明,比较麻烦易出错,最好直接拷贝现有的web.xml文件中的内容。然后在<web-app> </web-app>中间添加对servlet的声明和映射配置。
<servlet>
<servlet-name>hello</servlet-name> //当前servet的名字,任意的
<servlet-class>com.hello.HelloServlet<servlet-name>//此servlet对应的类,包括包明,不包括后缀名
</servlet>
<servlet-mapping> //加映射,通过映射路径访问servlet
<servlet-name>hello</servlet-name> //要映射的servlet名字
<url-pattern>/myhello</url-pattern> //通过哪个路径访问,访问路径
</servlet-mapping>
4)运行Servlet
将我们第一步编写完的类,连同它的包名(目录)一起copy到hello的classes目录下;然后把整个hello目录下的内容(这是一个web应用)移到到tomcat的webapps目录下。启动tomcat,启动浏览器,输入url为当前servlet的地址(http://localhost/hello/myhello ,其中localhost指本机,如果是其他远程机器输入ip地址;第一个hello为应用的上下文,即应用的名字;myhello为映射路径,与<url-pattern>中间内容一致即可,是任意的),调用这个servlet。
3 通过Eclipse编写Servlet(Eclipse本身是不带servlet能力的需要装插件MyEclipse)
具体步骤:
首先对Eclipse进行配置,使通过Eclipse就能够启动和停止tomcat的运行。MyEclipse本身自带了一个Tomcat的服务器和数据库,但是不太好用。可以首先去掉Eclise自带的Tomcat:选择Restart server按钮下的Tomcat,选configure,使之disable;然后选择Configure Server添加我们自己的Tomcat6.x。
1)新建Web Project
新建Web Project(注意不是Web Server Project)如webProject1。建好之后会自动构建目录结构,源程序放在src目录下。
2)新建Servlet文件
然后在此工程中新建servlet文件,servlet向导会自动构建相应的类如FristServlet框架和web.xml文件,只需选择要类名、实现的方法名,目录名之类的就可以了,很方便!
3)部署Web应用程序
选择Project Deployments,选要部署的project,然后点击Add按钮;然后进入New Ddeployment页面,选择server、Deploy type,Deploy Location。
4)运行输出
启动Tomcat ,启动浏览器输入地址回车,即向servlet发送Get请求,调用doGet()方法,将相关信息封装在HttpServletRequest 对象中。
5)Servlet文件的调试
通过在浏览器中输入URl调试
4 Servlet的生命周期
和生命周期有关的方法:是服务器调用,我们应用程序不应该掉用
init()方法
service()方法:我们实现的doPost(),doget()方法就是通过service()方法调用的
destroy()方法
5 Servlet获取初始化的参数
具体步骤
1)新建GetInitParameterServlet类
在web.xml中增加:
<servlet>
<servlet-name>GetInitParameterServlet</servlet-name>
<servlet-class>com.jing.webProject1.GetInitParameterServlet</servlet-class>
<init-param>
<param-name>repeat</param-name>
<param-value>10</param-value>
</init-param>
</servlet>
在GetInitParameterServlet类中的doGet()方法中用Integer.parseInt(getInitParameter("repeat"))得到repeat的值,注意此方法的输出是字符串,这里应用Integer.parseInt()方法将其转化为整数。
2)运行输出
注意:关于中文乱码问题应在doGet()方法中修正response.setContentType("text/html charset = utf-8");
6 Servlet 获得服务器的运行参数(服务器的ip地址,服务器名,端口号,协议名,协议版本,请求方式,请求的URL,上下文路径,Servlet路径)
步骤:
1)新建GetServletInfoServlet类
通过doGet()或doPost()方法的第一个参数HttpServletRequest request对象获取:
request.getServerName()获取服务器的名字
request.getProtocol()获得协议名
request.getRemoteAddr()获得服务器的ip地址…
2)运行输出
7 Servlet 获得头信息(根据http协议用户发送过来的请求有一个头信息,包含当前访问者的浏览器型号、版本,编码格式操作系统等等信息)
通过doGet()或doPost()方法的第一个参数HttpServletRequest request对象获取:
request.getHeaderNames() 返回参数的名字作为下面函数的参数传入
request.getHeader(String str) 返回参数对应的值