因项目需要,今天开始学习Servlet。
Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
下面开始讲述了开发servlet的流程,因为利用eclipse开发servlet非常容易但它隐藏了很多细节,所以这里先使用JCreator来开发。
开发流程:
第一步:创建一些必须的文件夹和文件
在%TOMCAT_HOME%webapps下新建一个myWebSite文件夹用来存放我们的工程文件,在此文件夹中新建WEB-INF文件夹,并在WEB-INF文件夹下新建classes和lib子文件夹(classes用来存放Java的类文件,lib用来存放相关的库文件),并新建一个命名为web.xml的文件(web.xm;是部署文件)。
在JCreator中新建一个Java类输入下面代码并编译
/** * @(#)Hello.java * *实现servlet的第一种方式(使用实现servlet接口的方式) * @author * @version 1.00 2017/2/22 */ package com.chongqing; import javax.servlet.*; import java.io.*; public class Hello implements Servlet{ //该函数用于初始化该servlet(类似于类的构造函数) //该函数只会被调用一次(当用户第一次访问该servlet是被调用) public void init(ServletConfig parm1) throws ServletException{ System.out.println ("init it"); } public ServletConfig getServletConfig(){ return null; } //这个函数用于处理业务逻辑,程序员应当把业务逻辑代码写在这里 //当用户没访问servlet时都会调用 //req:用于获得客户端(浏览器)时的信息 //res:用于向客户端(浏览器)返回信息 public void service(ServletRequest req,ServletResponse res ) throws ServletException{ System.out.println ("service it"); try { //从res中得到PrintWriter PrintWriter pw = res.getWriter(); pw.println("Hello World!"); }catch (Exception ex) { ex.printStackTrace(); } } public String getServletInfo(){ return ""; } //销毁servlet实例(释放内存) //1.reload该serlvet(webapp)2.关闭Tomcat 3.关机 public void destroy(){ System.out.println ("destroy!"); } }
在web.xml文件中输入下面代码
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app > <description> Servlet and JSP Examples. </description> <display-name>Servlet and JSP Examples</display-name> <!-- JSPC servlet mapping start --> <servlet> <!--给你的servlrt取名,任意的--> <servlet-name>hello</servlet-name> <!--指明servlet的路径,(包名+类名)--> <servlet-class>com.chongqing.Hello</servlet-class> </servlet> <servlet-mapping> <!--给你的servlrt取名,任意的--> <servlet-name>hello</servlet-name> <!--这是在浏览器中输入的访问该servlet的url--> <url-pattern>/zero</url-pattern> </servlet-mapping> <!--JSPC servlet mappings end --> </web-app>第四步:启动Tomcat访问servlet,用浏览器输入网址http://127.0.0.1:8080/myWebSite/zero即可看到显示的内容
可以看出init方法只在被创建的时候调用了一次,service方法则被调用了多次。
下面是实现servlet的另外两种方式
/** * @(#)HelloGen.java * *开发servlet的第二种方法(继承GenericServlet的方式) * @author * @version 1.00 2017/2/22 */ package com.chongqing; import javax.servlet.GenericServlet; import java.io.*; public class HelloGen extends GenericServlet { //重写service方法即可 public void service(ServletRequest req,ServletResponse res){ //返回HelloWorld!generic try { PrintWriter pw = res.getWriter(); pw.println("HelloWorld!generic"); } catch (Exception ex) { ex.printStackTrace(); } } }
/** * @(#)HelloGen.java * *开发servlet的第三种方法(继承HttpServlet的方式) * @author * @version 1.00 2017/2/22 */ package com.chongqing; import javax.servlet.http.*; import java.io.*; public class HelloHttp extends HttpServlet { //处理get请求 public void doGet(HttpServletRequest req,HttpServletResponse res){ // try { PrintWriter pw = res.getWriter(); pw.println("HelloWorld!Http"); } catch (Exception ex) { ex.printStackTrace(); } } public void doPost(HttpServletRequest req,HttpServletResponse res){ this.doGet(req,res); } }
在web.xml添加新的Servlet部署就可以了
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app > <description> Servlet and JSP Examples. </description> <display-name>Servlet and JSP Examples</display-name> <!-- 第一个Servlet --> <servlet> <!--给你的servlrt取名,任意的--> <servlet-name>hello</servlet-name> <!--指明servlet的路径,(包名+类名)--> <servlet-class>com.chongqing.Hello</servlet-class> </servlet> <servlet-mapping> <!--给你的servlrt取名,任意的--> <servlet-name>hello</servlet-name> <!--这是在浏览器中输入的访问该servlet的url--> <url-pattern>/zero</url-pattern> </servlet-mapping> <!-- 第二个Servlet --> <servlet> <!--给你的servlrt取名,任意的--> <servlet-name>hellogen</servlet-name> <!--指明servlet的路径,(包名+类名)--> <servlet-class>com.chongqing.HelloGen</servlet-class> </servlet> <servlet-mapping> <!--给你的servlrt取名,任意的--> <servlet-name>hellogen</servlet-name> <!--这是在浏览器中输入的访问该servlet的url--> <url-pattern>/hellogen</url-pattern> </servlet-mapping> <!-- 第三个Servlet --> <servlet> <!--给你的servlrt取名,任意的--> <servlet-name>hellohttp</servlet-name> <!--指明servlet的路径,(包名+类名)--> <servlet-class>com.chongqing.HelloHttp</servlet-class> </servlet> <servlet-mapping> <!--给你的servlrt取名,任意的--> <servlet-name>hellohttp</servlet-name> <!--这是在浏览器中输入的访问该servlet的url--> <url-pattern>/hellohttp</url-pattern> </servlet-mapping> <!--JSPC servlet mappings end --> </web-app>