一 环境:XP3+Oracle10g+MyEclipse6+(Tomcat or WebLogic92)+JDK1.5
二 工程文件: Spring3+MyIbatis3
工程图片:
jar下载:http://dl.iteye.com/topics/download/d209389e-ecac-390e-85c7-c08849f50348
三 具体代码如下:
1 数据库文件
Java代码
- create table USERS
- (
- id VARCHAR2(50) not null,
- name VARCHAR2(50),
- age INTEGER,
- sex VARCHAR2(1),
- address VARCHAR2(200),
- password VARCHAR2(20)
- )
- insert into users (id,name,age,sex,address,password)VALUES("123456789","sprng",23,"1","北京大学","123");
2 Java相关文件
A UserMapper.java
Java代码
- package com.liuzd.ssm.mapper;
- import java.util.List;
- import com.liuzd.ssm.entity.User;
- public interface UserMapper{
- public int checkUserExits(User user);
- public void addUser(User user);
- public void editUser(User user);
- public void delUser(String userId);
- public List<User> getUserList();
- public User getUserByUid(String userId);
- }
B UserMapper.xml文件
Java代码
- <?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.liuzd.ssm.mapper.UserMapper">
- <resultMap type="com.liuzd.ssm.entity.User" id="userMap">
- <id property="id" column="id"/>
- <result property="name" column="name"/>
- <result property="age" column="age"/>
- <result property="sex" column="sex"/>
- <result property="address" column="address"/>
- <result property="password" column="password"/>
- </resultMap>
- <select id="checkUserExits" parameterType="com.liuzd.ssm.entity.User" resultType="int">
- <![CDATA[
- select count(*) from users where name=#{name} and password=#{password}
- ]]>
- </select>
- <select id="getUserList" resultType="java.util.List" resultMap="userMap">
- <![CDATA[
- select * from users
- ]]>
- </select>
- <select id="getUserByUid" parameterType="string" resultType="com.liuzd.ssm.entity.User">
- <![CDATA[
- select * from users where id=#{id}
- ]]>
- </select>
- <update id="editUser" parameterType="com.liuzd.ssm.entity.User">
- <![CDATA[
- update users set name=#{name},age=#{age},sex=#{sex},address=#{address},password=#{password} where id=#{id}
- ]]>
- </update>
- <insert id="addUser" parameterType="com.liuzd.ssm.entity.User">
- <![CDATA[
- insert into users (id,name,age,sex,address,password)VALUES(#{id},#{name},#{age},#{sex},#{address},#{password})
- ]]>
- </insert>
- <delete id="delUser" parameterType="string">
- <![CDATA[
- delete users where id=#{id}
- ]]>
- </delete>
- </mapper>
C UserService.java
Java代码
- package com.liuzd.ssm.service;
- import java.util.List;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import com.liuzd.ssm.entity.User;
- import com.liuzd.ssm.mapper.UserMapper;
- @Service("userService")
- public class UserService {
- @Autowired
- private UserMapper userMapper;
- public void addUser(User user) {
- this.userMapper.addUser(user);
- }
- public int checkUserExits(User user) {
- return this.userMapper.checkUserExits(user);
- }
- public void delUser(String userId) {
- this.userMapper.delUser(userId);
- }
- public User getUserByUid(String userId) {
- return (User)this.userMapper.getUserByUid(userId);
- }
- public List<User> getUserList() {
- return (List<User>)this.userMapper.getUserList();
- }
- public void editUser(User user) {
- this.userMapper.editUser(user);
- }
- }
D WEB层调用代码
a LoginController.java
Java代码
- package com.liuzd.ssm.web;
- import java.util.List;
- import javax.annotation.Resource;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.springframework.stereotype.Controller;
- import org.springframework.ui.Model;
- import org.springframework.web.bind.annotation.ModelAttribute;
- import org.springframework.web.bind.annotation.PathVariable;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestMethod;
- import org.springframework.web.servlet.ModelAndView;
- import com.liuzd.ssm.entity.User;
- import com.liuzd.ssm.service.UserService;
- @Controller
- @RequestMapping("/login")
- public class LoginController {
- private UserService userService;
- public UserService getUserService() {
- return userService;
- }
- @Resource
- public void setUserService(UserService userService) {
- this.userService = userService;
- }
- @SuppressWarnings("unchecked")
- @RequestMapping("add")
- //@ModelAttribute 可加可不加,url: http://127.0.0.1:8088/ssm/user/add.do
- public String login(User user, HttpServletRequest req, HttpServletResponse response) {
- // 此处调用服务层进行相应的业务操作
- // 传递对象于下一页面
- req.setAttribute("user", user);
- // 调用服务层进行验证用户,此处只演示功能
- int usize = getUserService().checkUserExits(user);
- System.out.println("用户信息: " + user + ",usize: "+usize);
- if (usize > 0) {
- //return "success";
- List<User> useralls = this.getUserService().getUserList();
- req.setAttribute("userList", useralls);
- return "userList";
- }
- return "error";
- }
- @SuppressWarnings("unchecked")
- // @RequestMapping(params= "method=add2",method=RequestMethod.POST)
- // 定义method方法不是必须的
- @RequestMapping(params = "method=add2")
- public ModelAndView login2(@ModelAttribute("user")User user, HttpServletRequest req, HttpServletResponse response) {
- // 使用ModelAndView保存对象于下一页面
- ModelAndView model = new ModelAndView();
- model.addObject("user", user);
- // 调用服务层进行验证用户,此处只演示功能
- int usize = getUserService().checkUserExits(user);
- System.out.println("用户信息2: " + user + ",usize: "+usize);
- if (usize > 0) {
- List<User> useralls = this.getUserService().getUserList();
- model.addObject("userList", useralls);
- model.setViewName("userList");
- } else {
- model.addObject("msg","用户或者密码错误!");
- model.setViewName("error");
- }
- return model;
- }
- @RequestMapping(value="add3/{name}/{password}",method=RequestMethod.GET)
- public String login3(@PathVariable("name") String name,@PathVariable("password") String pwd,Model model) {
- User user = new User();
- user.setName(name);
- user.setPassword(pwd);
- model.addAttribute("user",user);
- // 调用服务层进行验证用户,此处只演示功能
- int usize = getUserService().checkUserExits(user);
- System.out.println("用户信息3: "+user + ",size: " + usize);
- if (usize > 0) {
- return "success";
- }
- //放入model默认把参数存于请求
- model.addAttribute("msg","用户或者密码错误!");
- return "error";
- /**
- * 重定向JSP页面,走出了springmvc配置的view(jsp)
- * 因为这样说明:model.addAttribute("msg","用户或者密码错误!");
- * 获取不到值了
- * 不加上.jsp就是这样:http://127.0.0.1:8080/Spring3-Login-Annotaction/index?msg=%E7...
- * */
- //返回到页面是乱码在页面中用${msg}获取不到值,用request.getParams("msg");为乱码
- //return "redirect:index.jsp?msg=用户或者密码错误!";
- }
- }
b UserController.java
Java代码
- package com.liuzd.ssm.web;
- import java.util.List;
- import javax.annotation.Resource;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.PathVariable;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.SessionAttributes;
- import org.springframework.web.servlet.ModelAndView;
- import com.liuzd.ssm.entity.User;
- import com.liuzd.ssm.service.UserService;
- @Controller
- @RequestMapping("/user")
- @SessionAttributes("userList")
- public class UserController {
- private UserService userService;
- public UserService getUserService() {
- return userService;
- }
- @Resource
- public void setUserService(UserService userService) {
- this.userService = userService;
- }
- @RequestMapping("/userList")
- public ModelAndView userList(){
- /**
- * 想要在页面展现数据,必须返回ModelAndView类型,返回String是不能获取数据的
- * */
- ModelAndView mv = new ModelAndView();
- List<User> users = this.getUserService().getUserList();
- mv.addObject("userList",users);
- mv.setViewName("userList");
- return mv;
- }
- @RequestMapping("/addUser")
- public ModelAndView addUser(User user){
- System.out.println("ADD USER: "+ user);
- this.userService.addUser(user);
- return userList();
- }
- @RequestMapping("/toAddUser")
- public String toAddUser(){
- return "addUser";
- }
- @RequestMapping("/delUser/{id}")
- public ModelAndView delUser(@PathVariable("id") String id){
- this.userService.delUser(id);
- return userList();
- }
- @RequestMapping("/getUser/{id}")
- public ModelAndView getUser(@PathVariable("id") String id){
- User user = this.userService.getUserByUid(id);
- ModelAndView mv = new ModelAndView("updateUser");
- mv.addObject("user",user);
- return mv;
- }
- @RequestMapping("/updateUser")
- public ModelAndView editUser(User user){
- System.out.println("编辑: "+user);
- this.userService.editUser(user);
- return userList();
- }
- }
3 JSp文件
A index.jsp
Java代码
- <%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <%@ include file="/common/meta.jsp"%>
- </head>
- <body>
- <form action="${pageContext.request.contextPath}/login/add.do" method="post">
- 姓名: <input type="text" name="name" id="name"><br>
- 密码: <input type="password" name="password" id="password"><br>
- <input type="submit" value="Login">
- </form> <br>
- <form action="${pageContext.request.contextPath}/login.do?method=add2" method="post">
- 姓名: <input type="text" name="name" id="name"><br>
- 密码: <input type="password" name="password" id="password"><br>
- <input type="submit" value="Login2">
- </form>
- <br>
- <a href="${pageContext.request.contextPath}/login/add3/spring/spring.do">Spring MVC RESL风格</a>
- </body>
- </html>
B addUser.jsp
Java代码
- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
- <%@ page import="org.apache.commons.lang3.RandomStringUtils"%>
- <%
- String id = RandomStringUtils.randomAlphanumeric(32);
- %>
- <html>
- <head>
- <title>用户信息</title>
- </head>
- <body>
- <form action="${pageContext.request.contextPath}/user/addUser.do" method="post">
- <br>
- <table>
- <tr>
- <td>
- <input name="id" type="hidden" value="<%=id%>">
- 姓名: <input name="name">
- </td>
- </tr>
- <tr>
- <td>
- 年龄: <input name="age">
- </td>
- </tr>
- <tr>
- <td>
- 性别: <select name="sex">
- <option value="1">男</option>
- <option value="2">女</option>
- </select>
- </td>
- </tr>
- <tr>
- <td>
- 密码: <input name="password">
- </td>
- </tr>
- <tr>
- <td>
- 地址:<input name="address"/>
- </td>
- </tr>
- <tr>
- <td align="right">
- <input type="submit" vlaue="保存"/>
- </td>
- </tr>
- </table>
- </form>
- <br>
- <a href="${pageContext.request.contextPath}/index.jsp">返回主页</a><br>
- <a href="${pageContext.request.contextPath}/user/userList.do">返回显示</a>
- </body>
- </html>
C updateUser.jsp
Java代码
- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
- <html>
- <head>
- <title>编辑用户信息</title>
- </head>
- <body>
- <form action="${pageContext.request.contextPath}/user/updateUser.do" method="post">
- <br>
- <table>
- <tr>
- <td>
- <input name="id" type="hidden" value="${user.id}">
- 姓名: <input name="name" value="${user.name}">
- </td>
- </tr>
- <tr>
- <td>
- 年龄: <input name="age" value="${user.age}">
- </td>
- </tr>
- <tr>
- <td>
- 性别: <select name="sex">
- <option value="1" ${user.sex eq "1" ? "selected" : ""}>男</option>
- <option value="2" ${user.sex eq "2" ? "selected" : ""}>女</option>
- </select>
- </td>
- </tr>
- <tr>
- <td>
- 密码: <input name="password" value="${user.password}">
- </td>
- </tr>
- <tr>
- <td>
- 地址:<input name="address" value="${user.address}"/>
- </td>
- </tr>
- <tr>
- <td align="right">
- <input type="submit" vlaue="保存"/>
- </td>
- </tr>
- </table>
- </form>
- <br>
- <a href="${pageContext.request.contextPath}/index.jsp">返回主页</a><br>
- <a href="${pageContext.request.contextPath}/user/userList.do">返回集合显示</a>
- </body>
- </html>
D userList.jsp
Java代码
- <%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
- <%@ taglib uri="/WEB-INF/c.tld" prefix="c"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <%@ include file="/common/meta.jsp"%>
- </head>
- <body>
- <table width="60%" border="1" cellpadding="0" align="center">
- <thead>
- <tr>
- <th style="cursor: hand;" title="按姓名进行排序" οnclick="sortPage('name')" valign="top">
- 姓名
- </th>
- <th style="cursor: hand;" title="按年龄进行排序" οnclick="sortPage('age')" valign="top">
- 年龄
- </th>
- <th style="cursor: hand;" title="按性别进行排序" οnclick="sortPage('sex')" valign="top">
- 性别
- </th>
- <th style="cursor: hand;" title="按地址进行排序" οnclick="sortPage('address')" valign="top">
- 地址
- </th>
- <th style="cursor: hand;" >
- 操作
- </th>
- </tr>
- </thead>
- <tbody>
- <c:forEach items="${userList}" var="user">
- <tr align="center">
- <td>
- ${user.name}
- </td>
- <td>
- ${user.age}
- </td>
- <td>
- ${user.sex eq 1 ? "男" : user.sex eq 2 ? "女" : "未知"}
- </td>
- <td>
- ${user.address}
- </td>
- <td>
- <a
- href="${pageContext.request.contextPath}/user/toAddUser.do">添加</a>
- |
- <a
- href="${pageContext.request.contextPath}/user/getUser/${user.id}.do">编辑</a>
- |
- <a
- href="${pageContext.request.contextPath}/user/delUser/${user.id}.do">删除</a>
- </td>
- </tr>
- </c:forEach>
- </tbody>
- </table>
- <br>
- <a href="${pageContext.request.contextPath}/index.jsp">返回</a>
- </body>
- </html>
4 配置文件
a web.xml
Java代码
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
- <context-param>
- <param-name>webAppRootKey</param-name>
- <param-value>ssm.root</param-value>
- </context-param>
- <context-param>
- <param-name>
- contextConfigLocation
- </param-name>
- <param-value>
- classpath*:applicationContext.xml
- </param-value>
- </context-param>
- <context-param>
- <param-name>log4jConfigLocation</param-name>
- <param-value>/WEB-INF/classes/log4j.properties</param-value>
- </context-param>
- <context-param>
- <param-name>log4jRefreshInterval</param-name>
- <param-value>60000</param-value>
- </context-param>
- <context-param>
- <param-name>log4jExposeWebAppRoot</param-name>
- <param-value>false</param-value>
- </context-param>
- <listener>
- <listener-class>
- org.springframework.web.context.ContextLoaderListener
- </listener-class>
- </listener>
- <listener>
- <listener-class>
- org.springframework.web.util.Log4jConfigListener
- </listener-class>
- </listener>
- <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>
- <init-param>
- <param-name>forceEncoding</param-name>
- <param-value>false</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>encodingFilter</filter-name>
- <url-pattern>*.do</url-pattern>
- </filter-mapping>
- <filter-mapping>
- <filter-name>encodingFilter</filter-name>
- <url-pattern>*.jsp</url-pattern>
- </filter-mapping>
- <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>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>springmvc</servlet-name>
- <url-pattern>*.do</url-pattern>
- </servlet-mapping>
- <!-- weblogic配置数据源需要
- <resource-ref>
- <description>s2sh</description>
- <res-ref-name>s2sh</res-ref-name>
- <res-type>javax.sql.DataSource</res-type>
- <res-auth>Container</res-auth>
- </resource-ref>
- -->
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
b applicationContext.xml
Java代码
- <?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:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
- <context:annotation-config />
- <context:component-scan base-package="com.liuzd.ssm.service" />
- <bean
- class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
- <property name="locations">
- <value>classpath:jdbc.properties</value>
- </property>
- </bean>
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
- <property name="driverClassName" value="${jdbc.driverClassName}"/>
- <property name="url" value="${jdbc.url}" />
- <property name="username" value="${jdbc.username}" />
- <property name="password" value="${jdbc.password}" />
- </bean>
- <!--
- <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
- <property name="jndiName">
- <value>${JNDI}</value>
- </property>
- <property name="resourceRef">
- <value>${RESOURCEREF}</value>
- </property>
- <property name="jndiEnvironment">
- <props>
- <prop key="java.naming.provider.url">${Context.PROVIDER_URL}</prop>
- <prop key="java.naming.factory.initial">${Context.INITIAL_CONTEXT_FACTORY}</prop>
- </props>
- </property>
- </bean> -->
- <!-- define the SqlSessionFactory, notice that configLocation is not needed when you use MapperFactoryBean -->
- <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
- <property name="dataSource" ref="dataSource" />
- <!--
- <property name="configLocation" value="classpath*:mybatis-config.xml"/>
- -->
- </bean>
- <!-- scan for mappers and let them be autowired -->
- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
- <property name="basePackage" value="com.liuzd.ssm.mapper" />
- </bean>
- </beans>
核心技术:Maven,Springmvc mybatis shiro, Druid, Restful, Dubbo, ZooKeeper,Redis,FastDFS,ActiveMQ,Nginx
1. 项目核心代码结构截图
项目模块依赖
特别提醒:开发人员在开发的时候可以将自己的业务REST服务化或者Dubbo服务化
2. 项目依赖介绍
2.1 后台管理系统、Rest服务系统、Scheculer定时调度系统依赖如下图:
2.2 Dubbo独立服务项目依赖如下图:
3. 项目功能部分截图:
zookeeper、dubbo服务启动
dubbo管控台
REST服务平台