构成基于SpringMVC应用程序的最基本要素
- 入口程序 —— DispatcherServlet
- 核心配置 —— [servlet-name]-servlet.xml
- 控制逻辑 —— UserController
从应用程序自身的角度来看,入口程序和核心配置一旦确定之后将保持固定不变的,而控制逻辑则随着整个应用程序功能模块的扩展而不断增加。所以在这种编程模式下,应用程序的纵向扩展非常简单并且显得游刃有余。
在Servlet模型中,请求-响应的实现依赖于两大元素的共同配合:
1. 配置Servlet及其映射关系(在web.xml中)
<servlet>
<servlet-name>registerServlet</servlet-name>
<servlet-class>com.demo2do.springmvc.web.RegisterServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>registerServlet</servlet-name>
<url-pattern>/register</url-pattern>
</servlet-mapping>
在这里,<url-pattern>定义了整个请求-响应的映射载体:URL;而<servlet-name>则将<servlet>节点和<servlet-mapping>节点联系在一起形成请求-响应的映射关系;<servlet-class>则定义了具体进行响应的Servlet实现类。
2. 在Servlet实现类中完成响应逻辑
<span style="font-family:Microsoft YaHei;font-size:14px;">public class RegisterServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 从request获取参数
String name = req.getParameter("name");
String birthdayString = req.getParameter("birthday");
// 做必要的类型转化
Date birthday = null;
try {
birthday = new SmpleDateFormat("yyyy-MM-dd").parse(birthdayString);
} catch (ParseException e) {
e.printStackTrace();
}
// 初始化User类,并设置字段到user对象中去
User user = new User();
user.setName(name);
user.setBirthday(birthday);
// 调用业务逻辑代码完成注册
UserService userService = new UserService();
userService.register(user);
// 设置返回数据
request.setAttribute("user", user);
// 返回成功页面
req.getRequestDispatcher("/success.jsp").forward(req, resp);
}
} </span>
Servlet实现类本质上是一个Java类。通过Servlet接口定义中的HttpServletRequest对象,我们可以处理整个请求生命周期中的数据;通过HttpServletResponse对象,我们可以处理Http响应行为。