ToB企服应用市场:ToB评测及商务社交产业平台
标题:
SpringMVC
[打印本页]
作者:
何小豆儿在此
时间:
2023-7-12 16:37
标题:
SpringMVC
SpringMVC
Spring集成web环境
集成步骤
导入相关的坐标,spring的和web的
<dependencies>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/><dependency>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <groupId>org.springframework</groupId>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <artifactId>spring-context</artifactId>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <version>5.3.6</version>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/></dependency>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/><dependency>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <groupId>mysql</groupId>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <artifactId>mysql-connector-java</artifactId>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <version>5.1.32</version>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/></dependency>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/><dependency>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <groupId>c3p0</groupId>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <artifactId>c3p0</artifactId>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <version>0.9.1.2</version>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/></dependency>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/><dependency>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <groupId>cn.6tail</groupId>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <artifactId>nlf-mini-plugin-druid</artifactId>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <version>1.0.0</version>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/></dependency>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/><dependency>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <groupId>junit</groupId>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <artifactId>junit</artifactId>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <version>4.12</version>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <scope>test</scope>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/></dependency>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/><dependency>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <groupId>org.springframework</groupId>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <artifactId>spring-test</artifactId>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <version>5.3.6</version>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/></dependency>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/><dependency>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <groupId>org.junit.jupiter</groupId>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <artifactId>junit-jupiter</artifactId>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <version>RELEASE</version>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <scope>compile</scope>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/></dependency>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/><dependency>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <groupId>junit</groupId>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <artifactId>junit</artifactId>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <version>RELEASE</version>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <scope>compile</scope>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/></dependency>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/><dependency>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <groupId>javax.servlet</groupId>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <artifactId>javax.servlet-api</artifactId>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <version>4.0.1</version>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/></dependency>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/><dependency>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <groupId>javax.servlet.jsp</groupId>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <artifactId>javax.servlet.jsp-api</artifactId>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <version>2.3.3</version>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/></dependency>
</dependencies>
复制代码
spring相关配置
添加一个web包,用来写javaweb
在web.xml配置相关类
配置tomcat,部署项目运行
ApplicationContext应用上下文的获取方式
之前每次我们都是通过new的方式创建的应用上下文,这样的弊端是在大项目中配置文件会加载多次,应用上下文被创建多次,繁琐且不节省资源
所以我们运用监听器来只创建一次,所有的用这一个容器,所以:
创建一个实现ServletContext监听器的类:
public class ContextLoader implements ServletContextListener {
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>@Override
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>public void contextInitialized(ServletContextEvent sce) {
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>//将这个应用上下文对象存储在servletContext域中
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>ServletContext servletContext = sce.getServletContext();
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>servletContext.setAttribute("app",app);
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>}
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>@Override
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>public void contextDestroyed(ServletContextEvent sce) {
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>}
}
复制代码
web层中:
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>ServletContext servletContext = req.getServletContext();
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>ApplicationContext app = (ApplicationContext) servletContext.getAttribute("app");
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>UserService userService= app.getBean(UserService.class);
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>userService.save();
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>}
复制代码
web.xml:
<listener>
<listener-class>com.myspring.listener.ContextLoader</listener-class>
</listener>
<context-param>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/><param-name>contextConfigLocation</param-name>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/><param-value>classpath:applicationContext.xml</param-value>
</context-param>
复制代码
Spring提供的获得应用上下文的工具
没错,上面又白写了。。。
上面的不用手动实现。Spring提供了一个监听器ContextLoaderListener就是对该功能的封装
我们只需要做两件事:
在web.xml中配置ContextLoaderListener监听器(需要先导入spring-web坐标)
pom.xml:
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/><dependency>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <groupId>org.springframework</groupId>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <artifactId>spring-web</artifactId>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <version>5.3.6</version>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/></dependency>
复制代码
web.xml:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
复制代码
通过WebApplicationCintextUtils(一个客户端工具)获得应用上下文对象ApplicationContext
web层中:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>ServletContext servletContext = req.getServletContext();
//关键
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>WebApplicationContext app = WebApplicationContextUtils.getWebApplicationContext(servletContext);
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>UserService userService= app.getBean(UserService.class);
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>userService.save();
}
复制代码
SpringMVC简介
SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于SpringFrameWork的后续产品,已经融合在 Spring Web Flow 中。 SpringMVC已经成为目前最主流的MVC框架之一。
SpringMVC的作用:作为前端控制器,控制请求的共有行为,在传统的JavaEE技术中,只使用Servlet作为控制器,当每个功能都需要一个servlet程序相似功能也无法分开封装,另外,传统的开发模式也存在其它使用不便利的做法。
SpringMVC解决了V-C交互的问题,即V(View:视图)和C(Controller:控制器)之间的交互问题,具体表现在:用户可以通过视图将请求数据提交给服务器端的控制器,而控制器可以接收到相关数据后进行处理,最终,给予客户端某个视图,使得客户端得到响应结果。当然springMVC作为控制器还是需要servlet
SpringMVC开发步骤
导入SpringMVC
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/><dependency>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <groupId>org.springframework</groupId>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <artifactId>spring-webmvc</artifactId>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <version>5.3.6</version>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/></dependency>
复制代码
配置servlet在web.xml
<servlet>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/><servlet-name>DispatcherServlet</servlet-name>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/><init-param>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <param-name>contextConfigLocation</param-name>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <param-value>classpath:spring-mvc.xml</param-value>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/></init-param>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/><load-on-startup></load-on-startup>
</servlet>
<servlet-mapping>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/><servlet-name>DispatcherServlet</servlet-name>
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/><url-pattern>/</url-pattern>
</servlet-mapping>
复制代码
编写pojo(controller)
将controller使用注解(@Controller)配置到Spring容器中
//表明是一个控制类bean实例
@Controller
public class UserController {
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>//地址映射,当跳转/quick,访问此方法
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>@RequestMapping("/quick")
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>public String save(){
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>System.out.println("Controller save running");
// <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>要跳转的视图
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>return "success.jsp";
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>}
}
复制代码
配置组件扫描(配置到Spring-mvc.xml:springmvc的配置文件,需要自己在resources创建)
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>
复制代码
发送请求测试
流程:
SpringMVC的组件解析
SpringMVC内部执行流程
SpringMVC注解解析
@RequestMapping(""):地址映射
常用参数:value:就是路径
method:可以指定请求方式。值为枚举方式在RequestMethod
params:指定请求参数条件,例如:
@Controller@RequestMapping("/user")public class UserController { <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>//当地址为localhost:8080/user/quick时访问该方法 <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>@RequestMapping("/quick") <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>public String save(){ <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>System.out.println("Controller save running");// <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>要跳转的视图:localhost:8080/user/success.jsp,当前的前一级目录下的该资源(/success.jsp.就代表当前web应用下,即webapp目录下) <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>return "success.jsp"; <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>}}
复制代码
SpringMVC配置解析
在上面的代码中,最后我们renturn了jsp页面
return "success.jsp";
//实际上本句为
return "forword:success.jsp";
//forword在本处意思为转发(不改变url地址访问资源),默认为forword
return "redirect:/success.jsp"
//redirect:代表重定向
复制代码
我们还可以在springmvc中配置视图解析器,来避免写前缀后缀
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>这样一来我们可以这样写:return "/success"代表:/jsp/success.jsp
复制代码
总结:
SpringMVC的数据响应
SpringMVC的数据响应方式:
页面跳转
直接返回字符串
通过ModelAndView对象返回
回写数据
直接返回字符串
返回对象或集合
页面跳转
直接返回字符串:此种方式会将返回的字符串与视图解析器的前后缀拼接后跳转:不多说,上面例子就是用的这种
通过ModelAndView对象返回
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>@RequestMapping("/quick2") <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>public ModelAndView save2(){ <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>ModelAndView modelAndView = new ModelAndView();// <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>设置模型数据:可以在jsp中通过el表达式获得 <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> modelAndView.addObject("username","lihua");// <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>设置视图名称 <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>modelAndView.setViewName("index.jsp"); <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>return modelAndView; <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>}//这种也可以,和上面一样只不过是springmvc为你注入了一个bean实例 <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>@RequestMapping("/quick2") <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>public ModelAndView save2(ModelAndView modelAndView){// <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>设置模型数据 <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>modelAndView.addObject("username","lihua");// <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>设置视图名称 <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>modelAndView.setViewName("index"); <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>return modelAndView; <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>}
复制代码
返回字符串的形式也可以传递参数:
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>@RequestMapping("/quick") <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>public String save(Model model){ <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>model.addAttribute("username","lihua");// <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>要跳转的视图 <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>return "success"; <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>}//另外代替Model,还可以传HttpServletRequest等作为参数
复制代码
在index.jsp中
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
这个isELIgnored="false"表示el表达式可用
<html>
<body>
<h2>Hello World!${username}</h2>
</body>
</html>
复制代码
回写数据
直接返回字符串
在web阶段我们需要回写字符串直接response.getWriter().print("hello world"),在Controller直接通过参数注入response对象,但是还有更加简单的方法:返回字符串
@RequestMapping("/quick")//告知springmvc返回的用于回写数据的字符串,不要进行页面跳转@ResponseBodypublic String save(HttpServletResponse response){ <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>return "helloworld";}
复制代码
返回对象或集合
当我们需要传递一个对象或者集合时,可以先转成json格式字符串再return
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>@RequestMapping("/quick")// <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>还是要写这个注解,因为还是返回的字符串数据 <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>@ResponseBody <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>public String save(HttpServletResponse response) throws IOException { <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>UserServiceImpl userService = new UserServiceImpl(); <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>userService.setAge(10); <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>userService.setName("lihua");// <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>使用json转换工具将对象转换为json格式字符串再返回 <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>ObjectMapper objectMapper = new ObjectMapper(); <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>String string = objectMapper.writeValueAsString(userService); <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>return string;
复制代码
需要导入的json转换工具坐标:
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> com.fasterxml.jackson.core <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> jackson-core <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> 2.11.4 <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> com.fasterxml.jackson.core <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> jackson-databind <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> 2.11.4 <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> com.fasterxml.jackson.core <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> jackson-annotations <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> 2.11.4 <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>
复制代码
springmvc不需要我们自己来转json字符串,有更加简便的方式:
返回对象和集合。
首先需要我们在spring配置文件中进行一些配置(配置处理器映射器):
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>
复制代码
控制类中:
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>@RequestMapping("/quick")// <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>还是要写这个注解,因为还是返回的字符串数据 <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>@ResponseBody <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>public UserServiceImpl save(HttpServletResponse response) throws IOException { <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>UserServiceImpl userService = new UserServiceImpl(); <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>userService.setAge(10); <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>userService.setName("lihua"); <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>return userService; <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>}
复制代码
配置太麻烦了,可以通过mvc的注解驱动代替上述配置,没错,又又又有更加简便的操作:
在springmvc的配置文件中:
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>注意:注解驱动对应的命名空间必须是xmlns:mvc="http://www.springframework.org/schema/mvc"其他两个不行
复制代码
SpringMVC获取请求数据
获取请求参数
获取基本类型参数:直接通过参数获得:
@RequestMapping("/quick")@ResponseBodypublic void save(String username,int age) throws IOException { <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>System.out.println(username); <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>System.out.println(age);}
复制代码
url:
结果:
获得pojo类型参数:pojo参数的属性名和请求参数的name一致,参数值会自动映射匹配
@Controllerpublic class UserController { <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>private int age; <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>private String name;// <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>还需要getter和setter <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>public int getAge() { <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>return age; <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>} <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>public void setAge(int age) { <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>this.age = age; <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>} <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>public String getName() { <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>return name; <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>} <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>public void setName(String name) { <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>this.name = name; <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>} <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>@RequestMapping("/quick") <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>@ResponseBody <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>public void save(UserController userController) throws IOException { <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>System.out.println(userController.getAge()); <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>System.out.println(userController.getName()); <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>}}
复制代码
输入与结果:
获得数组类型参数:和基本数据类型完全一致,函数参数和请求的参数一致就可以
获得集合类型参数:需要被包装到一个pojo类中才可以
public class VO { <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>public List getStringList() { <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>return stringList; <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>} <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>public void setStringList(List stringList) { <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>this.stringList = stringList; <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>} <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>private List stringList;}
复制代码
@RequestMapping("/quick")@ResponseBodypublic void save(VO vo) throws IOException { <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>System.out.println(vo.getStringList());}
复制代码
当请求为Ajax可以通过指定contenttype为json格式,通过注解直接获取集合数据:
ajax:
@RequestMapping("/quick")@ResponseBodypublic void save(@RequestBody List userList) throws IOException { <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>System.out.println(userList);}
复制代码
开放静态资源;
无法访问的js文件等静态资源是配置
<mvc:annotation-driven conversion-service="ConversionService"/><mvc:resources mapping="js/**" location="/js/"></mvc:resources><context:component-scan base-package="com.myspring.controller"/>
复制代码
这样也可以:在springmvc找不到资源是交给tomcat处理
[/code][size=4]解决低版本tomcat请求数据为中文乱码问题[/size]
如果tomcat版本较低,当配置post请求时,数据为中文会出现乱码,所以我们通过配置过滤器来解决
[code] CharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> encoding <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>UTF-8 <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>CharacterEncodingFilter /*
复制代码
参数绑定注解@requestParam
当请求的参数名称和controller方法参数不一致时,就需要通过@requestParam注解显示
@RequestMapping("/quick")@ResponseBody//当我在url中输入的是namepublic void save(@RequestParam("name") String username) throws IOException { <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>System.out.println(username);}
复制代码
@requestParam注解的参数:
获得Restful风格的参数
Restful是一种软件架构风格、设计风格,而不是标准,只是提供一组设计原则和约束条件。主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更加简洁,更有层次等
HTTP协议中四个表示操作方式的动词:
具体实例:
自定义类型转换器
SpringMVC实际上已经具备了一些常用的类型转换器,例如客户端提交的字符串被转换成int型进行参数设置
但是可能并不完全满足我们的需求,所以我可以自定义类型转换器:
开发步骤:
定义转换器实现Converter接口
public class DataConverter implements Converter { <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>public Date convert(String dateStr) { <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>//将日期字符串转换为日期对象 <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>Date date = null; <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>try { <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>date = format.parse(dateStr); <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>} catch (ParseException e) { <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>e.printStackTrace(); <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>} <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>return date; <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>}}
复制代码
在配置文件中声明转换器
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>
复制代码
在中引用转换器
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>
复制代码
结果:
获得Servlet的相关API
前面说过,直接在相关方法参数位置注入,就不在赘述
获取请求头
使用@RequestHeader
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>@RequestMapping("/quick") <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>@ResponseBody// <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>将请求头的user-agent一行赋值给参数 <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>public void save(@RequestHeader(value = "User-Agent") String userAgent) throws IOException { <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>System.out.println(userAgent); <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>}
复制代码
@CookieValue获得Cookie的值:
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>@RequestMapping("/quick") <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>@ResponseBody// <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>通过cookie的id获得cookie的值 <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>public void save(@CookieValue(value = "JSESSIONID") String cookie) throws IOException { <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>System.out.println(cookie); <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>}
复制代码
文件上传
文件上传客户端要求:
单文件上传步骤:
导入fileupload和io坐标
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> commons-fileupload <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> commons-fileupload <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> 1.3.1 <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> commons-io <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> commons-io <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> 2.5 <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>
复制代码
配置文件上传解析器
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>
复制代码
编写文件上传代码
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>@RequestMapping("/quick") <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>@ResponseBody <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>//参数名必须与上传文件表单的各项name相同 <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>public void save(String username, MultipartFile uploadFile) throws IOException {// <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>获得文件名称 <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>String originalFilename = uploadFile.getOriginalFilename();// <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>保存文件到 <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>uploadFile.transferTo(new File("D:\"+originalFilename));
复制代码
我在创建multipartResolver 实例时报500错误,后来发现是tomcat中没有commons-fileupload和commons-io的jar包,需要向tomcat下的lib目录手动导入上面那个两个坐标的包,另外可能jsp不识别el表达式需要在开头设置 isELIgnored="false"
多文件上传同理:
<mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>@RequestMapping("/quick") <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>@ResponseBody <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>//参数名必须与上传文件表单的各项name相同 <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>public void save(String username, MultipartFile uploadFile1,MultipartFile uploadFile2) throws IOException {// <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>获得文件名称 <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>String originalFilename = uploadFile1.getOriginalFilename(); <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>String originalFilename2 = uploadFile2.getOriginalFilename();// <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>保存文件到 <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>uploadFile2.transferTo(new File("D:\"+originalFilename)); <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/> <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>uploadFile1.transferTo(new File("D:\"+originalFilename)); <mvc:annotation-driven conversion-service="ConversionService"/><context:component-scan base-package="com.myspring.controller"/>}
复制代码
当然也可以把参数换成一个数组
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4