restful风格
-
需要指定前端控制器的url-mapping 为 /
-
配置静态资源文件的处理 <mvc:default-servlet-handler />
-
在地址栏参数的位置使用占位符 {占位符key} 在参数接收的位置使用@PathVariable(占位符key)
后台返回值
-
跳转页面 转发或者重定向 一定指向页面 传递数据使用request容器
a.返回ModelAndView viewName设置成跳转页面的字符串 传递数据 addObject(key,value)
b.直接返回String 就是跳转页面的字符串 传递数据request.setAttribute(key,value) -
ajax只获取数据 没有页面跳转 response.getWriter().print()
a.必须要加 @ResponseBody 指定我们响应 类似 response.getWriter().print()
b.springMVC支持原本的传递JSON字符串的方式(springMVC中的HandlerAdapter中可以设置message-converters(转换器) 指定了fastjson的支持可以直接返回任何对象)
上传文件和图片
-
文件上传的路径
a.将路径设置成项目的目录 (简单,能直接访问到图片 导致项目越来越大 不好维护)
b.设置虚拟路径
图片访问目录 == 图片的实际目录
idea配置虚拟路径
1.使用tomcat自带的配置文件配置虚拟路径 在host 标签中配置一下内容
<Context path="/pic" docBase=“e://xxx/” />
path代表虚拟路径 docBase代表实际路径
2.使用idea的部署 来部署虚拟路径
在tomcat配置 deployment中指定实际路径,在路径的下面指定虚拟路径 -
文件上传 fileUpload组件
a.加入jar包 common-fileupload common-io
b.将upload组件配置到spring容器中去 见配置文件
c.编写文件上传页面
form表单
1.设置 enctype=“multipart/form-data”
2.设置请求模式为post
ajax上传文件
1.获取表单的formData对象,参数是表单的DOM对象
2.调用ajax
type:post
contentType: false
processData: false
data:表单的formData对象
d.后台控制层使用MultipartFile 来接收上传的文件(获取文件的文件名,获取上传的实际路径(properties工具类实现),得到上传文件的实际目录)
MultipartFile.transferTo 复制文件 -
多文件上传
将MultipartFile设置成数组 后台循环即可
示例
mvc-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="com.igeek.action"></context:component-scan>
<!--处理器驱动-->
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<!-- 配置Fastjson支持 -->
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json</value>
</list>
</property>
<property name="features">
<!--
Fastjson的SerializerFeature序列化属性:
QuoteFieldNames———-输出key时是否使用双引号,默认为true
WriteMapNullValue——–是否输出值为null的字段,默认为false
WriteNullNumberAsZero—-数值字段如果为null,输出为0,而非null
WriteNullListAsEmpty—–List字段如果为null,输出为[],而非null
WriteNullStringAsEmpty—字符类型字段如果为null,输出为”“,而非null
WriteNullBooleanAsFalse–Boolean字段如果为null,输出为false,而非null
-->
<list>
<value>QuoteFieldNames</value>
<value>WriteMapNullValue</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--默认是jsp的视图-->
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<!-- 配置逻辑视图的前缀 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 配置逻辑视图的后缀 -->
<property name="suffix" value=".jsp" />
<!--前缀+视图字符串+后缀-->
</bean>
<!-- 对静态资源文件的访问 方案一 (二选一) -->
<mvc:default-servlet-handler />
<!--上传文件组件-->
<!--id固定multipartResolver-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--设置文件上传的大小-->
<property name="maxUploadSize" value="2000000"></property>
</bean>
</beans>
@Controller
@RequestMapping("/login")
public class LoginAction {
@RequestMapping("rest/{username}/{age}")
public ModelAndView getRestFul(@PathVariable("username") String username, @PathVariable("age") String age){
System.out.println(username + " " + age);
System.out.println("进入了后台");
ModelAndView view = new ModelAndView();
view.setViewName("login");
view.addObject("username",username);
view.addObject("age",age);
return view;
}
/*ajax获取后台数据*/
@RequestMapping("getName")
@ResponseBody
public List<ParBean> getName(){
ParBean par = new ParBean("xiaowang",10,"A");
ParBean par1 = new ParBean("xiaozhang",20,"B");
List<ParBean> list = new ArrayList<>();
list.add(par);
list.add(par1);
return list;
}
@RequestMapping("file")
public String fileUpload(@RequestParam("myFile") MultipartFile myFile,HttpServletRequest request){
//获取文件的文件名
String fileName =myFile.getOriginalFilename();
System.out.println(fileName);
//获取需要上传到的位置
String path = PropertiesUtil.getProp("REAL_PATH")+fileName;
File f = new File(path);
//文件复制
try {
myFile.transferTo(f);
} catch (IOException e) {
e.printStackTrace();
}
String xuniPath = PropertiesUtil.getProp("XUNI_PATH")+fileName;
request.setAttribute("pic",xuniPath);
return "success";
}
@RequestMapping("file1")
@ResponseBody
public String fileUpload1(@RequestParam("myFile") MultipartFile[] allFile){
if(allFile!=null){
for (MultipartFile myFile:allFile) {
//获取文件的文件名
String fileName =myFile.getOriginalFilename();
System.out.println(fileName);
//获取需要上传到的位置
String path = PropertiesUtil.getProp("REAL_PATH")+fileName;
File f = new File(path);
//文件复制
try {
myFile.transferTo(f);
} catch (IOException e) {
e.printStackTrace();
}
String xuniPath = PropertiesUtil.getProp("XUNI_PATH")+fileName;
}
}
return "";
}
}
796

被折叠的 条评论
为什么被折叠?



