这里没有用到项目管理工具例如SVN和maven
1.导入相关jar包
这里不做多余的解释了下载Spring和SpringMvc相关jar包
log4j,mysql相关包以及与mybatis-spring整合包,jstl包,数据源包,就可以了
2.编写目录层级
eg:
com.demo.controller
IndexController.java
com.demo.dao
UserMapper.java
UserMapper.xml
com.demo.entity
User.java
com.demo.service
UserService.java
UserServiceImpl.java
com.demo.test(用来进行测试)
如果任务需要还可以写一层VO
(com.demo.vo
QueryVo.java
)
3.创建source文件夹管理xml和一些数据库配置文件以及log4j
eg:
applicationContext-dao.xml (dao层管理)
<bean
//引用db.properties配置文件
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
p:location="classpath:db.properties" />
/*这段代码<import resource="applicationContext-service.xml"/>是用来做测试用的,如果确定没有问题不导入也行,区别在于是在哪里看一种在页面上调试一种在IDE控制台中代码上调试*/
<import resource="applicationContext-service.xml"/>
//dbcp数据源找到BasicDataSource类路径
<bean name="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</bean>
//通过Spring框架管理sqlsession并注入dataSource,配置一些mybatis中的配置
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
p:dataSource-ref="dataSource"
p:typeAliasesPackage="com.demo.entity"
p:configLocation="classpath:mybatis-config.xml"
/>
//开启mapper接口扫描只要mapper接口和mapper.xml在一起默认会采用当前mapper接口名开头小写
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
p:basePackage="com.demo.dao" />
applicationContext-service.xml (service层管理)
//扫描service层spring注解
<context:component-scan base-package="com.demo.service" />
applicationContext-trans.xml (事物管理)
<!-- 事务管理器 -->
//开启事物管理器
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 引入数据源 ,因为web.xml中配置了Spring配置扫描,所以这里可以用ref引用-->
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 通知 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- 传播行为 -->
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="find*" propagation="SUPPORTS" read-only="true" />
<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
</tx:attributes>
</tx:advice>
<!-- 切面 -->
<aop:config>
<aop:advisor advice-ref="txAdvice"
//定义切面
pointcut="execution(* com.demo.service.*.*(..))" />
</aop:config>
mybatis-config.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>
<!-- 加入自己想配置的代码 基础搭建代码为空也即可,前面dao配置已经配置过了-->
</configuration>
db.properties (数据库配置文件)
log4j.properties (log4j文件)
SpringMvc.xml (SpringMvc的配置控制controller层)
<!-- 注解扫描 -->
<context:component-scan base-package="com.demo.controller" />
<!-- 注解驱动,帮我们配置最新的 处理器适配器 和 处理器解析器 -->
<mvc:annotation-driven />
<!-- 视图解析器 ,InternalResourceViewResolver常用于.jsp视图解析-->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp"
/>
<!--/WEB-INF/jsp/下 以.jsp结尾的文件 -->
4.编写web.xml
(1)首先要进行加载Spring容器加入监听器
<!-- 加载spring容器 -->
<context-param>
<param-name>contextConfigLocation</param-name>
/*扫描applicationContext-*.xml (*通配符) */
<param-value>classpath:applicationContext-*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
(2)配置SpringMvc前端控制器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>SpringProject4</display-name>
<welcome-file-list>//程序默认地址
<welcome-file>/WEB-INF/jsp/login.jsp</welcome-file>
</welcome-file-list>
<!-- SpringMvc配置前端控制器 -->
<servlet>
<servlet-name>Spring</servlet-name>
/*指定SpringMvc前端控制器*/
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
/*扫面Spring-mvc配置文件,只要是spring配置文件路径全使用classpath: 形式*/
<param-value>classpath:SpringMvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Spring</servlet-name>
<url-pattern>*.action</url-pattern>//路径方式可自定义只要符合规格即可eg:/*
</servlet-mapping>
(3)配置基本的 Filter过滤器
<!-- Filter过滤器 配置post请求乱码 -->
<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>
</web-app>
到此web.xml配置完毕。
5.编写各个包
(1)pojo包
package com.demo.entity;
public class User {
private int userId;
private String userName;
private String password;
private String email;
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
private String address;
}
(2)dao
package com.demo.dao;
import org.apache.ibatis.annotations.Param;
import com.demo.entity.User;
import com.demo.vo.QueryVo;
public interface UserMapper {
User selectLogin1(User user);
User selectLogin2(@Param("userName")String userName,@Param("password")String password);
User selectLogin3(QueryVo queryVo);
}
同包下的mapper.xml
(写了一些简单的代码)
<?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="com.demo.dao.UserMapper">
<select id="selectLogin1" parameterType="user" resultType="user">
select * from user where userName=#{userName} and password=#{password}
</select>
<select id="selectLogin2" resultType="user">
select * from user where userName=#{userName} and password=#{password}
</select>
<select id="selectLogin3" resultType="user" parameterType="com.demo.vo.QueryVo">
select * from user where userName=#{user.userName} and password=#{user.password}
</select>
</mapper>
(3)service下
package com.demo.service;
import org.apache.ibatis.annotations.Param;
import com.demo.entity.User;
import com.demo.vo.QueryVo;
public interface UserService {
User selectLogin1(User user);
User selectLogin2(@Param("userName")String userName,@Param("password")String password);
User selectLogin3(QueryVo queryVo);
}
service实现类
package com.demo.service;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.demo.dao.UserMapper;
import com.demo.entity.User;
import com.demo.vo.QueryVo;
@Transactional
@Service(value="userService")
public class UserServiceImpl implements UserService {
@Resource(name="userMapper")
private UserMapper userMapper;
@Override
public User selectLogin1(User user) {
// TODO Auto-generated method stub
return userMapper.selectLogin1(user);
}
@Override
public User selectLogin2(String userName, String password) {
// TODO Auto-generated method stub
return userMapper.selectLogin2(userName, password);
}
@Override
public User selectLogin3(QueryVo queryVo) {
// TODO Auto-generated method stub
return userMapper.selectLogin3(queryVo);
}
}
(4)controller
package com.demo.controller;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.demo.entity.User;
import com.demo.service.UserService;
import com.demo.vo.QueryVo;
//Spring框架Controller注解也就是action
@Controller
@RequestMapping("/user") //访问地址路径
public class IndexController {
@Resource(name="userService")//jdk自带注解
private UserService userService;
@RequestMapping("/log1") //访问地址路径/user/log1
public String login1(User user,Model model){
User user1 = userService.selectLogin1(user);
if(user1!=null){
model.addAttribute("msg", "登录成功");
}else{
model.addAttribute("msg", "登录失败");
}
return "msg"; //返回String类型SpringMvc把这个String当成逻辑视图的地址
//返回值也可以是ModelAndView
}
//SpringMvc会自动转换基本数据类型但是要求表单name值与下面属性名相同
@RequestMapping("/log2")
public String login2(@RequestParam String userName,@RequestParam String password
,Model model){
//RequestParamp配置一些传参数的要求其中有一个默认属性required为true即必须填写
User user = userService.selectLogin2(userName, password);
if(user!=null){
model.addAttribute("msg", "登录成功");
}else{
model.addAttribute("msg", "登录失败");
}
return "msg";
}
//
@RequestMapping("/log3")
public String login3(QueryVo queryVo,Model model){
User user = userService.selectLogin3(queryVo);
if(user!=null){
model.addAttribute("msg", "登录成功");
}else{
model.addAttribute("msg", "登录失败");
}
return "msg";
}
}
(5)Vo
package com.demo.vo;
import com.demo.entity.User;
/*Vo的作用比较好
本人理解:
SpringMvc会自动帮你进行【拆】与【装】
拆:Mapper.xml中通常传入对象引用直接写对象的属性即可,
而用了Vo这个类会帮拆除一层那么就到了Vo中的属性
在mapper.xml中自己写入条件
eg:userName=#{user.userName}
装:form表单input标签中的name为Vo属性的属性的属性的属性......
eg:name="user.userName"
他就会帮你装入Vo属性中的User类中的userName属性
*/
public class QueryVo {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
(6)自定义的测试
package com.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.demo.entity.User;
import com.demo.service.UserService;
public class UserTest {
//这里面能狗调用applicationContext-dao.xml是因为上面部分导入了service层的XML为了做测试成没成功
@Test
public void run1(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-dao.xml");
UserService userService = (UserService)ac.getBean("userService");
User user = userService.selectLogin2("1141193930","12312300a");
if(user==null){
System.out.println("用户名密码错误");
}else{
System.out.println("登录成功");
}
}
}
WEB-INF/jsp/jsp简单页面
login.jsp
<form action="${pageContext.request.contextPath }/user/log1" method="post">
账号:<input type="text" name="userName"/><br>
密码:<input type="text" name="password"/><br>
<input type="submit" value="登录"/>
</form>
<hr/>
<form action="${pageContext.request.contextPath }/user/log2" method="post">
账号:<input type="text" name="userName"/><br>
密码:<input type="text" name="password"/><br>
<input type="submit" value="登录"/>
</form>
<hr/>
<form action="${pageContext.request.contextPath }/user/log3" method="post">
账号:<input type="text" name="user.userName"/><br>
密码:<input type="text" name="user.password"/><br>
<input type="submit" value="登录"/>
</form>
msg.jsp页面测试是否接收成功
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
消息:${msg}
</body>
</html>
层级目录:
启动程序进行测试
开启concat服务器
打开页面成功
页面跳转并判断成功