ssm框架整合和一个注册案例(这个案例我只是记录一下,我自己看懂就可以)

ssm框架整合:

1.配置springMVC

a. 导入相关jar包,这里我不做演示

b. 配置web.xml中的前端控制器SpringMVC全站乱码解决过滤器

 <!--前端控制器-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:springmvc.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>

    <!--配置全站乱码解决过滤器-->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

c. 配置springMVC.xml中的包扫描注解方式mvc视图解析器

    <!--配置包扫描-->
    <context:component-scan base-package="cn.tedu.controller"/>
    <!--注解方式mvc-->
    <mvc:annotation-driven/>
    <!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

2.配置spring

a.在核心配置文件applicationContext.xml中开启spring三件套

<!--配置包扫描-->
    <context:component-scan base-package="cn.tedu"/>
    <!--注解方式DI-->
    <context:annotation-config/>
    <!--注解方式AOP-->
    <aop:aspectj-autoproxy/>

b.在web.xml中配置监听文件,这样就可以在web项目启动的时候,自动启动spring容器初始化了。

<!--配置监听器,在tomcat容器初始化时初始化Spring容器-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:applicationContext.xml</param-value>
    </context-param>

3.配置mybatis

a.创建一个sqlMapConfig.xml文件,之前配置mybatis时也有该文件,在整合里也需要他,但是里面都不写东西,创建了就可以。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

</configuration>

b.在applicationContext.xml中配置下面写的很清楚,需要做解释的是MyBatis MapperBean扫描器,负责为MapperBean生成实现类这一段配置的代码,后面会做解释。
事务管理器是之前spring整合jdbc的重点,只要写了这个配置,就可以在需要添加事务的方法上添加@Transactional()来进行事务的管理。

   <!-- 配置数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql:///easymall"></property>
        <property name="user" value="root"></property>
        <property name="password" value="root"></property>
    </bean>

    <!-- 整合MyBatis -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="configLocation" value="classpath:/sqlMapConfig.xml"></property>
        <property name="mapperLocations" value="classpath:/mappers/*.xml"></property>
    </bean>

    <!-- MyBatis MapperBean扫描器,负责为MapperBean生成实现类 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="cn.tedu.mapper"></property>
    </bean>

    <!-- 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <tx:annotation-driven/>

c.写一个bean,然后创建该bean的映射文件,还要写一个该映射文件的实现接口。这里就来解释上面的那个代码,当在dao层使用UserMapper的DI,那么就是通过上面的代码来生成实例对象,注入到UserMapper中,然后通过调用UserMapper中的方法,来调用到映射文件中的sql,同时映射文件中的resultType="cn.tedu.domain.User"表明了封装类型,所以查出来的数据就封装到了user这个对象中,然后再返回去。

//映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.tedu.mapper.UserMapper">
    <select id="queryUserByUsername" resultType="cn.tedu.domain.User">
        select * from user where username = #{username};
    </select>
    <insert id="addUser">
        insert into user values (null,#{username},#{password},#{nickname},#{email});
    </insert>
    <select id="queryUserByUsernameAndPsw" resultType="cn.tedu.domain.User">
        select * from user where username = #{username} and password=#{password};
    </select>
</mapper>
//映射文件的接口
public interface UserMapper {
    /**
     * 根据用户名查找用户
     */
    public User queryUserByUsername(@Param("username") String username);

    /**
     * 新增用户
     */
    void addUser(User user);

    /**
     * 根据用户名密码查询用户
     */
    User queryUserByUsernameAndPsw(@Param("username") String username,@Param("password") String password);
}

注册案例:

a.前端:
关于信息验证:
非空验证:前端使用jQuery进行非空验证,同时后端也需要,因为有的人可能会绕过前端来进行表达那的提交。
输入信息合法性验证:和非空验证同理。
信息已存在验证:这里通过Ajax来实现,使用blur事件来绑定输入框,进行后台验证。

前端非空验证,合法性验证:
在这里插入图片描述
重复性验证:
在这里插入图片描述
再让我们看看表单提交的地址,可以看到这是一个action结尾的地址,意思就是这是一个controller,表单是提交到了控制器那里。
在这里插入图片描述
b. controller层
需要注意的是,注册的这个jsp页面是放在web-inf目录下的,是无法直接通过浏览器的地址栏获取的,所以就需要写一个控制器来跳转这个页面。
这里使用的RESTFul风格来获取到这个jsp的名字,然后再内部通过转发的方式,让视图解析器来让浏览器获取到这个页面。
在这里插入图片描述

再可以成功访问到这个注册页面后,填写完正确的注册信息,点击提交,就会去寻找/user/regist.action这个地址,这个地址可以看出,它也是一个控制器的地址,通过requestMapping注解过的地址,来找到对应的controller。
在这里插入图片描述
找到该controller后,就开始进行如下图一操作。这里说一下@valid注解,这是一个springMVC自带的表单验证,当你使用了它后,表示user需要进行表单验证,在user类中是这么个样子的如图二,在属性上加上这类注解,就表示该属性需要验证,如果验证有问题,就放入message中,后面就可以从err对象中获取异常类型和信息。
图一:
在这里插入图片描述
图二:
在这里插入图片描述

c. service层:
userMapper是一个接口,它是映射文件userMapper.xml中的sql,之前在配置文件中,给他配置了实例,所以这里实际上是一个底层给的实例来调用方法,方法就是userMapper.xml中写的sql。
在这里插入图片描述
d. DAO 层
下图就是写slq的映射文件,和映射文件对应的接口形式,其中红框的都是要一致的,查出来的数据没有异常就会自动封装,然后层层上报。

映射文件:
在这里插入图片描述
映射文件的接口形式:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42596778/article/details/106117379