********李守宏springmvc******** 3.== --springmvc一个controller实现多个方法 ----继承MultiActionController ----配置spring-servlet的bean 5==静态文件的访问 ----<!-- 静态资源访问 --> <mvc:resources location="/image/" mapping="/image/**"></mvc:resources> 6注解启用访问 -->开起注解 spring2-3以后会被代替 <!-- 开起注解使用注解 --> <context:component-scan base-package="com.tgb.controller"></context:component-scan> <!--找方法,找类 ,注解扫描包 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean> <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean> 7注解配置优化 --> <!-- 注解优化,mvc的配置,以上2.0,3.0会被取代 --> <!-- 开起注解 --> <mvc:annotation-driven/> 0.0:url重复会报错,貌似是我白天的错误,注意唯一标识 -->类上也可以使用注解 @Controller @RequestMapping(value="/user2") public class User2Controller { -->method=.post/.get去掉,可一省掉很多麻烦 -->value="/user" value也可以省去 @RequestMapping("/addUser") -->modelandview 也可以省掉 8springmvc参数传递 -->springmvc会自动匹配到后台和jspname一样的值并传递 -->鉴于每次都要使用request,我可以建一个基类,里面提供request,哈哈哈 -->web.xml强制编码格式 9->通过实体类的get set传递值,前台name和实体类中必须一致 9json ajax 传递数据 $(function(){ $("#add").click(function(){ var userName=$("#userName").attr("value"); var age=$("#age").attr("value"); var user={userName:userName,age:age} $.ajax({ url:"/springmvc/user/data/addUser", type:"post", data:user, success:function(data){ alert("userName--->"+data.userName+"age--->"+data.age); } }); }); }); 注意,会因为相对路径问题出错,可以右击图片属性查看地址看了解,见识啊 10-json传递数据到页面 使用printWriter 打印 String result = "{"userName":" "+ user.getUserName()+"","age":""+user.getAge()+""}"; PrintWriter out = response.getWriter();; //设置http相应类型 response.setContentType("application/json"); out.write(result); 11-文件上传 -->导入io和upload的jar包 -->enctype属性规定发送到服务器之前应该如何对表单数据进行编码 -->上传文件时form必须加enctype="enctype="multipart/form-data" -->配置xml <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize"><value>100000</value></property> <property name="defaultEncoding"><value>UTF-8</value></property> <property name="maxInMemorySize" value="40960"></property> </bean> -->文件上传必须采用post方式 get方式是用url提交,文件自然不是url 12上传文件优化,不推荐使用springmvc的上传,推荐使用jquery的上传,可以再客户端使用,减少web的压力 spring通过对servlet的httpservletrequest接口进行扩展,时期能够很好的处理文件上传,扩展后的几口名为 interface MultipartHtpServletRequest extends HttpServletRequest{ public MultipartFile getFile(String name); public Map getFileMap(); public Iterator getFileNames(); } @RequestMapping("upload2") public String upload2(HttpServletRequest request,HttpServletResponse response) throws Exception, IOException{ //定义解析器,实例化,解析springmvc的上下文 CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext()); //解析request,判断是否为Multipart类型数据 if(multipartResolver.isMultipart(request)){ //是则定义springmvc封装好的request MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest)(request); //拿文件,迭代器,封装好的 Iterator<String> iterator = multipartHttpServletRequest.getFileNames(); while(iterator.hasNext()){ //如果有根据迭代器中的下一个名字获取文件,MultipartFile是springmvc封装好的文件类 MultipartFile file = multipartHttpServletRequest.getFile((String)iterator.next()); if(file!=null){ String fileName = "demoUpload"+file.getOriginalFilename(); String path = "D:/"+fileName; //创建一个本地关联路径的文件对象 File localFile = new File(path); //将文件对象写到指定(本地)文件上,springmvc提供的方法 file.transferTo(localFile); //还可以拿到输入流,就可以拿到数据or文件 file.getInputStream(); } } } return "success"; } 13springmvc和spring集成 -->web.xml中的启动顺序 <context-param>->listener-filter-servlet <!-- Struts2的action由Spring来负责进行实例化 spring+struts2集成的关键点 --> <constant name="struts.objectFactory" value="spring" /> ->1:添加jar包,spring和springmvc用jar包类似 2:配置web.xml文件