我们可以在src下面创建一个Java类,例如,如下所示
这就是一个普通的Java类,那么,如果想让它变成一个可以通过HTTP协议访问到的Java类,那么,该怎么办呢?这个类需要实现一个接口,这个接口叫做Servlet接口。
但是,现在我们发现它不让导这个包。出现这种不让导包的情况,是什么意思呢?就是没有jar包。你可以这样做,首先就是导入jar包,它现在缺少Servlet包,Tomcat中有这个包,
把这个jar包放到工程里面就可以了。
下面我们说另外的一种方式。先选中这个工程
它现在需要有一个servlet运行环境就可以了,Tomcat本身是有servlet环境的,以后遇到这种情况是不需要像上面那种做法去导包。
你如果要是在这里直接创建的工程,
就不会出现不能导servlet的问题。现在报错是因为在建的时候没有跟Tomcat集成。如果你现在再去创建一个新的工程,就不会出现这个问题了,之前报错是因为我先创建了WEB12这个工程,然后再集成了Tomcat,所以就出现了没有环境的问题,如果是先集成Tomcat然后再创建工程,那么就不会出现找不到包的情况了。
现在没有环境该怎么办呢?
我们发现这里没有Tomcat的运行环境,那么,我们要做的就是添加Tomcat
然后选择Server Runtime(服务器运行环境)
选中它,然后点完成,
发现这个时候就可以导入servlet包了。
因为Servlet是一个接口,我们要实现这个接口中未实现的接口方法。
目前我们先只关注service这个方法,service方法是专门提供向客户端提供响应的方法,我们之前写一个Java类,然后创建这个Java类的对象访问类中的成员是在本地完成的,我现在想要通过HTTP协议去访问这个MyFirstServlet类中的service方法。在service方法中写一句话,response是响应,request是请求,
ServletResponse是不带http的,HttpServletResponse是带http的,ServletResponse是父类,HttpServletResponse是子类,ServletResponse是什么协议都行,HttpServletResponse是使用http协议,是通过http协议访问,
HttpServletResponse中有一个getWriter方法
写“This is my first servlet!!!”,写给谁呢?基于请求和响应的知识点,谁请求,就写给谁。所以,在service方法中可以动态的拼HTML代码,当然这样写完之后还要配置一下,在WebContent目录下的WEB-INF目录下的web.xml文件中进行配置,这个web.xml是代表我这个WEB12应用的一个核心配置文件,
在这个文件中怎么配置呢?
这一步就是获得当前MyFirstServlet类的全路径名,
把当前MyFirstServlet类的全路径名放到这里。
这里的名字可以随便写。本例就写成MyFirstServlet
然后下面再写
其中,<url-pattern></urlpattern>代表你这个页面,就是HTTP协议在访问时,资源的虚拟路径,必须要以/开始。<url-pattern></urlpattern>中可以随便写,比如写/abc,这是一个假的名字,这样你写完之后,
将它重新发布
然后回到页面当中,你在WEB12这个web应用下面,我刚刚在这里配置的是资源
<servlet-class></servlet-class>叫动态资源,Java代码的形式,那么,我配置的<servlet-class></servlet-class>这个资源的虚拟的名称路径叫<url-pattern></urlpattern>中写的内容,本例叫做abc。
所以,在这里就直接写/abc,
然后直接回车
为什么叫动态资源?
你在这里的内容是写给客户端的,那么,我将一个HTML代码写到这里也是可以的。比如
用十句response.getWriter().write(),每一句写一行这个HTML代码,比如第一句response.getWriter().write(“<!DOCTYPE html>”)下面依次写,这样写后,显示的效果和静态index.html文件显示的效果一样。
这个时候可以就会有个疑问,一句一句的用语句输出写还没有直接写到静态文件中方便,但是,通过servlet写有个好处。
比如说,你登录了某个网站,在网站上会出现一句话,“欢迎您:您的名字”,如果要是Tom登录的,就写“欢迎您:Tom”,如果是Jam登录的,就写“欢迎您:Jam”,那么,这个名字是不能在HTML中写死的,
这时候,你如果用HTML来返回页面,名字是写死的,我们可以通过servlet写
我这里写的是Java代码,既然是写的Java代码,那么,在这里就可以jdbc操作,进行jdbc操作就可以从你的数据库获的一些动态数据,你把获得到的这些动态数据往这里一放,就可以达到动态的效果,动态页面就有了,这里说的动态就是这个意思。
在servlet接口中重点覆写service()方法,因为service()方法是默认对外提供访问的一个具体的方法,你只要把你想要执行的代码放到service()方法中,那么,我客户端只要一访问到这个资源,service()方法中的代码就执行了。