WEB应用开发中的Servlet
Servlet是一种基本组件规范,和JSP,Filter,Tag,Listener等同样是属于Java Web的基本组件。Servlet一般是作为控制层处理视图层的请求操作的。Servlet的生命周期过程如下:1. Servlet容器加载阶段 2. 初始化 3.响应阶段 4.销毁阶段
Servlet的基础知识与使用方法
---------------------------------First---------------------------------
一、Servlet基础
1.1 Servlet是什么
Servlet是一种基本组件规范,和JSP,Filter,Tag,Listener等同样是属于Java Web的基本组件。
Servlet一般是作为控制层处理视图层的请求操作的。
1.2 Servlet的原理
刚才说Servlet一般是作为控制层处理前台页面的请求操作的,关于Servlet与客户端请求之间的一个过程首先客户端即前台发送一个请求。Servlet调用service()方法进行响应处理。常用的请求方式是get和post方式,service()方法中对请求方式进行了匹配调用doget()或者doPost()等方法,然后在对应的方法中调用相关对象、方法、参数等处理业务,实现对客户端请求的响应。本身Servlet接口是没有doGet()、doPost()等方法的。HttpServlet中定义了这些方法。所以实际开发中我们会通过继承HttpServlet来创建Servlet类。
1.3 Servlet的生命周期
Servlet的生命周期过程如下:
1>. Servlet容器加载阶段
2>. 初始化阶段 init(ServletConfig sc)
-->该方法仅被加载一次,用于初始化操作。
3>. 响应服务阶段 service(ServletRequest request, ServletResponse response)
-->每次请求都会调用该方法,该方法用于请求响应操作。
4>. 销毁阶段 destroy()
---------------------------------Second---------------------------------
二、WEB应用中的Servlet
2.1 Servlet接口类实现
新建一个类TestServlet,然后实现Servlet接口。
代码如下:
(阅读源码有助于更好的理解)
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class TestServlet implements Servlet{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
这就是直接实现Servlet接口的类所有要实现的方法。通过这些方法我们能够更好的理解Servlet的生命周期。
2.2 配置与映射
在WEB应用中新建上述类 TestServlet,并在web.xml文件中配置注册Servlet及映射servlet-mapping
配置如下:
<!-- 注册和映射 servlet -->
<servlet>
<!-- 1>Servlet注册的名字 -->
<servlet-name>testServlet</servlet-name>
<!-- 2>Servlet的全类名 -->
<servlet-class>cn.edu.hpu.rfeng.TestServlet</servlet-class>
<!-- 3>配置Servlet的初始化参数 -->
<init-param>
<!-- 初始化一个参数user其数据为root -->
<param-name>user</param-name>
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</init-param>
</servlet>
<servlet-mapping>
<!-- 2.1>需要和某一个servlet name一致 -->
<servlet-name>testServlet</servlet-name>
<!-- 2.2>映射具体的访问路径:‘/’代表当前WEB应用的根目录 -->
<url-pattern>/test</url-pattern>
</servlet-mapping>
配置后可测试该Servlet。
2.3 运行测试一个Servlet
在tomcat7下运行该WEB应用,浏览器上访问对应TestServlet的路径,访问 5 次即发出 5 次对TestServlet的请求。对应请求的响应结果输出在控制台。
如图所示:
图2.模拟请求servlet图
图3.模拟Servlet响应请求图
根据结果看到,5次请求的响应结果中,Servlet都调用了service()方法,init()只调用了一次。
init()方法仅在第一次被Servlet容器加载时调用了一次。所以初始化操作一般在init()方法中操作。
service()方法会对每次请求给出响应。一般响应操作逻辑代码写在Servlet的service()方法中。
2.4 实际开发中的Servlet
一般不会通过实现Servlet这个接口来写控制层的Servlet。实际开发中通过继承HttpServlet,覆盖其中的doPost(),doGet()方法来处理视图层传来的请求。(一般可以通过开发工具直接创建一个servlet文件)
新建Servlet文件DevelopServlet,
代码如下:
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 DevelopServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
可以直接在doGet(),doPost方法中写对请求的处理操作。
2.5 Servlet下的request与response
servlet下有HttpServletRequest,HttpServletResponse,ServletRequest,ServletResponse对象。看命名大致也能看出这些对象之间的联系。其中request对象简单来说就是用于接收客户端浏览器提交的数据,response对象则将服务端的数据发送到客户端浏览器
request对象的常用方法:
setAttribute(String name,Object o): 设置属性名和属性值
Object getAttribute();获取属性值
Enumeration getAttributeNames();获取所有属性组成的名字
void removeAttribute(String a)移除指定对象的属性
getParameter()获取参数
---------------------------------Third---------------------------------
三、模拟案例
模拟登录案例
3.1 案例描述
前端html页面有个表单有两个文本框,向服务端发送请求,Servlet接收处理请求,获取请求参数。将浏览器传来的数据和默认的用户数据user:zhangsan;password:123456进行比对。若比对成功,处理操作返回前台页面并提示用户登录成功!若比对失败,也返回前台页面提示用户名或密码错误!
3.2 案例实现
1>在WEB项目下新建登录页面 login.html
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="DevelopServlet" method="post">
账户:<input type="text" name="name" /><br>
密码:<input type="password" name="password" /><br>
<input type="submit" value="login" />
</form>
</body>
</html>
点击对应页面的登录按钮,会向DevelopServlet发出请求,Servlet接收请求并响应
2>在DevelopServlet中的逻辑操作
代码如下:
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 DevelopServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取请求参数
String name = request.getParameter("name");
String password = request.getParameter("password");
//比对数据并做出处理
if (name.equals("zhangsan") && password.equals("123456")) {
response.sendRedirect("success.html");//重定向到登录成功页面
return;
}
response.sendRedirect("error.html");//重定向到登录失败页面
}
}
其中的success.html和error.html文件就很简单了,实现在页面显示登录成功或失败的字样。
3>web.xml配置文件
注意:对Servlet必须在web.xml文件中进行注册映射。
<?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_2_5.xsd" id="WebApp_ID" version="2.5">
<!--注册servlet -->
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<!-- servlet的命名 -->
<servlet-name>DevelopServlet</servlet-name>
<!-- servlet类全类名,包名加上类名 -->
<servlet-class>cn.edu.hpu.rfeng.DevelopServlet</servlet-class>
</servlet>
<!-- 配置映射 -->
<servlet-mapping>
<servlet-name>DevelopServlet</servlet-name>
<url-pattern>/DevelopServlet</url-pattern>
</servlet-mapping>
</web-app>
3.3 运行演示
在tomcat7下运行该WEB应用:效果如下:
1>文本框输入正确的账户密码时:点击登录按钮经servlet处理请求重定向到登录成功页面
图4.正确账户登录图
图5.登录成功图
2>错误情况下:经servlet处理验证账户错误重定向到登录错误提示页面
图6.错误账户登录图
图7.登录失败图
---------------------------------The End---------------------------------
更多推荐
所有评论(0)