J2EE(五)——servlet初识
一、Tomcat的三个功能:
1.jsp容器
2.Servlet容器
3.Web服务器
二、手动开发第一个servlet
开发servlet三种方式:
1.实现servlet接口
2.继承GenericServlet
3.继承HttpServlet
1.在tomcat的web apps下新建一个文件夹(myWeb),这个项目里面增加含web.xml的 WEB-INF并在WEB-INF下增加classes以及lib.在classes下编写MyFirstServlet.java:
package myz;
import java.io.IOException;
import java.util.Date;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class MyFirstServlet implements Servlet{
//销毁servlet,只会被调用一次
public void destroy() {
// TODO Auto-generated method stub
}
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
//初始化Servlet,把Servlet加载到内存中去,该函数只会被调用一次
public void init(ServletConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("service方法正在执行...");
System.out.println(new Date());
}
}
用提示命令符定位到该目录下后,使用javac -d . MyFirstServlet.java命令编译(-d表示 编译的东西需要打包package myz;, . 表示在当前目录下)。
Ps:如果报错servlet等包找不到,则需要解压TomCat\apache-tomcat-8.5.14\lib下的servlet-api.jar,并配置需要用户变量CLASSPATH为tomcat的lib目录(或者为lib目录下的servlet-api.jar),
2.部署web应用到刚才的web.xml下:
<servlet>
<servlet-name>MyFirstServlet</servlet-name>
<servlet-class>myz.MyFirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyFirstServlet</servlet-name>
<url-pattern>/ABC</url-pattern>
</servlet-mapping>
servlet-name配置的是以后浏览器访问时的资源名称,该名字可以自己定义,但一般与servlet名字相同
servlet-class必须指明该servlet放的位置(包名.servlet名)
Mapping做的是servlet的映射
Mapping下的servlet-name必须与上面servlet-name的一样
url-pattern上配置的名字是ABC使得我以后访问地址为
http://localhost:8080/myWeb/ABC
访问顺序为,先根据url-pattern找到mapping下的servlet-name,然后根据得到的servlet-name得到servlet-class加载对应的servlet.
3.此时访问http://localhost:8080/myWeb/ABC,控制台会输出service方法正在执行...和当前时间
4.如果想在网页输出同样的信息,在service方法中,添加
arg1.setCharacterEncoding("utf-8");
arg1.getWriter().write("service方法正在执行..."+new Date());
即可(其中arg1为ServletResponse传参对象).
因为,write的内容含有中文,所以需要在service方法中和浏览器中设置编码格式为utf-8.