1.servlet介绍
java servlet 是一种使用java编写的CGI的程序
CGI:通用网关接口。其与传统CGI优势:多线程,性能高;
使用out.println() 显示html
servlet本身也是java类,所以必须存放在WEB-INF/classes
jsp功能与servlet一致(先有servlet,再有jsp),也就意味着servlet程序同样可以被外部引用访问,这就必须有一个地址,可以通过WEB映射;
修改web.xml可以配置地址
2.来一个HelloWorld
2.1 纯手工打造
文件结构(HelloWorld)
webapps下建一个文件夹servletTest;servletTest建一个文件夹WEB-INF;WEB-INF建一个文件web.xml和一个文件夹classes;classes下把编译好的类ServletHelloWorld.class放入;
其中web.xml写:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>Test</servlet-name>
<servlet-class>ServletHello</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
ServletHelloWorld.class的java文件为
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ServletHello extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request,response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("</head>"); out.println("<body>"); out.println("<center><h1>Hello World!!</h1></center>"); out.println("</body>"); out.println("</html>"); } }
jdk 提供的是java se的包,而java ee包不在java se中,所以一般在编译ServletHelloWorld.java 时会出现找不到类的错误。需要如下配置:
配置方法1:
set classpath=C:/Program Files/Apache Software Foundation/Tomcat 5.5/common/lib/servlet-api.jar
javac ServletHelloWorld.java
配置方法2(比较常用):
把Tomcat 5.5/common/lib/servlet-api.jar粘贴到C:/Program Files/Java/jdk1.6.0_21/jre/lib/ext
查看:
在浏览器中输入http://localhost:8081/servletTest/hello 回车可以看到效果
其中localhost:8081是Tomcat;servletTest是我建的项目名;hello是web.xml中<url-pattern>中的内容;(也就是说可以把WEB-INF和classes当成透明不存在)
2.2 使用万能的eclipse
file->new->dynamic web project
配好相应的Tomcat 写好java文件,和web.xml 然后 右键项目 run as servlet 再输入正确的url 于是helloworld 出来了~
3 生命周期
在webapps中建立一个文件夹ServletLC
文件夹ServletLC下建一个文件夹WEB-INF和文件lc.jsp
其中lc.jsp如下
<%@ page
contentType="text/html;charset=GBK"
%>
<html>
<head>
<title>Servlet LifeCycle</title>
</head>
<body>
<center>
<form action="/ServletLC/LifeCycle" name="form">
<input type="submit" value="提交">
</form>
</center>
</body>
</html>
在WEB-INF下建立classes文件夹和web.xml
其中web.xml如下配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>Test</servlet-name>
<servlet-class>ServletLC</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/LifeCycle</url-pattern>
</servlet-mapping>
</web-app>
classes下放入已经编译好的.class文件,其.java源文件为:
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ServletLC extends HttpServlet { private ServletConfig config; public void init(ServletConfig config) throws ServletException { super.init(config); this.config=config; System.out.println("-----init-----"); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); System.out.println("-----doGet-----"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("-----doPost-----"); } public void destroy() { System.out.println("-----destroy-----"); } }