Servlet
1.介绍
servlet技术是在java ee出现之前就存在了,在开发动态网页中得到广泛的应用,直到现在的java ee项目中也是非常重要的,同时jsp也是在servlet的基础上发展起来的。
servlet(java服务器小程序)是用java编写的服务器程序,它的特点:
1.由服务器调用和执行
2.用java语言编写的
3.按照servlet规范开发
4.功能强大,可以完成几乎所有的网站功能
2.开发工具
普通的文本编辑器notepad,uedit32
集成开发工具jcreator,jbuilder,eclipse,editplus,netbean
3.servlet体系结构
4.开发servlet的三种方法
实现servlet接口
继承GenericServlet
继承HttpServlet(最常用的方法)
5.servlet的生命周期
servlet部署在容器里(我们使用的是Tomcat,也可是别的,比如jboss,weblogic。。。),它的生命周期由容器来管理。
servlet的生命周期分为以下几个阶段:
1.装载servlet,由相应的容器来完成
2.创建一个servlet实例
3.调用servlet的init()方法,该方法只会在第一次访问servlet时被调用一次
4.服务:调用servlet的service()方法,一般业务逻辑在这里处理,该方法在访问该servlet时,会被调用
5.销毁:调用servlet的destroy()方法,销毁该servlet实例,该方法在以下情况被调用:
a)tomcat重新启动
b)reload该webapps
c)重新启动电脑
6.开发流程
1.建立一个web站点
2.站点内引入Tomcat文件夹下lib文件夹里的servlet-api.jar
3.编写servlet
4.部署servlet
servlet编译后放在WEB-INF/classes下,注意package
在web.xml文件中添加如下代码:
<servlet>
<!—给servlet取名,可以随意取名-->
<servlet-name>hello</servlet-name>
<!—指明servlet的路径,就是servlet的包+类名-->
<servlet-class>com.nenu.Hello</servlet-class>
</servlet>
<servlet-mapping>
<!—给servlet取名,可以随意取名-->
<servlet-name>hello</servlet-name>
<!—浏览器中输入的url,可以随意取名-->
<url-pattern>/hello<url-pattern>
</servlet-mapping>
5.启动Tomcat,访问你的servlet,在浏览器的地址栏中输入:http://127.0.0.1:8080/myWebSite/hello回车就可以看到servlet的输出
三个例子
例1:实现servlet接口
Hello.java
//实现servlet接口
package com.nenu;
import javax.servlet.*;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
import java.io.*;
public class Hello implements Servlet{
//init只执行一次
public void init(ServletConfig parm1) throws ServletException {
System.out.println("init");
}
public ServletConfig getServletConfig() {
return null;
}
//service负责业务逻辑
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
System.out.println("service");
//处理中文
res.setContentType("text/html; charset=gbk");
PrintWriter pw=res.getWriter();
pw.println("Hello,实现servlet接口.");
}
/**
* Method getServletInfo
*
*
* @return
*
*/
public String getServletInfo() {
// TODO: Add your code here
return null;
}
/**
* Method destroy
*
*
*/
public void destroy() {
// TODO: Add your code here
System.out.print("destroy");
}
}
web.xml中
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>com.nenu.Hello</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>
访问:http://localhost:8080/MyServlet/Hello
例2:继承GenericServlet
HelloGen.java
继承GenericServlet实现servlet
package com.nenu;
import javax.servlet.GenericServlet;
import java.io.*;
import javax.servlet.*;
public class HelloGen extends GenericServlet {
//重写service方法
public void service(ServletRequest req, ServletResponse res) {
try{
PrintWriter pw=res.getWriter();
pw.println("Hello, GenericServlet");
}
catch(Exception ex){
ex.printStackTrace();
}
}
}
web.xml
<servlet>
<servlet-name>HelloGen</servlet-name>
<servlet-class>com.nenu.HelloGen</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloGen</servlet-name>
<url-pattern>/HelloGen</url-pattern>
</servlet-mapping>
例3: 继承HttpServlet(最常用的方法)
HelloHttp.java
//继承HttpServlet实现servlet
package com.nenu;
import javax.servlet.*;
import java.io.*;
import javax.servlet.http.*;
public class HelloHttp extends HttpServlet {
//处理get请求
public void doGet(HttpServletRequest req, HttpServletResponse res){
this.doPost(req,res);
}
//处理post请求
public void doPost(HttpServletRequest req,HttpServletResponse res){
try{
PrintWriter pw=res.getWriter();
pw.println("hello, servletHttp");
}
catch(Exception ex){
ex.printStackTrace();
}
}
}
web.xml
<servlet>
<servlet-name>HelloHttp</servlet-name>
<servlet-class>com.nenu.HelloHttp</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloHttp</servlet-name>
<url-pattern>/HelloHttp</url-pattern>
</servlet-mapping>