架构实例之SpringTest
架构实例之SpringTest
1、开发工具和开发环境
开发工具: MyEclipse10,JDK1.6.0_13(32位),Tomcat7.0(32位),mysql5.7.13
开发环境:WIN7
2、SpringTest实现功能
用户登录、用户注册、退出登录。
3、SpringTest使用技术
本实例使用了JSP、Spring3.1框架、JdbcTemplate来实现用户登录、用户注册和退出登录功能。系统架构图如图一所示:
图一:SpringTest系统架构图
4、具体实现
(1)在MyEclipse中新建一个Web项目,并命名为SpringTest。项目建立完成后,鼠标选择该项目并点击右键选择MyEclipse选项,再选择Add Spring Capabilities选项,再选择Spring3.1Core Libraries,最后点击finish按钮即可初步完成Spring框架环境搭建;
(2)在src中会自动生成一个appllicaitonContext.xml文件,此处把该文件放到WebRoot/WEB-INF目录下,并把该文件重新命名为spring-servlet.xml;
(3)在WebRoot/WEB-INF/lib下放入以下三个jar包spring.jar、mysql-connector-java-5.0.8-bin.jar、commons-dbcp.jar,此处即可完成本项目的所有玩家搭建,接下来就是具体代码的书写;
(4)首先,完成web.xml中的相关配置,具体代码如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="3.0"
- 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_3_0.xsd">
- <display-name></display-name>
- <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>*.do</url-pattern>
- </filter-mapping>
- <servlet>
- <servlet-name>spring</servlet-name>
- <servlet-class>
- org.springframework.web.servlet.DispatcherServlet
- </servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>spring</servlet-name>
- <url-pattern>*.do</url-pattern>
- </servlet-mapping>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </web-app
(5)接下来,就是spring-servlet.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:p="http://www.springframework.org/schema/p"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
- <!-- 配置数据源与事务 -->
- <bean id="dataSource"
- class="org.apache.commons.dbcp.BasicDataSource"
- destroy-method="close">
- <property name="driverClassName">
- <value>com.mysql.jdbc.Driver</value>
- </property>
- <property name="url">
- <value>jdbc:mysql://localhost:3306/demo_test</value>
- </property>
- <property name="username">
- <value>root</value>
- </property>
- <property name="password">
- <value>root</value>
- </property>
- </bean>
- <bean id="transactionManager"
- class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource">
- <ref local="dataSource" />
- </property>
- </bean>
- <!-- 定义DAO -->
- <bean id="userDAO" class="com.liu.spring.dao.UserDAO">
- <property name="dataSource">
- <ref local="dataSource" />
- </property>
- </bean>
- <bean id="UserDAOProxy"
- class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
- <property name="transactionManager">
- <ref bean="transactionManager" />
- </property>
- <property name="target">
- <ref local="userDAO" />
- </property>
- <property name="transactionAttributes">
- <props>
- <prop key="insert*">PROPAGATION_REQUIRED</prop>
- <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
- </props>
- </property>
- </bean>
- <!-- 定义视图 -->
- <bean id="viewResolver"
- class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="viewClass">
- <value>
- org.springframework.web.servlet.view.InternalResourceView
- </value>
- </property>
- <!-- JSP都放在/目录下 -->
- <property name="prefix">
- <value>/</value>
- </property>
- <!-- JSP页面的后缀都四.JSP -->
- <property name="suffix">
- <value>.jsp</value>
- </property>
- </bean>
- <!-- 定义映射 -->
- <bean id="loginMapping"
- class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
- <property name="mappings">
- <props>
- <prop key="/login.do">loginAction</prop>
- </props>
- </property>
- </bean>
- <bean id="logoutMapping"
- class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
- <property name="mappings">
- <props>
- <prop key="/logout.do">logoutAction</prop>
- </props>
- </property>
- </bean>
- <bean id="registerMapping"
- class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
- <property name="mappings">
- <props>
- <prop key="/register.do">registerAction</prop>
- </props>
- </property>
- </bean>
- <!---定义Action-->
- <bean id="loginAction"
- class="com.liu.spring.actions.LoginAction">
- <property name="commandClass">
- <value>com.liu.spring.forms.LoginForm</value>
- </property>
- <!-- 指定DAO类 -->
- <property name="userDAO">
- <ref local="userDAO" />
- </property>
- <!-- 指定失败要返回的页面 -->
- <property name="formView">
- <value>login</value>
- </property>
- <!-- 指定成功要返回的页面 -->
- <property name="successView">
- <value>welcome</value>
- </property>
- </bean>
- <bean id="logoutAction"
- class="com.liu.spring.actions.LogoutAction">
- <property name="commandClass">
- <value>com.liu.spring.forms.LoginForm</value>
- </property>
- <property name="successView">
- <value>login</value>
- </property>
- </bean>
- <bean id="registerAction"
- class="com.liu.spring.actions.RegisterAction">
- <property name="commandClass">
- <value>com.liu.spring.forms.RegisterForm</value>
- </property>
- <!-- 指定DAO类 -->
- <property name="userDAO">
- <ref local="userDAO" />
- </property>
- <!-- 指定失败要返回的页面 -->
- <property name="formView">
- <value>register</value>
- </property>
- <property name="successView">
- <value>login</value>
- </property>
- </bean>
- </beans>
(6)用户登录、注册表单类具体代码:
用户登录表单类代码如下:
- package com.liu.spring.forms;
- public class LoginForm {
- private String username;
- private String password;
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- }
用户注册表单类代码如下:
- package com.liu.spring.forms;
- public class RegisterForm {
- private String username;
- private String password1;
- private String password2;
- private String email;
- public String getEmail() {
- return email;
- }
- public void setEmail(String email) {
- this.email = email;
- }
- public String getPassword1() {
- return password1;
- }
- public void setPassword1(String password1) {
- this.password1 = password1;
- }
- public String getPassword2() {
- return password2;
- }
- public void setPassword2(String password2) {
- this.password2 = password2;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- }
(7)用户登录、注册、退出Action类具体代码:
用户登录Action类代码
- package com.liu.spring.actions;
- import java.util.Map;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.springframework.validation.BindException;
- import org.springframework.web.servlet.ModelAndView;
- import org.springframework.web.servlet.mvc.SimpleFormController;
- import com.liu.spring.dao.UserDAO;
- import com.liu.spring.forms.LoginForm;
- import com.liu.spring.util.Constants;
- public class LoginAction extends SimpleFormController {
- UserDAO userDAO;
- public UserDAO getUserDAO() {
- return userDAO;
- }
- public void setUserDAO(UserDAO userDAO) {
- this.userDAO = userDAO;
- }
- protected ModelAndView onSubmit(HttpServletRequest request,
- HttpServletResponse response, Object command, BindException errors)
- throws Exception {
- LoginForm loginForm = (LoginForm) command;
- if (isValid(loginForm)) {
- request.getSession().setAttribute(Constants.USERNAME_KEY, loginForm.getUsername());
- return new ModelAndView(getSuccessView());
- } else {
- @SuppressWarnings("unchecked")
- Map<String, Object> modle = errors.getModel();
- modle.put("loginForm", loginForm);
- return new ModelAndView(getFormView(), modle);
- }
- }
- public boolean isValid(LoginForm loginForm) {
- // if (loginForm.getUsername().equals("admin")
- // && loginForm.getPassword().equals("admin")) {
- // return true;
- // } else {
- // return false;
- // }
- if(userDAO.isValid(loginForm.getUsername(), loginForm.getPassword())) {
- return true;
- } else {
- return false;
- }
- }
- }
其中,用户登录中使用了一个USERNAME_KEY字段,此处单独建立一个Constants类来实现,具体代码如下:
- package com.liu.spring.util;
- public class Constants {
- public final static String USERNAME_KEY = "username";
- }
用户注册Action类代码
- package com.liu.spring.actions;
- import java.util.Map;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.springframework.validation.BindException;
- import org.springframework.web.servlet.ModelAndView;
- import org.springframework.web.servlet.mvc.SimpleFormController;
- import com.liu.spring.dao.User;
- import com.liu.spring.dao.UserDAO;
- import com.liu.spring.forms.RegisterForm;
- public class RegisterAction extends SimpleFormController {
- UserDAO userDAO;
- public UserDAO getUserDAO() {
- return userDAO;
- }
- public void setUserDAO(UserDAO userDAO) {
- this.userDAO = userDAO;
- }
- public ModelAndView onSubmit(HttpServletRequest request,
- HttpServletResponse response, Object command, BindException errors)
- throws Exception {
- String method = request.getParameter("method");
- if (method == null || method.equals("init")) {
- return init(command, errors);
- } else if (method.equals("register")) {
- return register(request, response, command, errors);
- } else {
- RegisterForm registerForm = (RegisterForm) command;
- @SuppressWarnings("unchecked")
- Map<String, Object> modle = errors.getModel();
- modle.put(getFormSessionAttributeName(), registerForm);
- return new ModelAndView(getSuccessView(), modle);
- }
- }
- public ModelAndView init(Object command, BindException errors)
- throws Exception {
- RegisterForm registerForm = (RegisterForm) command;
- @SuppressWarnings("unchecked")
- Map<String, Object> modle = errors.getModel();
- modle.put(getFormSessionAttributeName(), registerForm);
- return new ModelAndView(getFormView(), modle);
- }
- public ModelAndView register(HttpServletRequest request,
- HttpServletResponse response, Object command, BindException errors)
- throws Exception {
- RegisterForm registerForm = (RegisterForm) command;
- if (!isExist(registerForm)) {
- add(registerForm);
- @SuppressWarnings("unchecked")
- Map<String, Object> modle = errors.getModel();
- modle.put(getSuccessView(), registerForm);
- response.sendRedirect("login.do");
- return null;
- //return new ModelAndView(getSuccessView(), modle);
- } else {
- @SuppressWarnings("unchecked")
- Map<String, Object> modle = errors.getModel();
- modle.put(getFormSessionAttributeName(), registerForm);
- return new ModelAndView(getFormView(), modle);
- }
- }
- public boolean isExist(RegisterForm registerForm) {
- // if (registerForm.getUsername().equals("admin")) {
- // return true;
- // } else {
- // return false;
- // }
- if (userDAO.isExist(registerForm.getUsername())) {
- return true;
- } else {
- return false;
- }
- }
- public void add(RegisterForm registerForm) {
- User user = new User();
- user.setUsername(registerForm.getUsername());
- user.setPassword(registerForm.getPassword1());
- user.setEmail(registerForm.getEmail());
- userDAO.insertUser(user);
- }
- }
用户退出Action类代码
- package com.liu.spring.actions;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.springframework.validation.BindException;
- import org.springframework.web.servlet.ModelAndView;
- import org.springframework.web.servlet.mvc.SimpleFormController;
- public class LogoutAction extends SimpleFormController {
- protected ModelAndView onSubmit(HttpServletRequest request,
- HttpServletResponse response, Object command, BindException errors)
- throws Exception {
- request.getSession().invalidate();
- response.sendRedirect("login.do");
- return null;
- //return new ModelAndView(getSuccessView());
- }
- }
(8)用户登录和注册进行数据库验证类代码
使用JDBCTemplate完成POJO类User类的创建,具体代码如下:
- package com.liu.spring.dao;
- public class User {
- protected String id;
- protected String username;
- protected String password;
- protected String email;
- public String getEmail() {
- return email;
- }
- public void setEmail(String email) {
- this.email = email;
- }
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- }
使用JDBCTemplate完成数据操作类UserDAO类的创建,具体代码如下:
- package com.liu.spring.dao;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.util.ArrayList;
- import java.util.List;
- import javax.sql.DataSource;
- import org.springframework.jdbc.core.JdbcTemplate;
- import org.springframework.jdbc.core.RowMapper;
- public class UserDAO {
- private DataSource dataSource;
- public DataSource getDataSource() {
- return dataSource;
- }
- public void setDataSource(DataSource dataSource) {
- this.dataSource = dataSource;
- }
- public boolean isValid(String username, String password) {
- @SuppressWarnings("rawtypes")
- List userList = new ArrayList();
- JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
- userList = jdbcTemplate.query("SELECT * FROM userInfo WHERE username='"
- + username + "' and password='" + password + "'",
- new RowMapper() {
- public Object mapRow(ResultSet rs, int rowNum)
- throws SQLException {
- User user = new User();
- user.setId(rs.getString("ID"));
- user.setUsername(rs.getString("username"));
- user.setPassword(rs.getString("password"));
- user.setEmail(rs.getString("email"));
- return user;
- }
- });
- if (userList.size() > 0) {
- return true;
- } else {
- return false;
- }
- }
- public boolean isExist(String username) {
- JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
- int count = jdbcTemplate.queryForInt("SELECT count(*) FROM userInfo WHERE username='" + username
- + "'");
- if (count > 0) {
- return true;
- } else {
- return false;
- }
- }
- public void insertUser(User user) {
- String username = user.getUsername();
- String password = user.getPassword();
- String email = user.getEmail();
- JdbcTemplate jt = new JdbcTemplate(getDataSource());
- jt.update("insert into userInfo(username,password,email) values ('"
- + username + "','" + password + "','" + email + "');");
- }
- }
(9)视图层用户登录,用户注册和登录成功后JSP界面代码
用户登录JSP页面代码(login.jsp)
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>My JSP 'login.jsp' starting page</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <!--
- <link rel="stylesheet" type="text/css" href="styles.css">
- -->
- </head>
- <body>
- <form name="form1" action="login.do" method="post">
- <table width="200" border="1">
- <tr>
- <td colspan="2">登录窗口</td>
- </tr>
- <tr>
- <td>用户名</td>
- <td><input type="text" name="username" size="10"></td>
- </tr>
- <tr>
- <td>密码</td>
- <td><input type="password" name="password" size="10"></td>
- </tr>
- <tr>
- <td colspan="2"><input type="submit" name="submit" value="登录"> <a
- href="register.do?method=init">注册新用户</a></td>
- </tr>
- </table>
- </form>
- </body>
- </html>
用户注册JSP页面代码(register.jsp)
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%String path = request.getContextPath();
- String basePath = request.getScheme() + "://"
- + request.getServerName() + ":" + request.getServerPort()
- + path + "/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>My JSP 'register.jsp' starting page</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <!--
- <link rel="stylesheet" type="text/css" href="styles.css">
- -->
- </head>
- <body>
- <form name="form1" action="register.do?method=register" method="post">
- <table width="200" border="1">
- <tr>
- <td colspan="2">注册窗口</td>
- </tr>
- <tr>
- <td>用户名</td>
- <td><input type="text" name="username" size="10"></td>
- </tr>
- <tr>
- <td>密码</td>
- <td><input type="password" name="password1" size="10"></td>
- </tr>
- <tr>
- <td>确认密码</td>
- <td><input type="password" name="password2" size="10"></td>
- </tr>
- <tr>
- <td>Email</td>
- <td><input type="text" name="email" size="10"></td>
- </tr>
- <tr>
- <td colspan="2"><input type="submit" name="submit" value="登录"> <a
- href="login.do">返回</a></td>
- </tr>
- </table>
- </form>
- </body>
- </html>
登录成功后JSP页面代码(welcome.jsp)
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>My JSP 'welcome.jsp' starting page</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <!--
- <link rel="stylesheet" type="text/css" href="styles.css">
- -->
- </head>
- <body>
- <form name="form1" action="logout.do" method="post">
- <table width="200" border="1">
- <tr>
- <td colspan="2">登录成功</td>
- </tr>
- <tr>
- <td>欢迎你,</td>
- <td><%=(String) session.getAttribute("username")%></td>
- </tr>
- <tr>
- <td colspan="2"><input type="submit" name="submit" value="退出"></td>
- </tr>
- </table>
- </form>
- </body>
- </html>
5、运行结果
开启Tomcat服务后,打开浏览器输入:http://localhost:8080/SpringTest/login.jsp,将会出现下图二所示结果:
图二:用户登录界面
点击注册新用户,将会出现以下图三所示结果(点击登陆,如果注册成功就会返回到登陆界面,如果未成功则保留在注册界面):
图三:用户注册界面
用上图中注册的账号进行登陆,登陆成功后出现下图四所示结果:
图四:用户登陆成功后界面
PS:本项目具体源码GitHub链接:https://github.com/miaomiaoqiushui/SpringTest
架构实例之SpringTest的更多相关文章
- 架构实例之Demo_JSP_JavaBean_Servlet
架构实例之Demo_JSP_JavaBean_Servlet 1.开发工具和开发环境 开发工具: MyEclipse10,JDK1.6.0_13(32位),Tomcat7.0(32位),m ...
- 架构实例之Demo_JSP_JavaBean
架构实例之Demo_JSP_JavaBean 1.开发工具和开发环境 开发工具: MyEclipse10,JDK1.6.0_13(32位),Tomcat7.0(32位),mysql5.7.1 ...
- 架构实例之Demo_JSP
架构实例之Demo_JSP 1.开发工具和开发环境 开发工具: MyEclipse10,JDK1.6.0_13(32位),Tomcat7.0(32位),mysql5.7.13 开发环境:W ...
- 【DDD】领域驱动设计实践 —— 架构风格及架构实例
概述 DDD为复杂软件的设计提供了指导思想,其将易发生变化的业务核心域放置在限定上下文中,在确保核心域一致性和内聚性的基础上,DDD可以被多种语言和多种技术框架实现,具体的框架实现需要根据实际的业务场 ...
- JavaWeb学习之三层架构实例(三)
引言 通过上一篇博客JavaWeb学习之三层架构实例(二)我们基本上已经实现了对学生信息列表的增删改查操作(UI除外),但是不难看出,代码冗余度太高了,尤其是StudentDao这个类,其中的增删改查 ...
- JavaWeb学习之三层架构实例(二)
引言 这个实例是上一个实例JavaWeb学习 三层架构实例(一)的加强版,实现的是在前端对数据库中student表的 增.删.改.查 操作.关于三层组成云云,这里就不再叙述. 实例 效果图 先来看一下 ...
- linux驱动由浅入深系列:高通sensor架构实例分析之二(驱动代码结构)【转】
本文转载自:https://blog.csdn.net/radianceblau/article/details/73498303 本系列导航: linux驱动由浅入深系列:高通sensor架构实例分 ...
- linux驱动由浅入深系列:高通sensor架构实例分析之三(adsp上报数据详解、校准流程详解)【转】
本文转载自:https://blog.csdn.net/radianceblau/article/details/76180915 本系列导航: linux驱动由浅入深系列:高通sensor架构实例分 ...
- java:Session(概述,三层架构实例(实现接口封装JDBC),Session实现简单购物车实例)
1.Session概述: Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 Web 页之间跳转时,存 ...
随机推荐
- 编辑IL文件 修改DLL文件
本文章只是技术探讨,学习,技术上的研究而已.请支持正版. 如:KS.Gantt.DLL 为例 使用ILSpy反编译 工具 利用ildasm反编译 KS.Gantt.dll 生成IL中间代码 一般会生 ...
- poj2186--tarjan+缩点
题目大意: 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也 ...
- python之最强王者(1)——python入门简介
1.Python简介 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年. 像Pe ...
- 25、ASP.NET MVC入门到精通——Spring.net-业务层仓储
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 上一节,我们已经把项目框架的雏形搭建好了,那么现在我来开始业务实现,在业务实现的过程当中,不断的来完善我们现有的框架. 1.假设我们来做一个 ...
- 精心挑选10款优秀的 jQuery 图片左右滚动插件
在现代的网页设计中,图片和内容滑块是一种极为常见和重要的元素.你可以从头开始编写自己的滑动效果,但是这将浪费很多时间,因为网络上已经有众多的优秀的 jQuery 滑块插件.当然,如果要从大量的 jQu ...
- PresentViewController切换界面
视图切换,没有NavigationController的情况下,一般会使用presentViewController来切换视图并携带切换时的动画, 其中切换方法如下: – presentViewCon ...
- asp.net mvc 中 一种简单的 URL 重写
asp.net mvc 中 一种简单的 URL 重写 Intro 在项目中想增加一个公告的功能,但是又不想直接用默认带的那种路由,感觉好low逼,想弄成那种伪静态化的路由 (别问我为什么不直接静态化, ...
- 商业智能SAAS走向中小企业
20多年前,Gartner提出了商业智能的概念,并将其定义为“一类由数据仓库.查询报表.数据分析.数据挖掘等部分组成的,以帮助企业决策的技术及应用”.从技术上讲,商业智能是数据仓库.OLAP和数据挖掘 ...
- sharePoint 2016 弃用和删除的功能
前言 sharepoint 2016版本正式发布,但是相比较2013版本,还是删除或者准备删除一些功能,我们需要了解一下哪些功能已经被删除掉或者在下一个版本中移除,因为这些可能影响我们现有系统是否能够 ...
- 回收ImageView占用的图像内存
使用方法: RecycleBitmap.recycleImageView(mSelectorView); 参数为imageview /** * 回收ImageView占用的图像内存; * 使用了本 ...