一、在java中,servlet 主要用于浏览和修改数据以及创建动态的web内容。
二、编写一个简单的servlet
①创建一个servlet类
package
com.howtodoinjava.servlets;
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;
public
class
MyFirstServlet
extends
HttpServlet {
private
static
final
long
serialVersionUID = -1915463532411657451L;
@Override
protected
void
doGet(HttpServletRequest request,
HttpServletResponse response)
throws
ServletException, IOException
{
response.setContentType(
"text/html;charset=UTF-8"
);
PrintWriter out = response.getWriter();
try
{
// Write some content
out.println(
"<html>"
);
out.println(
"<head>"
);
out.println(
"<title>MyFirstServlet</title>"
);
out.println(
"</head>"
);
out.println(
"<body>"
);
out.println(
"<h2>Servlet MyFirstServlet at "
+ request.getContextPath() +
"</h2>"
);
out.println(
"</body>"
);
out.println(
"</html>"
);
}
finally
{
out.close();
}
}
@Override
protected
void
doPost(HttpServletRequest request,
HttpServletResponse response)
throws
ServletException, IOException {
//Do some other work
}
@Override
public
String getServletInfo() {
return
"MyFirstServlet"
;
}
}
②创建web.xml配置文件
<?xml version=
"1.0"
?>
<web-app xmlns=
"http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http:
//xmlns.jcp.org/xml/ns/javaee
http:
//xmlns.jcp.org/xml/ns/javaee/web-app_3_0.xsd"
version=
"3.0"
>
<welcome-file-list>
<welcome-file>/MyFirstServlet</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>MyFirstServlet</servlet-name>
<servlet-
class
>com.howtodoinjava.servlets.MyFirstServlet</servlet-
class
>
</servlet>
<servlet-mapping>
<servlet-name>MyFirstServlet</servlet-name>
<url-pattern>/MyFirstServlet</url-pattern>
</servlet-mapping>
</web-app>
tips:
- MyFirstServlet类继承了HttpServlet。这个继承是必须的,因为所有的Servlet必须是要么继承了 javax.servlet.GenericServlet 的普通Servl et,要么是继承了 javax.servlet.http.HttpServlet 的HTTP Servlet。
- 重新 doGet() 和 doPost() 方法。这两个方法都已在 HttpServlet 类里定义了。当一个GET或POST请求到来时,它就会被映射到相应的方法 里。例如,如果你向这个servlet发送一个HTTP GET请求,doGet()方法就会被调用。
- 这里也有一些其他有用的方法。你可以重写它们来在运行时控制应用。例如getServletInfo()。
- HttpServletRequest 和 HttpServletResponse 是所有doXXX()方法的默认参数。我们会在后面的章节里详细学习这些对象。 ----------------------------------------------------------------------------------------------------------------------
三、编写动态的servlet响应内容
package
com.howtodoinjava.servlets;
import
java.io.IOException;
import
java.io.PrintWriter;
import
java.util.Date;
import
java.util.HashMap;
import
java.util.Map;
import
javax.servlet.ServletException;
import
javax.servlet.annotation.WebServlet;
import
javax.servlet.http.HttpServlet;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
@WebServlet
(name =
"CalendarServlet"
, urlPatterns = {
"/CalendarServlet"
})
public
class
CalendarServlet
extends
HttpServlet {
private
static
final
long
serialVersionUID = -1915463532411657451L;
@Override
protected
void
doGet(HttpServletRequest request,
HttpServletResponse response)
throws
ServletException, IOException
{
Map<String,String> data = getData();
response.setContentType(
"text/html;charset=UTF-8"
);
PrintWriter out = response.getWriter();
try
{
// Write some content
out.println(
"<html>"
);
out.println(
"<head>"
);
out.println(
"<title>CalendarServlet</title>"
);
out.println(
"</head>"
);
out.println(
"<body>"
);
out.println(
"<h2>Hello "
+ data.get(
"username"
) +
", "
+ data.get(
"message"
) +
"</h2>"
);
out.println(
"<h2>The time right now is : "
+
new
Date() +
"</h2>"
);
out.println(
"</body>"
);
out.println(
"</html>"
);
}
finally
{
out.close();
}
}
//This method will access some external system as database to get user name, and his personalized message
private
Map<String, String> getData()
{
Map<String, String> data =
new
HashMap<String, String>();
data.put(
"username"
,
"Guest"
);
data.put(
"message"
,
"Welcome to my world !!"
);
return
data;
}
}
当你在tomcat里运行上面的Servlet并在浏览器里输入“http://localhost:8080/servletexamples/CalendarServlet”你会得得下面的响应。
- MyFirstServlet类继承了HttpServlet。这个继承是必须的,因为所有的Servlet必须是要么继承了 javax.servlet.GenericServlet 的普通Servlet,要么是继承了 javax.servlet.http.HttpServlet 的HTTP Servlet。
- 重新 doGet() 和 doPost() 方法。这两个方法都已在 HttpServlet 类里定义了。当一个GET或POST请求到来时,它就会被映射到相应的方法里。例如,如果你向这个servlet发送一个HTTP GET请求,doGet()方法就会被调用。
- 这里也有一些其他有用的方法。你可以重写它们来在运行时控制应用。例如getServletInfo()。
- HttpServletRequest 和 HttpServletResponse 是所有doXXX()方法的默认参数。我们会在后面的章节里详细学习这些对象。
- 也欢迎登录我的个人网站,里面有更多的文章及技术咨询在等你:http://www.guangmuhua.com