何小豆儿在此 发表于 2023-7-12 16:37:00

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的方式创建的应用上下文,这样的弊端是在大项目中配置文件会加载多次,应用上下文被创建多次,繁琐且不节省资源
所以我们运用监听器来只创建一次,所有的用这一个容器,所以:
https://img2023.cnblogs.com/blog/2844064/202307/2844064-20230712154404117-677462537.png
创建一个实现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
https://img2023.cnblogs.com/blog/2844064/202307/2844064-20230712154529676-549858512.png
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"/>publicString 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"/>
[*]发送请求测试
https://img2023.cnblogs.com/blog/2844064/202307/2844064-20230712154637420-545106914.png
流程:
https://img2023.cnblogs.com/blog/2844064/202307/2844064-20230712154656342-413948279.png
SpringMVC的组件解析

SpringMVC内部执行流程

https://img2023.cnblogs.com/blog/2844064/202307/2844064-20230712154744044-2011419162.png
https://img2023.cnblogs.com/blog/2844064/202307/2844064-20230712154801311-785295369.png
SpringMVC注解解析

@RequestMapping(""):地址映射
常用参数:value:就是路径
​                                method:可以指定请求方式。值为枚举方式在RequestMethod
​                                params:指定请求参数条件,例如:
https://img2023.cnblogs.com/blog/2844064/202307/2844064-20230712154819206-2104386535.png

@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"/>publicString 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总结:
https://img2023.cnblogs.com/blog/2844064/202307/2844064-20230712154842077-1598406019.png
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"/>publicString 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返回的用于回写数据的字符串,不要进行页面跳转@ResponseBodypublicString 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"/>publicString 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的注解驱动代替上述配置,没错,又又又有更加简便的操作:
https://img2023.cnblogs.com/blog/2844064/202307/2844064-20230712154917839-140627362.png
在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获取请求数据

获取请求参数

https://img2023.cnblogs.com/blog/2844064/202307/2844064-20230712154933423-437952292.png

[*]获取基本类型参数:直接通过参数获得:
@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:
https://img2023.cnblogs.com/blog/2844064/202307/2844064-20230712154950521-45288055.png
结果:
https://img2023.cnblogs.com/blog/2844064/202307/2844064-20230712155004575-1587933162.png
[*]获得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"/>}}输入与结果:
https://img2023.cnblogs.com/blog/2844064/202307/2844064-20230712155030989-1908707860.png
https://img2023.cnblogs.com/blog/2844064/202307/2844064-20230712155045146-1571549964.png

[*]获得数组类型参数:和基本数据类型完全一致,函数参数和请求的参数一致就可以
https://img2023.cnblogs.com/blog/2844064/202307/2844064-20230712155059869-744788901.png

[*]获得集合类型参数:需要被包装到一个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:
https://img2023.cnblogs.com/blog/2844064/202307/2844064-20230712155129746-581255578.png
@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处理
解决低版本tomcat请求数据为中文乱码问题

如果tomcat版本较低,当配置post请求时,数据为中文会出现乱码,所以我们通过配置过滤器来解决
CharacterEncodingFilterorg.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注解的参数:
https://img2023.cnblogs.com/blog/2844064/202307/2844064-20230712155152938-1122166095.png
获得Restful风格的参数

Restful是一种软件架构风格、设计风格,而不是标准,只是提供一组设计原则和约束条件。主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更加简洁,更有层次等
HTTP协议中四个表示操作方式的动词:
https://img2023.cnblogs.com/blog/2844064/202307/2844064-20230712155212419-1087763696.png
具体实例:
https://img2023.cnblogs.com/blog/2844064/202307/2844064-20230712155230184-654466152.png
自定义类型转换器

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"/>结果:
https://img2023.cnblogs.com/blog/2844064/202307/2844064-20230712155247454-9611934.png
https://img2023.cnblogs.com/blog/2844064/202307/2844064-20230712155259880-1660996473.png
获得Servlet的相关API

前面说过,直接在相关方法参数位置注入,就不在赘述
https://img2023.cnblogs.com/blog/2844064/202307/2844064-20230712155316384-1953147279.png
获取请求头


[*]使用@RequestHeader
https://img2023.cnblogs.com/blog/2844064/202307/2844064-20230712155333996-1306450256.png
    <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的值:
https://img2023.cnblogs.com/blog/2844064/202307/2844064-20230712155350675-1068413185.png
    <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"/>}文件上传

文件上传客户端要求:
https://img2023.cnblogs.com/blog/2844064/202307/2844064-20230712155408026-1659226022.png
单文件上传步骤:

[*]导入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"/>}当然也可以把参数换成一个数组

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: SpringMVC