SpringMVC学习笔记

什么是springMVC?

它是基于mvc开发模式的框架,用来优化控制器,它是spring家族的一员,springMVC也具备IOC和AOP功能

什么是MVC?

它是一种开发模式,它是模型视图控制器的简称,所有的web应用都是基于MVC开发

Model:模型层,包含实体类,业务逻辑层,数据访问层

View:视图层,html,javaScript,vue等都是视图层,用来显示数据

Controller:控制器,它是用来接收客户端的请求,并返回相应到客户端的组件,Servicet就是组件

创建一个SpringMVC项目步骤是什么?

第一步:创建一个空工程,创建maven项目,使用webapp模板

第二步:创建好的maven项目,目录有缺失,我们自行创建好

src目录下创建test目录

main目录下创建java和resources目录

test目录下也建java和resources目录

并修改目录的属性

第三步:修改pom.xml文件

添加springMVC依赖,添加servlet依赖

所有web请求都是基于servlet

 在<build>指定资源文件

<build>
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.xml</include>
          <include>**/*.properties</include>
        </includes>
      </resource>
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>**/*.xml</include>
          <include>**/*.properties</include>
        </includes>
      </resource>
    </resources>
  </build>

第四步:在resources目录下新建springmvc.xml文件

 在webapp目录下新建admin目录,在admin目录下新建main.jsp

 第五步:webapp-->WEB-INF-->web.xml文件版本太低删掉,重新创建一个,file-->project Settings-->选中模块下的web减号删除,在点加号新建一个,随便改一个名字,不能用web,新建完成后在重命名为web.xml

 第六步:

创建一个DemoAction类

类的上方加@Controller注解,该类代表控制器类(控制层/表现层)

*方法上添加@RequestMapping("/ demo"),在方法上添加这个注解是为这个方法注册一个可以访问的路径

*类上添加@RequestMapping("/ demo"),相当于包名,访问方法上的路径,还需要添加类上的路径

解决post请求中文乱码问题

首先在web.xml文件中配置中文编码过滤器

设置以下三个参数的值

private java.lang.String encoding;
private boolean forceRequestEncoding;
private boolean forceResponseEncoding;

<filter>
        <filter-name>filter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <!--
        private java.lang.String encoding;
        private boolean forceRequestEncoding;
        private boolean forceResponseEncoding;
        -->
        <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>filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

处理器的方法返回值

使用@Contoller注解的处理器的方法,其返回值常用的有四种类型:

第一种:ModelAndView,返回数据和视图对象,现在用的少

第二种:String,客户端资源的地址,自动拼接前缀后缀,还可以屏蔽自动拼接字符串,可以指定返回的路径。

第三种:无返回值void,一遍用于ajax请求

第四种:返回对象类型,返回json格式的对象,自动将对象或集合转为json,使用jackson工具进行转换,必须要添加jackson依赖,一般用于ajax请求。

-------------------------------------------------------

完成ajax请求访问服务器,返回学生集合

1)添加jackson依赖

 <!--添加jackson-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.8</version>
    </dependency>

2)在webapp目录下新建js目录,添加jQuery函数库

3)在index.jap页面上导入函数库。

4)在cation上添加注解@ResponseBody,用来处理ajax请求。

5)在resources目录下springmvc.xml文件中添加驱动注解<mvc:annotationdriven/>,它用来解析@ResponseBody注解

  <!--添加包扫描-->
    <context:component-scan base-package="com.bjpowernode.controller"></context:component-scan>
    <!--
    不用添加视图解析器,因为处理的是ajax请求
    ajax请求必须添加注解驱动,专门用来处理ajax请求
    -->
    <mvc:annotation-driven></mvc:annotation-driven>

--------------------------------------------------------------

 在springmvc中我们已经设置好默认的跳转路径(前缀后缀)那么想跳转到其他路径怎么办?

resources目录下的springmvx.xml配置文件中已经配置好默认的跳转路径,即前缀和后缀

 <!--添加包扫描-->
    <context:component-scan base-package="com.bjpowernode.controller"></context:component-scan>
    <!--添加视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--前缀-->
        <property name="prefix" value="/admin/"></property>
        <!--后缀-->
        <property name="suffix" value=".jsp"></property>
    </bean>

这种情况下就用到了两个字符串:重定向:redirect: 和 请求转发:forward:

在bjpowernode-->controller目录下类中添加以下方法

请求转发到JSP页面forward:用法

 @RequestMapping("/five")
    public String five(){
        System.out.println("请求转发到页面");
        return "forward:/admin/login.jsp";
    }

请求转发到action,forward:用法

@RequestMapping("/two")
    public String two(){
        System.out.println("请求转发到action");
        //forward可以屏蔽前缀后缀的的拼接,请求转发就使用它
        return "forward:/otch.action";//默认是请求转发,使用视图解析器拼接前缀后缀进行跳转
    }

使用redirect:重定向到JSP页面

@RequestMapping("/four")
    public String four(){
        System.out.println("重定向页面");
        return "redirect:/admin/main.jsp";
    }

使用redirect:重定向到action

@RequestMapping("/three")
    public String three(){
        System.out.println("重定向action");
        return "redirect:/otch.action";
    }

-----------------------------------------------------------

日期处理

日期的提交处理

A单个日期处理:要使用注解@DateTimeFormat,此注解必须搭配springmvc.xml文件中的<mvc:annotationdriven>标签

首先在jsp页面写一个表单提交一个日期

 由于日期是不是被服务器直接接收的,所以要使用@DateTimeFormat注解,使用这个注解需要在springmvc.xml文件中注册

@DateTimeFormat注解的patter属性是设置注入日期的样式,JSP页面输入一个日期,jsp页面输入的日期其实是字符串,而@DateTimeFormat注解负责将时间字符串转换为时间注入方法形参

由于java中的时间,输出比较丑,所以用SimpleDateFormat类来美化一下

对比

 B.类中全局日期处理

优点:只需要添加一个@InitBinder注解,不需要去springmvc.xml文件中注册注解驱动。

注册一个注解,用来解析本类中所有的日期类型,自动转换

@InitBinder注解:数据绑定,能够进行日期,数字,货币以及自定义类型的转换

initBinder方法参数WebDateBinder:数据绑定

registerCustomEditor方法:注册一个自定义的转换器

 registerCustomEditor(转换的类型,转换的工具)方法参数两个,第一个Date.class第二个

new CustomDateEditor(日期格式sf,是否允许为空是)

日期格式:

 日期的回显处理

在from表单发送一个时间字符串到服务器,然后在返回到JSP页面显示,或者直接从数据库读取学生的出生日期显示到JSP页面

首先在,带有@RequestMapping注解的方法上添加形参,HttpServletResquest request

使用request.setAttribute方法把时间放到请求域中,在JSP页面使用${}取出

 

 ----------------------------------------------------------

Date时间类型的数据怎么显示在页面页面上

创建Student类,属性有String name   Date  shengri

1.首先在index.jsp页面写一个a标签

2.写studentAge,路径的方法

在studentAge方法中,创建了4个stundet对象,并把student对象放到List集合中,再把List集合方法request请求域中,最后在show.jsp页面展示List集合

3. show.jsp页面展示List集合

使用<c:forEach>循环List集合,输出内容,由于没有处理日期格式,输出内容为

 输出日期格式很丑,需要修改日期格式,于是用到了jstl标签,

使用jstl标签,需要导入依赖

<!--导入jstl依赖-->
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

然后再JSP页面导入核心标签库和导入jstl格式化标签库

 最后在使用<fmt:formatDate value="${日期} patter="日期格式yyyy-MM-dd""></fmt:formatDate>标签

 对比

----------------------------------------------------------------

springmvc拦截器

针对请求和响应的额外的处理,在请求和响应的过程中添加预处理,后处理和最终处理。

拦截器执行的时机

1.preHandil():在请求被处理之前进行操作

2.postHandle():在请求被处理之后,但是结果还没有渲染前进行操作,可以改变响应结果。

3.afterCompletion:所有的请求响应结束后执行善后工作,清理对象,关闭资源

拦截器实现的两种方式

继承HandlerInterceptorAdapter的父类

实现HandlerInterceptor接口,推荐使用现实接口方式

拦截器的实现步骤

1.改造登陆方法,在session中存储用户信息,用于进行权限验证

把用户的账号放到session会话域中

 2.开发拦截器的功能,实现HandlerInterceptor接口,重写preHandle()方法

创建一个类,现实HandlerInterceptor接口,重写preHandler方法

在方法中判断session会话域中是否为空,如果session中有用户名,则请求转发到登陆页面

 3.在springmvc.xml文件中注册拦截器

 没有登陆账号,访问受保护的jsp或者访问action,都是请求转发到登陆页面,登陆之后,可以访问受保护的jsp页面

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没有腰的嘟嘟嘟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值