Servlet是用Java语言编写的服务器端程序,是由服务器端调用执行、按照Servlet自身规范编写的Java类。
Servlet可以处理客户端传来的HTTP请求,并返回响应。
一、Servlet编程接口
设计Servlet要在Servlet框架约束下进行,并遵守其中所要求的规则。
Servlet框架是由javax.servlet和javax.servlet.http两个Java包组成。
功能 |
类和接口 |
Servlet实现 |
javax.servlet.http.HttpServlet |
Servlet异常 |
javax.servlet.ServletException |
请求和响应 |
javax.servlet.ServletRequest,javax.servlet.ServletResponse javax.servlet.ServletInputStream,javax.servlet.ServletOutputStream javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse |
会话跟踪 |
javax.servlet.http.HttpSession |
Servlet上下文 |
javax.servlet.ServletContext |
Servlet协作 |
javax.servlet.RequestDispatcher |
二、设计Servlet
设计Servlet需要继承javax.servlet.http.HttpServlet类,其结构:
package …;//省略了包名
import …; //省略了导入包
public class Servlet类名称 extends HttpServlet{
public void init(){}
public void doGet (HttpServletRequest request,HttpServletResponse response){}
public void doPost(HttpServletRequest request,HttpServletResponse response){}
public void destroy(){}
}
PS:Servlet的父类HttpServlet中包含重要方法:
doGet():当请求的类型是“get”时,调用该方法。
doPost():当请求的类型是“post”时,调用该方法。
在设计时只需要重写doGet()和doPost()方法即可,同时配置Servlet。
三、配置Servlet
Servlet只有配置后才可以使用。
配置有两种方式:
在webxml配置:直接在源代码中采用注释配置,我们采用注释配置Servlet。
注释配置:注释配置Servlet,是在Servlet类定义的上方直接使用注释标记“@WebServlet”实现配置。
注释配置格式:
@WebServlet("/请求名称")
public class 类名称 extends HttpServlet {
//实现代码
}
四、使用样例
/**
实现一个简单的用户登录验证程序,
如果用户名是abc,密码是123,则显示欢迎用户的信息,否则显示“用户名或密码不正确”。
采用JSP页面只完成提交信息和验证结果的显示,而验证过程由Servlet完成。
两者之间通过request(或HttpServletRequest)对象实现数据共享。
由提交页面将数据传递给Servlet,
而Servlet获取数据并实现验证,根据验证结果,转向显示验证结果的页面。
假设,组件之间共享数据的参数为:username(用户名称)和userpwd(密码)。
**/
系统需要设计3个组件。
//(1)登录表单页面:login.jsp
<%@ page pageEncoding="UTF-8"%>
<html>
<head><title>登录页面</title></head>
<body>
<form action="loginCheck" method="post">
请输入用户名:<input type="text" name="username"/><br/>
请输入密码:<input type="password" name="userpwd"/><br/>
<input type="submit" value="登录"/>
<input type="reset"/>
</form>
</body>
</html>
//(2)处理登录请求并验证Servlet:LoginCheckServlet.java
package servlet;
import java.io.IOException;
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("/loginCheck")
public class LoginCheckServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LoginCheckServlet() {
super();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String userName=request.getParameter("username");
String userPwd=request.getParameter("userpwd");
String info="";
if(("abc".equals(userName))&&"123".equals(userPwd)){
info="欢迎你"+userName+"!";
}else{
info="用户名或密码不正确!";
}
request.setAttribute("outputMessage", info);
request.getRequestDispatcher("/Info.jsp").forward(request,response);
}
}
//(3)显示提示的页面:info.jsp
<%@ page pageEncoding="UTF-8"%>
<html>
<head><title>显示结果页面</title></head>
<body> <%=request.getAttribute("outputMessage") %> </body>
</html>