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>