上周老师开始讲了servlet进行开发,前面是jsp+前端+javaBean模式。现在又多了个servlet技术,jsp是在servlet基础上发展出来的技术。
servlet生命周期,很多博客都写的很好,http://www.cnblogs.com/cuiliang/archive/2011/10/21/2220671.html
1.实例化(构造函数)
2.初始化
3.服务
4.销毁。
开发servlet有三种方法:
A.实现servlet接口
B.继承GenericServlet
C.继承HttpServlet
servlet3.0之后还可以通过注解开发servlet(JAVAEE 6.0)我学习的第一个servlet。
一:首先采用实现servlet接口方式:
Hell.java:
//这是我的第一个servlet,实现servletjiekou
package com.ncu;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class Hello implements Servlet{
/* (non-Javadoc)
* @see javax.servlet.Servlet#destroy()
*/
@Override
public void destroy() {
//销毁servlet,释放内存
System.out.println("destroy");
//1.reload 该servlet(webApps)
//2.关闭tomcat
}
/* (non-Javadoc)
* @see javax.servlet.Servlet#getServletConfig()
*/
@Override
public ServletConfig getServletConfig() {
//
return null;
}
/* (non-Javadoc)
* @see javax.servlet.Servlet#getServletInfo()
*/
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)
*/
@Override
public void init(ServletConfig config) throws ServletException {
//该函数用于初始化servlet,类似于类的构造函数,该函数只会被调用一次
//该函数只会被调用一次,(当用户第一次访问该servlet时被调用)
System.out.print("initialize it!!!");
}
/* (non-Javadoc)
* @see javax.servlet.Servlet#service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
*/
@Override
//req:用于获得客户端(浏览器)信息
//res:用于向客户端返回信息
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
// 该函数用于处理业务逻辑
//程序员应当把业务逻辑代码写在这里
//从res中得到printwriter
System.out.println("service it");
PrintWriter pw=res.getWriter();
pw.println("hello world");
}
}
2.配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<!-- 给你的servlet取名,任意的 -->
<servlet-name>hello</servlet-name>
<!-- 指明servlet的路径(包名+类名 -->
<servlet-class>com.ncu.Hello</servlet-class>
</servlet>
<servlet-mapping>
<!-- 这个servlet名必须和映射的一致 -->
<servlet-name>hello</servlet-name>
<!-- 这是在浏览器中输入的访问该servlet的url -->
<url-pattern>/nicolas</url-pattern>
</servlet-mapping>
</web-app>
然后部署应用后,启动tomcat服务,进行调试运行:
第一次被访问后,就会执行init()打印输出initialize。只会打印一次,接着不断刷新,刷新一次就执行一个service方法,打印一次service it
访问的路径就是我们在web。xml的 <url-pattern>/nicolas</url-pattern>
http://localhost:8086/servletDemo/nicolas
注意/nicolas是任意的。
然后servlet的销毁发生在reload或关闭tomcat时。
下面reload一下这个servletDemo应用,进入tomcat的管理应用页面(用户和密码一般配置为user:tomcat pwd:s3cret)
二:采用继承GenericServlet来开发servlet,只要重写service方法即可。
HelloServlet.java:
//这是第二种开发servlet的方法
//通过继承GenericServlet开发
package com.ncu;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class HelloServlet extends GenericServlet{
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
// TODO Auto-generated method stub
//重写service方法
try{
PrintWriter pw=res.getWriter();
pw.print("Hello ,GenericServlet");
}catch(Exception e){
e.printStackTrace();
}
}
}
web.xml配置这个servlet:
</servlet-mapping>
<servlet>
<servlet-name>helloservlet</servlet-name>
<servlet-class>com.ncu.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloservlet</servlet-name>
<url-pattern>/helloservlet</url-pattern>
</servlet-mapping>
访问:http://localhost:8086/servletDemo/helloservlet 调试运行:
三:
通过继承HttpServlet开发servlet
通过重写doGet,doPost方法。这是目前用的最多的一种方法。
helloHttpServlet.java文件:
package com.ncu;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class helloHttpServlet extends HttpServlet{
/* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#doDelete(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
protected void doDelete(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.doDelete(req, resp);
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
// super.doGet(req, resp);
//处理get请求
try
{
PrintWriter rw=resp.getWriter();
rw.print("HttpServlet doGet()!!!");
}catch(Exception e){
e.printStackTrace();
}
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#doHead(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
protected void doHead(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.doHead(req, resp);
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#doOptions(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
protected void doOptions(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.doOptions(arg0, arg1);
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.doPost(req, resp);
//处理post请求
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#doPut(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
protected void doPut(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.doPut(req, resp);
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#doTrace(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
protected void doTrace(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.doTrace(arg0, arg1);
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#getLastModified(javax.servlet.http.HttpServletRequest)
*/
@Override
protected long getLastModified(HttpServletRequest req) {
// TODO Auto-generated method stub
return super.getLastModified(req);
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#service(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.service(arg0, arg1);
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
*/
@Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.service(arg0, arg1);
}
}
web。xml配置这个httpservlet:
<servlet>
<servlet-name>helloHttpServlet</servlet-name>
<servlet-class>com.ncu.helloHttpServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloHttpServlet</servlet-name>
<url-pattern>/helloHttpServlet</url-pattern>
</servlet-mapping>
运行截图: