springmvc入门了解

SpringMVC

springmvc入门了解

springmvc表述层框架要解决的基本问题

  • 请求映射:让一个方法处理一个请求
  • 数据输入:获取请求参数
  • 类型转换:内置或者自定义类型转换器,对请求参数的类型进行转换
  • 数据校验:参数的非空校验
  • 视图界面:Thymeleaf
  • 请求分发:请求转发
  • 与域对象交互
  • 会话控制:Session
  • 过滤拦截:Filter
  • 异步交互
  • 文件上传
  • 文件下载

SpringMVC入门案例

Spring基本配置文件
<!-- 自动扫描包 -->
<context:component-scan base-package="com.atguigu.mvc.handler"/>
    
<!-- Thymeleaf视图解析器 -->
<bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
    <property name="order" value="1"/>
    <property name="characterEncoding" value="UTF-8"/>
    <property name="templateEngine">
        <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
            <property name="templateResolver">
                <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
    
                    <!-- 视图前缀 -->
                    <property name="prefix" value="/WEB-INF/templates/"/>
    
                    <!-- 视图后缀 -->
                    <property name="suffix" value=".html"/>
                    <property name="templateMode" value="HTML5"/>
                    <property name="characterEncoding" value="UTF-8" />
                </bean>
            </property>
        </bean>
    </property>
</bean>
命名规范

springmvc的规范没有什么要求,只要是JavaBean就可以了,一般默认Handler是请求处理器

加入日志记录sl4j记录仪

在handler类上声明一个成员类就可以了

private Logger logger = LoggerFactory.getLogger(this.getClass());
  • Logger:org.slf4j.Logger
  • LoggerFactory:org.slf4j.LoggerFactory

访问整体流程解析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QTz52a7I-1640176363870)(./img/001.png)]

常见注解

RequestMapping注解
RequestMapping注解(重点)

@RequestMapping

注解就是前端请求的url地址处理请求关联在一起,建立映射关系

指定请求方式
RequestMapping的method属性指定

http定义了八种请求方式,封装在SpringMVC中的枚举类

public enum RequestMethod {
    GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE
}

一般设置RequestMapping注解的method属性

//value属性表示匹配请求路径,method属性表示匹配请求方式
@RequestMapping(value = "/emp", method = RequestMethod.GET)
通过RequestMapping的进阶注解指定
原版进阶版
@RequestMapping(value = “/emp”, method = RequestMethod.GET)@GetMapping("/emp")
@RequestMapping(value = “/emp”, method = RequestMethod.POST)@PostMapping("/emp")
@RequestMapping(value = “/emp”, method = RequestMethod.PUT)@PutMapping("/emp")
@RequestMapping(value = “/emp”, method = RequestMethod.DELETE)@DeleteMapping("/emp")

RequestHeader注解

获取请求头的具体数据

@RequestMapping("/getHeader")
public String getHeaderValue(@RequestHeader("user-agent") String headerValue){
    //目标:获取user-agent请求头的信息,并且赋值给headerValue
    logger.debug(headerValue);
    return "target";
}
CookieValue注解

获取cookie的数据

@RequestMapping("/getCookie")
public String getCookieValue(@CookieValue(value = "JSESSIONID",defaultValue = "abc") String cookieValue){
    //目标:获取浏览器中的名为"JSESSIONID"的cookie的值,赋值给CookieValue参数
    logger.debug(cookieValue);
    return "target";
}

获取请求参数(重点)

一个参数名获取一个参数值
<a th:href="@{/param/one(userName='tom')}">一个名字一个值的情况</a><br/>
@RequestMapping("/oneParameter")
public String oneParameter(@RequestParam("username") String username){
    //最简单的方式获取单个请求参数:就是在handler方法中添加一个和请求参数名同名的参数,来接收请求参数
    //其实这个地方String username此处省略了一个注解 @RequestParam
    //@RequestParam("username")就是通过参数名获取请求参数
    logger.debug(username);
    return "target";
}

@RequestParam 注解的 required 属性:默认值为true,表示请求参数默认必须提供

一个参数名获取多个参数值
@RequestMapping("/multi")
public String oneNameMultiValue(@RequestParam("team")List<String> teamList){
    logger.debug(teamList.toString());
    //要使用什么类型来接收参数
    return "target";
}
实体类封装请求参数
@RequestMapping("/pojo")
public String parameterToPojo(Employee employee){
    //获取请求参数封装到Employee对象中:只需要保证Employee类中的属性和请求参数名一致
    logger.debug(employee.toString());
    return "target";
}
解决POST请求的中文字符乱码问题

到 web.xml 中配置 CharacterEncodingFilter 即可:

<!-- 配置过滤器解决 POST 请求的字符乱码问题 -->
<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    
    <!-- encoding参数指定要使用的字符集名称 -->
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    
    <!-- 请求强制编码 -->
    <init-param>
        <param-name>forceRequestEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
    <!-- 响应强制编码 -->
    <init-param>
        <param-name>forceResponseEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
使用Map封装请求参数
@RequestMapping("/map")
public String parameterToMap(@RequestParam Map map){
    //获取请求参数,封装到Map中:请求参数名就是map的key,请求参数值就是map的value
    logger.debug(map.toString());
    return "target";
}

访问静态资源(重点)

我们只需要在springMVC配置中加上一个配置就可以访问静态资源了

<!-- 加入这个配置,SpringMVC 就会在遇到没有 @RequestMapping 的请求时放它过去 -->
<!-- 所谓放它过去就是让这个请求去找它原本要访问的资源 -->
<mvc:default-servlet-handler/>
页面跳转控制
mvc:view-controller访问页面

,将请求转发到目标视图,除此之外没有任何其他代码。此时可以使用 SpringMVC 配置文件中的配置代替这样的 handler 方法。

访问Thymeleaf前后缀控制范围内的页面
<mvc:view-controller path="/index.html" view-name="portal"/>
访问Thymeleaf前后缀控制范围外的页面
<mvc:view-controller path="/test/redirect/command" view-name="redirect:/outter.html"/>

**加入 mvc:view-controller 配置后,其他正常 @RequestMapping 将失效。此时还是需要加入 mvc:annotation-driven 来解决。 **

SpringMVC使用域对象

请求域对象

将数据存入请求域对象
@RequestMapping("/testAttrOriginalRequest")
public String testAttrOriginalRequest(HttpServletRequest request){
    //目标:将数据存储到请求域对象,然后跳转到target页面
    //方式一:使用原始的request来完成
    request.setAttribute("username","aobama");
    return "target";
}

①使用Model对象往请求域中存储值

②在形参位置声明ModelMap类型变量,用于存储模型数据

③在形参位置声明Map类型变量,用于存储模型数据

④创建ModelAndView对象
ModelAndView modelAndView = new ModelAndView();

设置视图名称
modelAndView.setViewName(“target”);

SpringMVC 传入的 Model、ModelMap、Map类型的参数其实本质上都是 BindingAwareModelMap 类型的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V6KUCFLE-1640176363876)(./img/002.png)]

会话域对象

使用会话域最简单直接的办法就是使用原生的 HttpSession 对象

@RequestMapping("/attrSession")
public String attrSession(HttpSession httpSession){
    //目标:往会话域中存储数据
    httpSession.setAttribute("address","召唤师峡谷");
    return "target";
}
应用域

应用域同样是使用IOC注入的方式来操作:

@Autowired
private ServletContext servletContext;
@RequestMapping("/attr/application")
public String attrApplication() {
    
    servletContext.setAttribute("appScopeMsg", "i am hungry...");
    
    return "target";
}
1、Spring和SpringMVC的环境
  1. 依赖
  2. web.xml中的配置:servlet、filter
  3. springmvc配置文件:
    1. 包扫描:为了解析组件注解(IOC和依赖注入的主键)
    2. 配置Thymeleaf的模板解析器:为了解析Thymeleaf模板
    3. 加载MVC注解驱动:为了能够找到Handler方法处理请求
    4. 处理静态资源
    5. view-controller:访问页面
  4. 注解:
    1. IOC和依赖注入的注解: Controller、Service、Repository、AutoWired
    2. SpringMVC的注解: RequestMapping(请求映射)、RequestParam(获取请求参数)
  5. 日志
2. 持久层环境
  1. 依赖
  2. springmvc配置文件中配置持久层:
    1. 数据源
    2. JdbcTemplate
  3. 持久层实现类的方法中执行各个SQL语句
3. 测试环境
  1. 依赖
  2. Spring整合Junit
  3. 测试:需要测试业务层和持久层的代码

功能总结

1. 单纯跳转页面的功能

例如:访问首页、访问add.html添加页面,使用view-controller标签实现

2. 查询功能

例如:查询电影列表、更新前的数据回显。它们的具体步骤:

  1. 需不需要带参数:就要看有没有查询条件
  2. 获取参数:
  3. 调用业务层的方法进行查询,获取到查询的数据
  4. 将查询到的数据存储到请求域
  5. 返回逻辑视图
  6. 在Thymeleaf页面获取请求域的数据,并展示
3. 增删改功能

例如:添加电影、删除电影、更新电影。它们的具体步骤:

  1. 肯定需要带参数:Thymeleaf的路径携带参数、以及表单携带参数
  2. 参数乱码:配置过滤器解决
  3. 获取参数:单个参数、POJO封装参数
  4. 调用业务层的方法进行增删改
  5. 重新查询所有: 使用redirect指令重定向访问查询所有电影的功能
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringMVC是一个基于Java的Web框架,可以帮助我们快速地构建Web应用程序。下面是一个简单的SpringMVC入门示例,让你了解如何编写一个SpringMVC应用程序。 1. 创建Maven项目 首先,我们需要创建一个Maven项目。在Eclipse或者IntelliJ IDEA中,选择创建一个Maven项目,并添加SpringMVC依赖。 2. 配置web.xml 在web.xml文件中,我们需要配置DispatcherServlet。DispatcherServlet是SpringMVC的核心组件,它拦截所有的请求并将它们分发给相应的控制器。 ```xml <web-app> <display-name>Spring MVC Application</display-name> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/dispatcherServlet-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> ``` 在这个配置中,我们将DispatcherServlet的URL模式设置为"/",这意味着它将拦截所有的请求。contextConfigLocation参数指定了Spring配置文件的路径。 3. 配置dispatcherServlet-servlet.xml 在dispatcherServlet-servlet.xml文件中,我们需要配置SpringMVC相关的组件,例如控制器、视图解析器等等。 ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <context:component-scan base-package="com.example.controller" /> <mvc:annotation-driven /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> </beans> ``` 在这个配置中,我们使用<context:component-scan>扫描了我们的控制器所在的包。我们还使用<mvc:annotation-driven>启用了SpringMVC的注解驱动,并使用<bean>配置了一个视图解析器,将逻辑视图名映射为物理视图。 4. 编写控制器 ```java @Controller public class HelloController { @RequestMapping("/") public String hello() { return "hello"; } } ``` 在这个示例中,我们编写了一个控制器,使用@RequestMapping注解将"/"映射到hello()方法。hello()方法返回一个字符串"hello",这代表逻辑视图名。当DispatcherServlet收到一个请求并且URL匹配"/"时,它将会调用hello()方法,然后将逻辑视图名"hello"映射为物理视图名"/WEB-INF/views/hello.jsp"。 5. 编写视图 在"/WEB-INF/views/"目录下创建一个名为"hello.jsp"的JSP文件。 ```html <!DOCTYPE html> <html> <head> <title>Hello SpringMVC</title> </head> <body> <h1>Hello SpringMVC</h1> </body> </html> ``` 6. 运行应用程序 将应用程序部署到一个Web服务器上,并访问"http://localhost:8080/",你应该会看到一个"Hello SpringMVC"的页面。 以上就是一个简单的SpringMVC入门示例,希望能帮助你快速入门SpringMVC框架。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值