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;
	}
	
	
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值