SpringMVC配置,简单实例,文件上传与下载,ajax请求

本文基于SpringMVC采用注解方式,从配置到简单常用的功能举例详解,功能已经在本机测试过,能跑起来。

参考资料:iteye博客;

                  Spring文档;

1、导入相关jar包:

                               spring-core-3.2.0.jar;spring-web-3.2.0.jar;spring-webmvc-3.2.0.jar;common-annotations.jar;commons-fileupload-1.2.2.jar;spring-beans-3.2.0.RELEASE.jar。

2、在web.xml配置DispatcherServlet,拦截匹配的请求;(初始化过程中默认WEB-INF文件夹下寻找名为[servlet-name]-servlet.xml,也可加入参数classpath指定)

     

 <servlet>     
     <servlet-name>spring</servlet-name>     
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>     
     <load-on-startup>1</load-on-startup>     
 </servlet>     
 <servlet-mapping>     
     <servlet-name>spring</servlet-name>  <!-- 这里在配成spring,下边也要写一个名为spring-servlet.xml的文件,主要用来配置它的controller -->   
     <url-pattern>*.do</url-pattern>     
 </servlet-mapping>  
  <welcome-file-list>
    <welcome-file>/userInfo.jsp</welcome-file>
  </welcome-file-list>

3、配置[servlet-name]-servlet.xml

   

 <context:annotation-config />   
       <!-- 把标记了@Controller注解的类转换为bean -->     
      <context:component-scan base-package="com.test.Controllers" />     
  <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 --><!--     
      <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />     
	   <bean  id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"     
          p:prefix="/WEB-INF/view/" p:suffix=".jsp" />     
       -->
       <!-- 配置视图解析器默认的属性文件是classpath下的:views.properties -->
<bean id="resourceBundleViewResolver"	class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
		<property name="basename" value="views" >
		</property>
</bean>
       <!-- 通过setViewClass方法,可以指定用于该解析器生成视图使用的视图类 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
		p:viewClass="org.springframework.web.servlet.view.JstlView"
		p:prefix="/WEB-INF/" p:suffix=".jsp"/>
      <!-- 文件上传配置 -->
<bean id="multipartResolver"     
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver"     
          p:defaultEncoding="utf-8">  
          <property name="maxUploadSize" value="1024000000"/>  
          <property name="resolveLazily" value="true"/>
          </bean>

4、Controller类的编写

    

@Controller
@RequestMapping("/userInfo.do")
public class UserController {
	/**
         * 文件上传与获取user对象,这里没连数据库只是将值获取,文件上传目录下
	 * @param user 
	 * @param request
	 * @param files 文件组
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(params="method=saveUser")
    public ModelAndView  saveUser(User user,HttpServletRequest request,@RequestParam("fileName")MultipartFile[] files ) throws Exception{
		ModelAndView mav=new ModelAndView();
		System.out.println(user.getUserName()+"密码"+user.getUserPwd());
		mav.addObject("message","成功!");
		mav.addObject("user",user);
		//List<MultipartFile>files=mRequest.getFiles("fileName");
		String uploadpath = request.getSession().getServletContext().getRealPath("/");
		System.out.println(uploadpath);
		//System.out.println(files.isEmpty());
		for (MultipartFile multipartFile : files) {
			 if (multipartFile.isEmpty()) continue;
			 System.out.println(multipartFile.getOriginalFilename());
			  FileOutputStream fileOS = new FileOutputStream(uploadpath  + multipartFile.getOriginalFilename());
	            fileOS.write(multipartFile.getBytes());
	            System.out.println(fileOS);
	            fileOS.close();
		}
		/*FileOutputStream fileOS = new FileOutputStream(uploadpath+file.getOriginalFilename());
        fileOS.write(file.getBytes());
        System.out.println(fileOS);
        fileOS.close();*/
		mav.setViewName("userView");//设置返回的视图,具体页面将会在views.properties里设置
		return mav;
    }

5、jsp页面的编写,采用注解方式,无需配置其他配置,与struts2一样,将input name属性与java bean对应,参数自动封装。

     

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
  </head>
  <body>
     <form id="addUserInfoForm" action="<%=request.getContextPath()%>/userInfo.do?method=saveUser" method="post" enctype="multipart/form-data">
    <input name="userName"  value="${user.userName}"/>
      <input name="userPwd" value="${user.userPwd}"/>
      <input type="file" name="fileName">
      <input type="file" name="fileName">
      <input type="submit"  value="提交"/>
    </form> 
  </body>
</html>

6、配置views.properties(默认在classpath下找)

userView.(class)=org.springframework.web.servlet.view.JstlView

userView.url=/WEB-INF/userInfo.jsp

以上完成了文件上传和User信息的获取。

二、下面简单贴出文件下载代码

  

	/**
	 * 文件下载
	 * @param request
	 * @param response
	 * @return 由于只是测试,很多信息都是手动写死的,凑合着看。
	 * @throws Exception
	 */
	@RequestMapping(params="method=downLoadFile")
	public ModelAndView downLoadFile(HttpServletRequest request,HttpServletResponse response) throws Exception{
		BufferedInputStream bis = null;  
        BufferedOutputStream bos = null;  
       // String downLoadPath="rr.sql";
        String realName="rr.sql"; //设置下载文件名字
        String fileName=request.getParameter("fileName");  //获取完整的文件名
        System.out.println(fileName);
        long fileLength=new File(fileName).length(); 
        String ctxPath = request.getSession().getServletContext().getRealPath("/");  
        response.setContentType("application/octet-stream");
        response.setHeader("Content-disposition", "attachment; filename="  
                + new String(realName.getBytes("utf-8"), "ISO8859-1"));  
        response.setHeader("Content-Length", String.valueOf(fileLength));
        bis = new BufferedInputStream(new FileInputStream(fileName));  
        bos = new BufferedOutputStream(response.getOutputStream());  
        byte[] buff = new byte[2048];  
        int bytesRead;  
        while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {  
            bos.write(buff, 0, bytesRead);  
        }  
        bis.close();  
        bos.close();  
		ModelAndView mav=new ModelAndView();
		return null;
	}
    JSP下载页面

   

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
  </head>
  <body>
     <form id="addUserInfoForm" action="<%=request.getContextPath()%>/userInfo.do?method=saveUser" method="post" enctype="multipart/form-data">
      <a href="<%=request.getContextPath()%>/userInfo.do?method=downLoadFile&fileName=F:\Server\apache-tomcat-6.0.36\webapps\SpringMVC\rr.sql">下载</a>
      <input type="submit"  value="提交"/>
    </form> 
  </body>
</html>
     上面的参数fileName直接写的,因为没有连数据库。

三、ajax请求json数据

      

 步骤一:加入json jar包 示例:ackson-core-asl-1.7.2.jar ,jackson-mapper-asl-1.7.2.jar

  步骤二:spring的配置文件中加入:<mvc:annotation-driven/>(HttpMessageConverter需开启)

  步骤三:在返回的对象上加@ResponseBody  将内容或对象作为 HTTP 响应正文返回,并调用适合HttpMessageConverter的Adapter转换对象,写入输出流。(开启这个注释后AnnotationMethodHandlerAdapter将会初始化以下7个转换器ByteArrayHttpMessageConverter
StringHttpMessageConverter
ResourceHttpMessageConverter
SourceHttpMessageConverter
XmlAwareFormHttpMessageConverter
Jaxb2RootElementHttpMessageConverter
MappingJacksonHttpMessageConverter---spring默认的json协议由Jackson完成




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值