Servlet是使用Java Servlet应用程序设计接口(API)及相关类和方法的Java程序,除了Java Servlet API,它还可以用于扩展和添加API的Java类软件包。Java语言能够实现的功能,Servlet基本都能实现(除了图形界面外)。Servlet主要处理客户端传来的HTTP请求,并返回一个响应。通常所说的Servlet就是指HttpServlet,能够处理的请求有,doGet()、doPost()和service()等方法。在开发Servlet时,可以直接继承javax.servlet.HttpServlet。
Servlet技术具有高效、方便、跨平台、功能强大、灵活性和可扩展性、共享数据、安全的特点,Servlet部署在容器中生命周期由容器管理,可概括为一下几个阶段:加载实例化、初始化(调用init()方法)、提供服务(调用service()方法)、根据请求执行doGet()或doPost()等方法、销毁(调用destroy()方法)。
JDK(Java开发工具包)下载和安装 Http://www.oracle.com/index.html
设置JDK环境变量:计算机→属性→高级系统设置→环境变量→系统变量中的新建,变量名:JAVA_HOME,变量值:JDK所在路径,双击系统变量中的Path,在原有的变量值最前面添加.;JAVA_HOME%\bin;
确认环境变量是否设置成功:点开始,在运行中输入cmd,点击确定,在出现的界面中输入javac。
Tomcat服务器下载、安装 Http://tomcat.apache.org
tomcat→bin→startup.bat
确认Tomcat是否配置成功:浏览器中地址栏输入:http://localhost:8080
Eclipse下载、安装 http://www.eclipse.org
以下为创建一个名称为first的动态网站项目示例以及代码注释:
在WebContent中的WEB-INF创建一个名为NewFile.xml的xml文件,代码注释如下
<?xml version="1.0" encoding="UTF-8"?> <!-- 说明是XML文档,指定其版本为1.0,编码格式为UTF-8 --> <!-- 定义XML文档的根元素web-app,并设置其属性xmlns:xsi、xmlns、xmlns:web、xsi:schemaLocation、id、version--> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>servlet</display-name> <!-- welcome-file-list元素可指定显示的默认文件 --> <welcome-file-list> <!-- 如果用户键入的URL不包含servlet名称、JSP页面或其他资源,则找不到index.html、index.htm文件,这时就会显示index.jsp文件 --> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <!-- 如果用户键入的URL不包含servlet名称、JSP页面或其他资源,则找不到default.html、default.htm文件,这时就会显示default.jsp文件 --> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <!-- 注册两个servlet,Sample和JspSample --> <servlet> <!-- 描述信息 --> <description>第一个例子</description> <!-- servlet显示的的名称为servletSample --> <display-name>servletSample</display-name> <!-- servlet的名称为Sample --> <servlet-name>Sample</servlet-name> <!-- servlet类的完整类名jp.co.nttdata.servlet.Sample --> <servlet-class>jp.co.nttdata.servlet.Sample</servlet-class> </servlet> <!-- Sample印射 --> <servlet-mapping> <!-- servlet的名称为Sample --> <servlet-name>Sample</servlet-name> <!-- 访问Sample的URL地址为/servlet/Sample --> <url-pattern>/servlet/Sample</url-pattern> </servlet-mapping> <servlet> <!-- 描述信息 --> <description>第二个例子</description> <!-- servlet显示的的名称为servletJspSample --> <display-name>servletJspSample</display-name> <!-- servlet的名称为JspSample --> <servlet-name>JspSample</servlet-name> <!-- servlet类的完整类名jp.co.nttdata.servlet.JspSample --> <servlet-class>jp.co.nttdata.servlet.JspSample</servlet-class> </servlet> <!-- JspSample印射 --> <servlet-mapping> <!-- servlet的名称为JspSample --> <servlet-name>JspSample</servlet-name> <!-- 访问JspSample的URL地址为/servlet/JspSample --> <url-pattern>/servlet/JspSample</url-pattern> </servlet-mapping> </web-app>
在WebContent中添加两个JSP文件,名称为index.jsp、response.jsp,当然这两个文件也可以建在WebContent下的单独的文件夹中,代码注释如下
<!-- 使用页面指令page,并指定其语言为java,contentType属性中MIME为text/html 字符编码为windows-31j,编码格式为windows-31j --> <%@ page language="java" contentType="text/html; charset=windows-31j" pageEncoding="windows-31j"%> <!-- 文档类型为html --> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <!-- 存放HTML文档信息 --> <head> <!-- 用meta指定了文件为html文件,且使用windows-31j编码 --> <meta http-equiv="Content-Type" content="text/html; charset=windows-31j"> <!-- 文档的标题为Insert title here --> <title>Insert title here</title> </head> <!-- 页面中的内容 --> <body> <!-- 在页面中插入表单,表单名称为 loginForm,表单提交的URL地址为/servlet/servlet/JspSample,表单提交方式为POST,POST方式更安全--> <form name="loginForm" action="/servlet/servlet/JspSample" method="POST"> <!-- 页面可直接显示出此内容 --> index <!-- 表单输入标记,可以向页面添加单行、多行文本或按钮等 --> <!-- 此处 --> <input name="loginId" type="text" /> <input name="loginName" type="text" value="${loginName}"/> <input type="submit" value="sub" /> </form> </body> </html>
<!-- 注释与index.jsp页面类似 --> <%@ page language="java" contentType="text/html; charset=windows-31j" pageEncoding="windows-31j"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-31j"> <title>Insert title here</title> </head> <body> <form name="loginForm" action="/servlet/servlet/JspSample" method="POST"> response <input name="loginId" type="text" /> <input name="loginName" type="text" value="${loginName}"/> <input type="submit" value="sub" /> </form> </body> </html>
在Java Resource中的src中新建两个类,名称为Sample.java、JspSample.java,代码注释如下
//打包成名称为jp.co.nttdata.servlet package jp.co.nttdata.servlet; //倒入要用到的这些包 import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //继承 HttpServlet的公共类Sample public class Sample extends HttpServlet { /** * serialVersionUID */ /* * 根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,如果你没有考虑到兼容性问题时,就把它关掉,Window ==> * Preferences ==> Java ==> Compiler ==> Error/Warnings ==> Potential * programming problems 将Serializable class without * serialVersionUID的warning改成ignore即可 */ private static final long serialVersionUID = -1936901196555528367L; // Servlet 初始化,输出This is // initMethod,默认初始有参初始化法,如果没有有参初始化方法,才调用无参初始化。如果传递ServletConfig对象失败,则会发生ServletException异常,Servlet将不能正常工作 public void init() throws ServletException { System.out.println("This is initMethod"); } // 处理GET类型的Http请求。继承HttpServlet的servlet必须有public void // doGet(HttpServletRequest req,HttpServletResponse resp)方法 public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 输出This is doGet System.out.println("This is doGet"); // 设置resp的contentType属性中MIME为text/html 字符编码为UTF-8 resp.setContentType("text/html;charset=UTF-8"); // 从resp中获取PrintWriter对象 PrintWriter out = resp.getWriter(); // 向客户端发送字符数据 out.println("<html>"); out.println("<body>"); out.println("This is Servlet"); out.println("</body>"); out.println("</html>"); } // 处理POST类型的Http请求,如果失败,则抛出ServletException, IOException异常 public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 调用doGet( )方法 doGet(req, resp); } // 销毁servlet对象,释放资源 public void destroy() { // 释放HttpServlet类占用的资源 super.destroy(); // 输出This is destroy System.out.println("This is destroy"); } }
//注释类似Sample.java package jp.co.nttdata.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class JspSample extends HttpServlet { /** * serialVersionUID */ private static final long serialVersionUID = 1751356779488685371L; public void init() throws ServletException { System.out.println("This is initMethod"); } public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("This is doGet"); resp.setContentType("text/html;charset=UTF-8"); // 获取loginId参数值 String loginId = req.getParameter("loginId"); // 将loginId放置于req范围中 req.setAttribute("loginId", loginId); // 将loginName更改为nttdata req.setAttribute("loginName", "nttdata"); // 获取RequestDispatcher对象,请求转发到/response.jsp页面 req.getRequestDispatcher("/response.jsp").forward(req, resp); } public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } public void destroy() { super.destroy(); System.out.println("This is destroy"); } }