• spring-mvc框架简单搭建


    1.坐标文件

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>cn.web</groupId>
        <artifactId>spring_mvc</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>war</packaging>
    
        <name>itheima_spring_mvc Maven Webapp</name>
        <!-- FIXME change it to the project's website -->
        <url>http://www.example.com</url>
    
        <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.32</version>
            </dependency>
            <dependency>
                <groupId>c3p0</groupId>
                <artifactId>c3p0</artifactId>
                <version>0.9.1.2</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.10</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.0.5.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>5.0.5.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>5.0.5.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>5.0.5.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.0.1</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>javax.servlet.jsp-api</artifactId>
                <version>2.2.1</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
                <version>2.9.0</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.9.0</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>2.9.0</version>
            </dependency>
            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>1.3.1</version>
            </dependency>
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.3</version>
            </dependency>
    
            <!--JdbcTemplate包-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>5.0.5.RELEASE</version>
            </dependency>
        </dependencies>
    </project>

    2.web.xml配置

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
    
        <!--配置SpringMVC的前端控制器:所有请求转发到spring-web的 DispatcherServlet 来处理-->
        <servlet>
            <servlet-name>DispatcherServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:spring-mvc.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>
    
        <!--配置全局过滤的filter:设置编码方式-->
        <filter>
            <filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
        <!--全局初始化参数 初始化加载Bean配置-->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml</param-value>
        </context-param>
    
        <!--配置监听器 在ContextLoaderListener监听器中完成bean配置加载到容器-->
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        
        <!--<servlet>-->
            <!--<servlet-name>userservlet</servlet-name>-->
            <!--<servlet-class>cn.web.servlet.UserServlet</servlet-class>-->
        <!--</servlet>-->
        <!--<servlet-mapping>-->
            <!--<servlet-name>userservlet</servlet-name>-->
            <!--<url-pattern>/user</url-pattern>-->
        <!--</servlet-mapping>-->
    </web-app>

    3.applicationContext.xml配置

    <?xml version="1.0" encoding="UTF-8"?>
    <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"
           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">
    
        <!--加载外部的properties文件-->
        <context:property-placeholder location="classpath:jdbc.properties"/>
    
        <!--配置数据源-->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="${jdbc.driver}"></property>
            <property name="jdbcUrl" value="${jdbc.url}"></property>
            <property name="user" value="${jdbc.username}"></property>
            <property name="password" value="${jdbc.password}"></property>
        </bean>
    
        <!--配置JdbcTemplate-->
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <property name="dataSource" ref="dataSource"></property>
        </bean>
    
    
        <!--手动配置3层-->
        <!--dao层注入-->
        <bean id="userDao" class="cn.web.dao.impl.UserDaoImpl">
            <property name="jdbcTemplate" ref="jdbcTemplate"></property>
        </bean>
    
        <!--server层注入-->
        <bean id="userServer" class="cn.web.Server.Impl.UserServerImpl">
            <property name="userDao" ref="userDao"></property>
        </bean>
    
    </beans>

    4.spring-mvc.xml配置

    <?xml version="1.0" encoding="UTF-8"?>
    <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 ">
    
        <!--Controller的组件扫描-->
        <context:component-scan base-package="cn.web">
            <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        </context:component-scan>
    
    
        <!--mvc注解驱动,直接返回json-->
        <mvc:annotation-driven></mvc:annotation-driven>
    
        <!--mvc找不到资源,交给servlet处理-->
        <mvc:default-servlet-handler></mvc:default-servlet-handler>
    
        <!--自定义异常处理器-->
        <bean class="cn.web.resolver.ExceptionResolver"/>
    
    </beans>

    5.Controller层

    package cn.web.controller;
    
    
    import cn.web.Server.UserServer;
    import cn.web.domain.User;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import java.util.List;
    
    /*
    * 注意事项:
    * 1.Controller层只能通过注解来注入,Server就只能通过自动注入方式获取
    * 2.这里server层、dao层都是通过xml注入,也可以通过注解注入
    * */
    @Controller
    @RequestMapping("/user")
    public class UserContoller {
    
        @Autowired
        private UserServer server;
    
        @RequestMapping("/findAll")
        @ResponseBody
        public List<User> findAll() {
            return server.findAll();
        }
    
        @RequestMapping("/findById")
        @ResponseBody
        public User findById(int id) {
            return server.findById(id);
        }
    
        @RequestMapping("/insert")
        @ResponseBody
        public Long insert(User user) {
            return server.insert(user);
        }
    
        @RequestMapping("/update")
        @ResponseBody
        public boolean update(User user) {
            return server.update(user);
        }
    
        @RequestMapping("/delete")
        @ResponseBody
        public boolean delete(User user) {
            return server.delete(user);
        }
    
        @RequestMapping("/paramList")
        @ResponseBody
        public List<User> delete(@RequestBody List<User> list) {
            return list;
        }
    }

    6.server层

    package cn.web.Server.Impl;
    
    import cn.web.Server.UserServer;
    import cn.web.dao.UserDao;
    import cn.web.domain.User;
    
    import java.util.List;
    
    public class UserServerImpl implements UserServer {
        private UserDao dao;
    
        public void setUserDao(UserDao userDao) {
            this.dao = userDao;
        }
    
        public List<User> findAll() {
            return dao.findAll();
        }
    
        public User findById(int id) {
            return dao.findById(id);
        }
    
        public long insert(User user) {
            return dao.insert(user);
        }
    
        public boolean update(User user) {
            return dao.update(user);
        }
    
        public boolean delete(User user) {
            return dao.delete(user);
        }

    7.dao层

    package cn.web.dao.impl;
    
    import cn.web.dao.UserDao;
    import cn.web.domain.User;
    import org.springframework.dao.DataAccessException;
    import org.springframework.jdbc.core.BeanPropertyRowMapper;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.jdbc.core.PreparedStatementCreator;
    import org.springframework.jdbc.support.GeneratedKeyHolder;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import java.util.List;
    
    public class UserDaoImpl implements UserDao {
    
        private JdbcTemplate template;
    
        public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
            this.template = jdbcTemplate;
        }
    
    
    
        public List<User> findAll() {
            String sql="SELECT * FROM USER";
            List<User> query = template.query(sql, new BeanPropertyRowMapper<User>(User.class));
            return query;
        }
    
        public User findById(int id) {
            User user=null;
            try {
                String sql="SELECT * FROM USER WHERE id=?";
                user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class),id);
            }catch (DataAccessException e){
                e.printStackTrace();
            }
    
            return user;
        }
    
        public long insert(final User user) {
            final String sql="INSERT INTO USER (id,username,PASSWORD) VALUES(NULL,?,?)";
    
            //1.创建PreparedStatementCreator
            PreparedStatementCreator creator=new PreparedStatementCreator() {
                //2.使用原始jdbc完成PreparedStatement组件
                public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
                    PreparedStatement preparedStatement=connection.prepareStatement(sql,PreparedStatement.RETURN_GENERATED_KEYS);
                    preparedStatement.setObject(1,user.getUsername());
                    preparedStatement.setObject(2,user.getPassword());
                    return preparedStatement;
                }
            };
    
            //3.创建 GeneratedKeyHolder
            GeneratedKeyHolder  keyHolder=new GeneratedKeyHolder();
            //4.插入数据
            template.update(creator, keyHolder);
            //5.获得自增长id
            long l = keyHolder.getKey().longValue();
            //int update = template.update(sql, user.getUsername(), user.getPassword());
            return l;
        }
    
        public boolean update(User user) {
            String sql="UPDATE USER SET username=?, PASSWORD=? WHERE ID=?";
            int update = template.update(sql, user.getUsername(), user.getPassword(), user.getId());
            return update>0;
        }
    
        public boolean delete(User user) {
            String sql ="DELETE FROM USER WHERE id=?";
            int update = template.update(sql, user.getId());
            return update>0;
        }
    }

    8.全局异常捕获过滤器

    package cn.web.resolver;
    
    import org.springframework.web.servlet.HandlerExceptionResolver;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    public class ExceptionResolver implements HandlerExceptionResolver {
        public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
    
            ModelAndView modelAndView = new ModelAndView();
            System.out.println("错误日志");
            /*
            * 错误写入log4日志
            * */
            e.printStackTrace();
    
    
            modelAndView.setViewName("/error.html");
            return modelAndView;
        }
    }
  • 相关阅读:
    高精度模板 支持各种运算 c++
    404 页面不存在
    多柱汉诺塔问题“通解”——c++
    高精度gcd
    404 页面不存在
    如何开启音乐二倍速?不下载其他软件【win10】
    如何随时学习数学
    洛谷P1004 方格取数
    Title
    Title
  • 原文地址:https://www.cnblogs.com/zhuyapeng/p/13896087.html
Copyright © 2020-2023  润新知