java servlet是一个基于java技术的web组件,运行在服务器端,由servlet容器所管理,用于生成动态的内容。servlet是平台独立的java类,编写一个servlet实际上就是按照servlet规范编写一个java类。
servlet运行需要一个运行环境,即需要一个servlet容器,这里我们使用tomacat。tomcat作为一个web服务器,具有处理html页面的功能,另外它还是一个servlet和jsp容器。
实现一个helloword例子。
推荐课程:java教程。
方式一:通过实现servlet接口来编写servlet类,需要实现接口中定义的5个方法,代码如下:
package day_052102;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;/* 这里通过实现servlet接口来编写一个简单的servlet */public class servletdemo implements servlet{ public void init(servletconfig config) throws servletexception { } public servletconfig getservletconfig() { return null; } public string getservletinfo() { return null; } public void destroy() { } public void service(servletrequest req, servletresponse res) throws servletexception, ioexception { printwriter out=res.getwriter(); out.print(hello world!); out.close(); }}
然后进行web.xml的配置,代码如下:
<servlet> <servlet-name>servletdemo</servlet-name> <servlet-class>day_052102.servletdemo</servlet-class> </servlet> <servlet-mapping> <servlet-name>servletdemo</servlet-name> <url-pattern>/servletdemo</url-pattern> </servlet-mapping>
点击运行按钮,启动tomacat服务器,然后在浏览器中输入http://localhost:8080/day_052102/servletdemo,即可进行实现页面显示hello world的示例。结果如下。
方式二:继承抽象类genericservlet,该类定义了一个通用的servlet。
public abstract class genericservlet implements servlet, servletconfig, java.io.serializable
代码示例实现hellword如下:
public class genericservletdemo extends genericservlet{ @override public void service(servletrequest req, servletresponse res) throws servletexception, ioexception { printwriter out=res.getwriter(); out.println(hello world!); out.close(); }}
方式三:通过继承抽象的httpservlet类,此类继承于genericservlet类。
ps:httpservlet类中没有抽象的方法。这个类重写了service方法,它会根据请求的方式调用doget或者doget方法,部分源码如下:
protected void service(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception { string method = req.getmethod(); if (method.equals(method_get)) //当请求方式为get时,调用doget方法 { long lastmodified = getlastmodified(req); if (lastmodified == -1) { // servlet doesn't support if-modified-since, no reason // to go through further expensive logic doget(req, resp); } else { long ifmodifiedsince; try { ifmodifiedsince = req.getdateheader(header_ifmodsince); } catch (illegalargumentexception iae) { // invalid date header - proceed as if none was set ifmodifiedsince = -1; } if (ifmodifiedsince < (lastmodified / 1000 * 1000)) { // if the servlet mod time is later, call doget() // round down to the nearest second for a proper compare // a ifmodifiedsince of -1 will always be less maybesetlastmodified(resp, lastmodified); doget(req, resp); } else { resp.setstatus(httpservletresponse.sc_not_modified); } } }
如果在自己写的类中重写了service方法,那么servlet容器就会把请求交给你重写的service方法处理。
public class httpservletdemo extends httpservlet{ protected void doget(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception { printwriter out=resp.getwriter(); out.println(hello!); out.close(); }}
以上就是怎么配置servlet的详细内容。