一个jsp文件会被tomcat编译成两个文件,放置于tomcat的work目录下而且分别以.class和.java结尾的文件,jsp页面中的html代码直接发给浏览器,java代码在tomcat下生成相应的.java文件,这个文件便是servlet,且有一个jsp只对应一个servlet。
将tomcat下面的lib文件夹的servlet-api.jar拷贝到jdk的jre的ext文件夹下面,java servlet技术的核心就是在服务器端创建能相应用户请求的对象,被创建的对象称之为servlet对象。编写创建servlet对象的类就是编写HttpServket类的子类,即一个Servlet类,需要注意的是HttpServlet类在javax.servlet.http包中
Servlet类必须有包名。
sevlet文件:
package china.dalian;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Hello extends HttpServlet{
public void init(ServletConfig config) throws ServletException{
super.init(config);
}
public void service(HttpServletRequest reqest,HttpServletResponse response)
throws IOException{
response.setContentType("text/html;charset=GB2312");//设置响应的MIME类型
PrintWriter out=response.getWriter();//获得一个向客户发送数据的输出流
out.println("<html><body>");
out.println("<h2>您好,欢迎学习servlet。</h2>");
out.println("</body></html>");
}
}
其中比较重要点是,该类必须继承HttpServlet类,在servlet对象第一次被请求加载时init()只能被调用一次,而service()是可以多次调用的,服务器完毕的是候调用destroy()方法。是特别重要的,web.xml的编写,1 根标记,<web-app> 例子如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>china.dalian.Hello</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/lookHello</url-pattern>
</servlet-mapping>
</web-app>
需要注意的是servlet中的servlet-name和servletmapping中的servlet-name必须相同,而且多个servlet可以写在同一个web-app中,但是同一个servlet的servlet和servlet-mapping必须挨着成对出现,而且在servlet-mapping标记的子标记url-pattern在jsp页面被调用时候,需要将前面的斜杠去掉。