Servlet实例
通常通过扩展javax.servle.http.HttpServlet,实现Servelt接口的抽象类处理HTTP请求。
Hello World
package com.web.one;
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;
/**
* Servlet implementation class WebOneServlet
*/
@WebServlet("/WebOneServlet")
public class WebOneServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private String message;
@Override
public void init() throws ServletException {
//执行必要的初始化操作
message = "Hello Wrold";
}
public WebOneServlet() {
super();
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
// 设置响应内容的类型
response.setContentType("text/html");
//响应的逻辑
PrintWriter outer = response.getWriter();
outer.println("<h1>"+message+"</h1>");
}
@Override
public void destroy() {
//do nothing
}
}
Servlet 表单数据
客户端(浏览器)到Web服务器 再到后台程序,都需要传递一些信息。
从客户端到Web服务器可以使用GET/POST两种方式传递信息。
GET
GET方法传递的是经过编码的信息,页面URL和编码的信息使用“?”号隔开:
http://www.xxx.com/xxxx?key=value&key=value
- GET是HTTP请求中默认的向Web服务器传递信息的方式。
- GET产生一个字符串,在地址栏中展示,包含页面地址和编码信息。
- GET方式传递的数据大小有限制:请求字符串的最大值为1024个字符
- GET方式不安全,向服务器传递密码等数据是不可使用
- Servlet使用doGet()方法处理GET类型的请求
- GET方式传递的信息使用QUERY_STRING 头传递,可以通过QUERY_STRING环境变量访问这些信息,在doGet方法中request.getQueryString(),即可获取这些信息
POST
POST方式打包信息的方式与GET方法基本相同,但是较为可靠安全,不把信息展示在URL中,而是作为单独的信息以标准输出的形式传递给后台。可以再doPost()中获取、处理这些数据。
Servlet读取表单数据
servlet读取表单数据的方法:
- getParameter():获取表单指定参数的值。如getParameter(“name”);
- getParameterValues():名字相同,但值有多个,数组变量,调用该方法返回多个值(复选框);
- getParameterNames():得到当前请求所有参数的参数名的完整列表。
doGet()处理表单数据:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置响应内容类型
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String title = "使用 GET 方法读取表单数据";
// 处理中文
String name = new String(request.getParameter("name").getBytes("ISO8859-
1"),"UTF-8");
out.println(name);
}
启动Tomcat,在地址栏中输入 ttp://localhost:8080/WebOneServlet?name=“test”.在网页上输出name的值test。或者在Eclipse项目中创建提交表单的HTML文件,放在WebContent目录下
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>提交表单</title>
</head>
<body>
<form action="WebOneServlet" method="GET">
Name:<input type="text" name="name">
<input type="submit" value="提交" />
</form>
</body>
</html>
运行HTML文件输入测试文字提交,经doGet处理可以在网页输出HTML页面输入的文字。若表单提交数据中包含ISO8859-1格式的中文,则需要进行处理 String name = new String(request.getParameter(“name”).getBytes(“ISO8859-1”),”UTF-8”);
doPost()处理表单数据:
修改HTML文件:method=”POST”
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>提交表单</title>
</head>
<body>
<form action="WebOneServlet" method="POST">
Name:<input type="text" name="name">
<input type="submit" value="提交" />
</form>
</body>
</html>
在Servlet的doPost()方法中处理数据:
// 处理 POST 方法请求的方法
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置响应内容类型
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String title = "使用 POST 方法读取表单数据";
// 处理中文
String name =new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");
out.println(name);
}
getParameterValues()和getParameterNames的使用
getParameterNames()读取表单参数名集合,遍历这个集合获取所有参数值。
创建HTML文件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>读取复选框参数</title>
</head>
<body>
<form action="ReadParams" method="POST" target="_blank">
<input type="checkbox" name="maths" checked="checked" /> A
<input type="checkbox" name="physics" /> B
<input type="checkbox" name="chemistry" checked="checked" /> C
<input type="submit" value="选择字母" />
</form>
</body>
</html>
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置响应内容类型
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
Enumeration paramNames = request.getParameterNames();
while(paramNames.hasMoreElements()) {
String paramName = (String)paramNames.nextElement();
String[] paramValues = request.getParameterValues(paramName);
// 读取单个值的数据
if (paramValues.length == 1) {
String paramValue = paramValues[0];
if (paramValue.length() == 0)
out.println("没有值");
else
out.println(paramValue);
} else {
// 读取多个值的数据
for(int i=0; i < paramValues.length; i++) {
out.println(paramValues[i]);
}
}
}
}