Spring的业务层和Spring的持久层都已经开始完成了,该是为程序提供界面的时候了。Struts2框架由于抢尽天时地利,成为当下最流行的展现层框架。但Spring MVC相对于Struts2更加简单、强大、优雅。此外,由于Spring MVC框架出自Spring之手,因此和Spring容器没有任何的阻抗,显得天衣无缝。
配置Spring MVC框架
首先对web.xml文件进行配置,以便web容器启动时能够自动启动Spring容器,web.xml文件的核心代码如下:
<!-- 从类路径下加载Spring配置文件,classpath关键字特指类路径下加载 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 负责启动Spring容器的监听器,他将引用contextConfigLocation上下文参数获得Spring配置文件地址 -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- Spring MVC的主控Servlet -->
<servlet>
<servlet-name>bbs</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
<!-- Spring MVC处理的 -->
<servlet-mapping>
<servlet-name>bbs</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
处理登录请求
在com.bbs.web包下新建类:LoginCommand,代码如下
package com.baobaotao.web; public class LoginCommand { private String userName; private String password; public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } }
在同样的包下新建类:LoginController,代码如下
package com.bbs.web; import java.util.Date; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import com.bbs.domain.User; import com.bbs.service.UserService; @Controller public class LoginController{ @Autowired private UserService userService; @RequestMapping(value = "/index.html") public String loginPage(){ return "login"; } @RequestMapping(value = "/loginCheck.html") public ModelAndView loginCheck(HttpServletRequest request,LoginCommand loginCommand){ boolean isValidUser = userService.hasMatchUser(loginCommand.getUserName(),loginCommand.getPassword(),2); if (!isValidUser) { return new ModelAndView("login", "error", "用户名或密码错误",2); } else { User user = userService.findUserByUserName(loginCommand.getUserName(),2); user.setLastIp(request.getLocalAddr(),2); user.setLastVisit(new Date(),2); userService.loginSuccess(user,2); request.getSession().setAttribute("user", user,2); return new ModelAndView("main",2); } } }
在Spring的配置文件applicationContext.xml中指定视图解析器
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:viewClass="org.springframework.web.servlet.view.JstlView"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" />
登录页面login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <html> <head> <title>宝宝淘论坛登录</title> </head> <body> <c:if test="${!empty error}"> <font color="red"><c:out value="${error}" /></font> </c:if> <form action="<c:url value="loginCheck.html"/>" method="post"> 用户名: <input type="text" name="userName"> <br> 密 码: <input type="password" name="password"> <br> <input type="submit" value="登录" /> <input type="reset" value="重置" /> </form> </body> </html>
欢迎界面main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>宝宝淘论坛</title> </head> <body> ${user.userName},欢迎您进入论坛,您当前积分为${user.credits}; </body> </html>