心中的helloservlet
使用notepad++编写一个HelloServlet.java文件,内容如下
package cn.edu.cuit.servlet;
// 导入必需的 java 库
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
// 扩展 HttpServlet 类
public class HelloServlet extends HttpServlet {
private String message; // 属性
// 初始化方法
public void init() throws ServletException {
// 执行必需的初始化
message = "Hello Servlet,we study CUIT JAVAEE";
}
// 处理get类请求
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置响应内容类型
response.setContentType("text/html");
// 实际的逻辑是在这里
PrintWriter out = response.getWriter();
out.println("<h1><font size=12 color='red'>" + message + "</font></h1>");
}
// 销毁方法
public void destroy() {
// 什么也不做
}
}
java类的编译
把上面的代码写在 HelloServlet.java 文件中,把这个文件放在…/src/cn/edu/cuit/servlet/HelloServlet.java,还需要把这些目录添加到 CLASSPATH 中。
假设您的环境已经正确地设置,进入 servlet目录,并编译 HelloServlet.java,如下所示:
$ javac HelloServlet.java
当然,平时的开发这样做,就太没有效率了,一般用eclipse来创建项目,在项目中来实现servlet的开发。
服务的部署
编写配置描述符,即web.xml文件,然后部署到tomcat服务器上
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>j2018001001-01-servletdemo-helloservlet</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>cn.edu.cuit.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/helloservlet</url-pattern>
</servlet-mapping>
</web-app>
调用和运行
假设项目名是:j2018001001-01-servletdemo-helloservlet
启动 tomcat 服务器,最后在浏览器的地址栏中输入
http://localhost:8080/j2018001001-01-servletdemo-helloservlet/helloservlet
如果一切顺利,您会看到下面的结果:
编写MyServlet
创建一个Servlet创建servlet有三种不同的方法。
- 实现Servlet接口
- 扩展GenericServlet类
- 扩展HttpServlet类
– 但是大部分servlet是通过扩展HttpServlet抽象类创建的。
– 如前所述HttpServlet给出了Servlet接口的service()方法的定义。
– 我们将创建Servlet类但不需要覆盖service()方法。Servlet类将仅覆盖doGet()或doPost()方法。
当servlet的请求进入时,Web容器首先将调用servlet的service()方法,并根据service()方法的请求类型来调用doGet()或doPost()方法。
注意:默认情况下,请求是Get请求。
在cn.edu.cuit.servlet包中,直接创建MyServlet类
package cn.edu.cuit.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 直接用扩展HttpServlet类的方式创建MyServlet类<br>
* <li> 注解方式:@WebServlet("/myservlet")
* <li> 配置描述符方式:在web.xml文件中配置相应的节点信息,url是:<url-pattern>/hello</url-pattern>
* 示例类<br>
* 访问方法<br>
* <li>地址1 http://localhost..../myservlet
* <li>地址2 http://localhost..../hello
*
*/
@WebServlet("/myservlet")
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* 构造方法
*/
public MyServlet() {
super();
}
/**
* doGet方法,处理一切请求
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h2 style='text-align:center'>Hello MyServlet ~</h2>");
out.println("</body></html>");
}
/**
* doPost方法,转交给doGet方法去处理
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
在web.xml添加相应的配置描述符
<!--添加MyServlet的配置描述 -->
<servlet>
<description></description>
<display-name>MyServlet</display-name> <!--// 类的显示名称 -->
<servlet-name>MyServlet</servlet-name> <!--// 类的别名 -->
<servlet-class>cn.edu.cuit.servlet.MyServlet</servlet-class> <!--// 类的名称 -->
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name> <!--// 类的别名 -->
<url-pattern>/hello</url-pattern> <!--// 请求此类的对应URL -->
</servlet-mapping>
web.xml文件元素的说明
web.xml文件中的元素太多。以下是上述web.xml文件中使用的一些元素的说明
表示整个应用程序。
是的子元素,代表servlet。
是的子元素,表示servlet的名称。
是的子元素,表示servlet的类。
是的子元素。它用于映射servlet。
是的子元素。客户端使用此模式来调用servlet。