标签:允许 webapp param framework jsp 数据库连接池 ons loading url
本文通过一个简单的登陆实例实现Spring MVC的流程,同时整合 MyBatis使用,流程是这样的:
1、访问一个URL进入登陆界面
2、输入正确的用户名和密码,成功则进入index页面,否则留在登陆页
一、配置web.xml
创建好WEB项目之后的第一步就是配置web.xml文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 5 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 6 <display-name>Archetype Created Web Application</display-name> 7 <!-- Spring MVC配置 --> 8 <!-- 配置spring IoC配置文件路径 --> 9 <context-param> 10 <param-name>contextConfigLocation</param-name> 11 <param-value>/WEB-INF/applicationContext.xml</param-value> 12 </context-param> 13 14 <!--配置ContextLoaderListener 用以初始化Spring IoC容器 ??如果不在此处注册,则在DispatcherServlet初始化的时候会对它进行初始化,建议ioc先于DispatcherServlet进行初始化 --> 15 <listener> 16 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 17 </listener> 18 19 <!-- 配置DispatcherServlet :spring mvc会根据servlet-name配置,找到/WEB-INF/dispatcher-servlet.xml作为配置文件载入web工程中 --> 20 <servlet> 21 <servlet-name>dispatcher</servlet-name> 22 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 23 <!--这个配置项用来控制这个servlet的加载时间:当值>=0时,表示容器启动时就加载,值越小优先级越高;当<0时,表示当该servlet被请求时才会加载;??值为整数 --> 24 <!--使dispatcher在服务启动的时候就进行初始化 --> 25 <load-on-startup>2</load-on-startup> 26 </servlet> 27 28 <!--servlet拦截配置 --> 29 <servlet-mapping> 30 <servlet-name>dispatcher</servlet-name> 31 <url-pattern>/</url-pattern> 32 </servlet-mapping> 33 34 <!-- 解决中文乱码 --> 35 <filter> 36 <filter-name>encodingFilter</filter-name> 37 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 38 <init-param> 39 <param-name>encoding</param-name> 40 <param-value>UTF-8</param-value> 41 </init-param> 42 </filter> 43 <filter-mapping> 44 <filter-name>encodingFilter</filter-name> 45 <url-pattern>/*</url-pattern> 46 </filter-mapping> 47 </web-app>
具体配置的内容已经在注释中说明。
二、配置Spring IoC
按照配置在/WEB-INF/目录下创建文件applicationContext.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans 6 http://www.springframework.org/schema/beans/spring-beans.xsd 7 http://www.springframework.org/schema/context 8 http://www.springframework.org/schema/context/spring-context-4.0.xsd"> 9 <!-- 使用注解驱动 --> 10 <context:annotation-config /> 11 12 <!-- 配置数据源--使用数据库连接池 --> 13 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 14 <property name="driverClassName" value="org.postgresql.Driver" /> 15 <property name="url" value="jdbc:postgresql://localhost:5433/postgres" /> 16 <property name="username" value="postgres" /> 17 <property name="password" value="hyc123" /> 18 <!-- 最大数据库连接数 --> 19 <property name="maxActive" value="100" /> 20 <!-- 最大空闲数,即等待连接数 --> 21 <property name="maxIdle" value="5" /> 22 <!-- 最大等待连接时间 --> 23 <property name="maxWait" value="10000" /> 24 </bean> 25 26 <!-- 集成mybatis --> 27 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 28 <property name="dataSource" ref="dataSource" /> 29 <!--注意??:classpath后面没有*号 --> 30 <property name="configLocation" value="classpath:mybatis-config.xml" /> 31 </bean> 32 33 <!-- 配置数据源事务管理器 --> 34 <bean id="transactionManager" 35 class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 36 <property name="dataSource" ref="dataSource"></property> 37 </bean> 38 39 <!-- 采用自动扫描方式创建mapper bean 注意??:第二个属性名为sqlSessionFactory,如果是sqlSessionFactoryBeanName启动时会报错 --> 40 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 41 <property name="basePackage" value="com.mvc.dao" /> 42 <property name="sqlSessionFactory" ref="sqlSessionFactory" /> 43 <property name="annotationClass" value="org.springframework.stereotype.Repository" /> 44 </bean> 45 </beans>
在上述的配置中集成了MyBatis,所以还要创建一个MyBatis的配置文件mybatis-config.xml
三、创建MyBatis配置文件mybatis-config.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <!-- mybatis的基本配置文件:主要配置基本的上下文参数和运行环境 --> 6 <configuration> 7 <!--设置 --> 8 <settings> 9 <!--缓存配置的全局开关:如果这里设置成false,那么即便在映射器中配置开启也无济于事 --> 10 <setting name="cacheEnabled" value="true" /> 11 <!--延时加载的全局开关 --> 12 <setting name="lazyLoadingEnabled" value="false" /> 13 <!-- 是否允许单一语句返回多结果集 --> 14 <setting name="multipleResultSetsEnabled" value="false" /> 15 <!-- 使用列标签代替列名,需要兼容驱动 --> 16 <setting name="useColumnLabel" value="true" /> 17 <!-- 允许JDBC自动生成主键,需要驱动兼容。如果设置为true,则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍能正常工作 --> 18 <setting name="useGeneratedKeys" value="false" /> 19 <!-- 指定MyBatis该如何自动映射列到字段或属性:NONE表示取消自动映射;PARTIAL表示只会自动映射,没有定义嵌套结果集和映射结果集;FULL会自动映射任意复杂的结果集,无论是否嵌套 --> 20 <setting name="autoMappingBehavior" value="PARTIAL" /> 21 <!-- 配置默认的执行器:SIMPLE是普通的执行器;REUSE会重用预处理语句;BATCH会重用语句并执行批量更新 --> 22 <setting name="defaultExecutorType" value="SIMPLE" /> 23 <!--设置超时时间:它决定驱动等待数据库响应的秒数,任何正整数 --> 24 <!-- <setting name="defaultStatementTimeout" value="25"/> --> 25 <!--设置数据库驱动程序默认返回的条数限制,此参数可以重新设置,任何正整数 --> 26 <!-- <setting name="defaultFetchSize" value="100" /> --> 27 <!-- 允许在嵌套语句中使用分页(RowBounds) --> 28 <setting name="safeRowBoundsEnabled" value="false" /> 29 <!-- 是否开启自动驼峰命名规则,即从a_example到aExample的映射 --> 30 <setting name="mapUnderscoreToCamelCase" value="true" /> 31 <!-- 本地缓存机制,防止循环引用和加速重复嵌套循环 --> 32 <setting name="localCacheScope" value="SESSION" /> 33 <!-- 当没有为参数提供特定JDBC类型时,为空值指定JDBC类型。某些驱动需要指定列的JDBC类型,多数情况直接用一般类型即可,如NULL/VARCHAR/OTHER --> 34 <setting name="jdbcTypeForNull" value="OTHER" /> 35 <!-- 指定触发延迟加载的方法,如equals/clone/hashCode/toString --> 36 <setting name="lazyLoadTriggerMethods" value="equals" /> 37 </settings> 38 <!--类型命名 --> 39 <!--别名:pojo对象的别名 --> 40 <typeAliases> 41 <!-- 对包进行扫描,可以批量进行别名设置,设置规则是:获取类名称,将其第一个字母变为小写 --> 42 <package name="com.mvc.pojo" /> 43 <package name="com.mvc.objectfactory" /> 44 <package name="com.mvc.bean" /> 45 <package name="com.mvc.dao" /> 46 </typeAliases> 47 <!--插件 --> 48 <!-- <plugins /> --> 49 <!-- 映射器 --> 50 <mappers> 51 <mapper resource="com/mvc/mapper/EmployeeMapper.xml" /> 52 </mappers> 53 54 </configuration>
四、创建页面
在webapp下新建一个名为jsp的文件夹,在该文件下创建一个登陆页login.jsp和欢迎页index.jsp
1??login.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <div style="marging-left: 20px; margin-top: 30px;"> 11 <form action="index" method="post"> 12 <label>用户名:</label><input type="text" name="username" value=""> 13 <label>密码:</label><input type="password" name="pwd" value=""> 14 <input type="submit" value="登陆"> 15 </form> 16 </div> 17 </body> 18 </html>
2??index.jsp
使用jstl标签库显示用户名
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 5 <html> 6 <head> 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 8 <title>Insert title here</title> 9 </head> 10 <body> 11 12 <div 13 style="position: absolute; top: 100px; left: 100px; color: red; font-size: x-large; float: left;">Hello <c:out value="${username}"></c:out></div> 14 15 </body> 16 </html>
上面的文件中红色加粗的部分是jstl标签库的导入和使用,在使用之前要将对应的jar包加到lib中。
五、创建控制器Controller
1 @Controller 2 @RequestMapping("/login") 3 public class LoginController { 4 5 @Autowired 6 @Qualifier("userService") 7 UserServiceImpl userService = null; 8 9 @RequestMapping(value = "/login", method = RequestMethod.GET) 10 public ModelAndView login() { 11 ModelAndView mv = new ModelAndView(); 12 mv.setViewName("login"); 13 return mv; 14 } 15 16 @RequestMapping(value = "/index", method = RequestMethod.POST) 17 public ModelAndView index(@RequestParam("username") String username, @RequestParam("pwd") String pwd) { 18 ModelAndView mv = new ModelAndView(); 19 String viewName = "login"; 20 if (null != username && null != pwd) { 21 boolean res = userService.checkUserInfo(username, pwd); 22 viewName = res ? "index" : "login"; 23 } 24 mv.setViewName(viewName); 25 mv.addObject("username",username); 26 return mv; 27 28 } 29 }
上面加粗的红色代码依次表示:
1、注解@Controller :告诉Spring MVC这是一个控制器,这样它就会接受请求并进行处理;
2、注解@RequestMapping("/login"):这个controller的方法URL,它从URL中的项目名后面开始;
3、注解@Autowired和注解@Qualifier是spring中的自动装配;
4、用在两个方法上的注解@RequestMapping用来定义这个方法的请求路径,它们和controller一起组成前端的访问URI,它还可以定义请求的方法类型,如果不定义value,则默认用方法名;
5、index方法中的注解@RequestParam用来获取前端传过来的参数;
上面的index方法中,会调用业务逻辑层,判断用户名和密码是否正确,根据结果来判断返回哪个视图,所以下一步是创建业务逻辑处理类。
六、处理业务逻辑
业务逻辑写在Service层,采用面向接口编程的方式,在service中还要调用数据库访问层mapper,所以接下来需要创建以下文件:
1??创建映射器接口
1 @Repository 2 public interface EmployeeMapper { 3 4 Employee getEmployByName(@Param("username") String username, @Param("pwd") String pwd); 5 }
因为使用的是MapperScannerConfigurer自动扫描mapper,所以需要加上注解@Repository
2??创建映射器文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 3 <mapper namespace="com.mvc.dao.EmployeeMapper"> 4 <resultMap id="BaseResultMap" type="com.mvc.pojo.Employee"> 5 <id column="id" jdbcType="INTEGER" property="id" /> 6 <result column="username" jdbcType="VARCHAR" property="username" /> 7 <result column="pwd" jdbcType="VARCHAR" property="pwd" /> 8 <result column="sex" jdbcType="VARCHAR" property="sex" /> 9 <result column="random" jdbcType="VARCHAR" property="random" /> 10 </resultMap> 11 <sql id="Base_Column_List"> 12 id, username, pwd, sex, random 13 </sql> 14 <select id="getEmployByName" resultMap="BaseResultMap"> 15 SELECT * FROM employee e WHERE e.username = #{username,jdbcType=VARCHAR} AND e.pwd = #{pwd,jdbcType=VARCHAR} 16 </select> 17 </mapper>
这里主要是根据用户名和密码查询一条数据,参数是前端传过来的,如果有则说明用户名密码正确;
3??创建业务逻辑层接口
1 public interface UserService { 2 3 public boolean checkUserInfo(String name, String pwd); 4 }
我的命名不太规范,其实命名成EmployeeService层次会比较分明,不过也无所谓,逻辑没问题就好了,还好??
4??创建业务逻辑实现类
1 @Service("userService") 2 public class UserServiceImpl implements UserService { 3 4 @Autowired 5 EmployeeMapper employeeMapper = null; 6 7 @Override 8 public boolean checkUserInfo(String name, String pwd) { 9 boolean res = false; 10 Employee e = employeeMapper.getEmployByName(name, pwd); 11 res = null != e ? true : false; 12 return res; 13 } 14 15 }
因为在controller中通过自动注解的方式获取了这个类的bean,所以此处使用注解@Service("userService")定义其名称。
好了,以上就是所有的配置和代码,下面通过页面访问login方法,如图:
正如在controller中配置的映射路径一样,访问时只要在基本路径中加上controller和方法的@@RequestMapping注解值即可;
因为我数据库中有一个名为张三,密码为zhangsan123的用户,所以我现在输入正确的用户名和密码看看结果:
从结果来看,当输入用户名密码点击登陆按钮时,请求URL变成了基本路径+controller+index方法的路径,并且登陆成功;下面输入一个错误的用户名呢?
输入李四之后页面继续停留在登陆页,至此,整个过程就完成了。这只是一个简单的例子,不过展示了整个Spring MVC项目搭建的完整流程,搭建过程中遇到了一些问题,其中需要注意的点我都在配置文件的注释中给出了。
标签:允许 webapp param framework jsp 数据库连接池 ons loading url
原文地址:https://www.cnblogs.com/hellowhy/p/9738064.html