SpringMVC框架搭建

最近學習了SpringMVC框架的基本搭建,查閱了不少資料最終可以使用了。這裏總結一下,給大家一個參考。Demo裏面包含了基本的表單提交、頁面重定向、獲取JSON以及多文件上傳功能。

1.項目結構圖



2.jar包截圖(可能多了)



3.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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">
	<display-name>SpringMVC</display-name>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>

	<servlet>
		<servlet-name>SpringMVC</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<!-- 自定義servlet配置的位置,默認是在WEB-INF下面,且名稱必須爲springMVC-servlet.xml -->
			<param-value>classpath:/springMVC-servlet.xml</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>SpringMVC</servlet-name>
		<!-- 過濾*.do的請求,這樣可以直接訪問靜態資源 -->
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
</web-app>


4.SpringMVC-servlet.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="  
    http://www.springframework.org/schema/beans   
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context-3.0.xsd  
    http://www.springframework.org/schema/mvc  
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd  
    ">

	<!-- 默認掃描的包路徑 -->
	<context:component-scan base-package="com.cp.demo.controller" />
	<!-- 添加註解驅動 -->
	<mvc:annotation-driven />

	<!-- 定義跳轉的文件的前後綴 -->
	<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/jsp/" />
		<property name="suffix" value=".jsp" />
	</bean>

	<!-- 文件上傳 -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<!-- 默認編碼 -->
		<property name="defaultEncoding" value="UTF-8"></property>
		<!-- 文件大小 -->
		<property name="maxUploadSize" value="10485760000"></property>
		<!-- 緩存大小 -->
		<property name="maxInMemorySize" value="40960"></property>
	</bean>
</beans>

5.控制器代碼
package com.cp.demo.controller;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.ModelAndView;

import com.cp.demo.bean.User;

@Controller
@RequestMapping("/user")
public class DemoController {

	// 通過request,獲取需要的字段。然後經過業務邏輯處理,跳轉到需要跳轉的界面
	// 返回“loginResult”,最後會翻譯成 /jsp/loginResult.jsp這個路徑
	@RequestMapping("/doLogin.do")
	public String login1(HttpServletRequest request,
			HttpServletResponse response) {
		String userName = request.getParameter("userName");
		String passWord = request.getParameter("passWord");
		System.out.println(userName + "," + passWord);
		request.setAttribute("loginResult",
				userName.equals(passWord) ? "login1:登錄成功" : "login1:登錄失敗");
		return "loginResult";
	}

	// 直接返回一個User實體,這個需要各個字段名稱一致
	// @RequestMapping("/doLogin.do")
	public String login2(User user, HttpServletRequest request) {
		String userName = user.getUserName();
		String passWord = user.getPassWord();
		request.setAttribute("loginResult",
				userName.equals(passWord) ? "login2:登錄成功" : "login2:登錄失敗");
		return "loginResult";
	}

	// 通過返回一個ModelAndView來跳轉,每次要new一下,覺得有點麻煩
	// @RequestMapping("/doLogin.do")
	public ModelAndView login3(User user) {
		ModelAndView mav = new ModelAndView("loginResult");
		String userName = user.getUserName();
		String passWord = user.getPassWord();
		mav.addObject("loginResult", userName.equals(passWord) ? "login3:登錄成功"
				: "login3:登錄失敗");
		return mav;
	}

	// ---------------------------------------------------------------------------------------------------------
	// 查看url可知,這個和上面幾個不同,地址變成XXX.jsp了
	@RequestMapping("/doRedirect.do")
	public String doRedirect() {
		return "redirect:/jsp/redirectPage.jsp";
	}

	// --------------------------------------------------------------------------
	@RequestMapping("/doGetJSON1")
	@ResponseBody
	public User doGetJSON1(User user) {
		return user;
	}

	// 可以將這個map寫在baseController裏面,這樣就不需要每次都new一個了
	@RequestMapping("/doGetJSON2")
	@ResponseBody
	public Object doGetJSON2(User user) {
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("success", true);
		map.put("user", user);
		return map;
	}

	// ------------------------------------------------------------------------------
	//上傳文件,支持多文件上傳
	@RequestMapping("/doUpload.do")
	public String upload(HttpServletRequest request) throws IllegalStateException {
		CommonsMultipartResolver resolver = new CommonsMultipartResolver( request.getSession().getServletContext());
		if (resolver.isMultipart(request)) {
			MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
			Iterator<String> iter = multiRequest.getFileNames();
			StringBuffer sb = new StringBuffer();
			while (iter.hasNext()) {
				MultipartFile file = multiRequest.getFile(iter.next());
				if (file != null && file.getOriginalFilename() != "") {
					String fileName = file.getOriginalFilename();
					String path = "F:/" + fileName;
					sb.append(path + "<br/>");
					File localFile = new File(path);
					try {
						file.transferTo(localFile);
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
			request.setAttribute("path", sb.toString());
		}
		return "uploadResult";
	}
}

核心代碼已在上方展示了,下面的則是一些jsp的代碼

6.index.jsp(demo入口)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>SpringMVC演示</title>
<script type="text/javascript"></script>
</head>
<body>
	<h1>簡單表單提交</h1>
	<form action="user/doLogin.do" method="post">
		用戶名:<input name="userName" value="admin"><br /> 
		密碼:<input name="passWord" value="admin"><br /> 
		<input type="submit" value="登錄">
	</form>
	<hr>
	<h1>頁面重定向</h1>
	<form action="user/doRedirect.do" method="post">
		用戶名:<input name="userName" value="admin"><br /> 密碼:<input
			name="passWord" value="admin"><br /> <input type="submit"
			value="重定向">
	</form>
	<hr>
	<h1>獲取JSON,直接把bean轉換成json</h1>
	<form action="user/doGetJSON1.do" method="post">
		用戶名:<input name="userName" value="admin"><br /> 密碼:<input
			name="passWord" value="admin"><br /> <input type="submit"
			value="獲取JSON-類型1">
	</form>
	<h1>獲取JSON,自定義返回數據</h1>
	<form action="user/doGetJSON2.do" method="post">
		用戶名:<input name="userName" value="admin"><br /> 密碼:<input
			name="passWord" value="admin"><br /> <input type="submit"
			value="獲取JSON-類型2">
	</form>
	<h1>文件上傳(name不能爲空)</h1>
	<form action="user/doUpload.do" enctype="multipart/form-data" method="post">
			文件1:<input type="file" name="file1"><br/>
			文件2:<input type="file" name ="file2"><br/>
			<input type="submit" value="上傳">
		</form>
</body>
</html>



7.loginResult.jsp(登錄結果顯示界面)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LoginResult.jsp</title>
<script type="text/javascript"></script>
</head>
<body>${loginResult }
</body>
</html>


8.redirectPage.jsp(頁面重定向測試頁面)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>No Name</title>
<script type="text/javascript"></script>
</head>
<body>重定向界面
</body>
</html>

9.uploadResult.jsp(文件上傳結果頁面)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>UploadResult.jsp</title>
<script type="text/javascript"></script>
</head>
<body>上傳文件路徑:<br/>${path }
</body>
</html>

10.User.java(bean)
package com.cp.demo.bean;

public class User {

	private String userName;
	
	private String passWord;

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getPassWord() {
		return passWord;
	}

	public void setPassWord(String passWord) {
		this.passWord = passWord;
	}
	
	
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章