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>
编程那点事
