您的位置:首页 > 编程语言 > Java开发

实战 :Spring MVC + 注解 +SqlServer 框架搭建及详解

2016-11-15 16:34 363 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。

源码下载:http://download.csdn.NET/detail/u010469432/6786687

先说一下Spring3 MVC的优点:

spring MVC 属于轻量级框架

1、Spring3 MVC的学习难度小于Struts2,Struts2用不上的多余功能太多。呵呵,当然这不是决定因素。

2、Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分)

3、Spring3 MVC的灵活是你无法想像的,Spring的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制。

对于SpringMVC的一些文档型理论知识我不再多加赘述,今天主要是一步一步的开始搭建框架,当然这是我工作中的成果。

不多说,上代码:

1.创建Web project,我使用的是myeclipse。起名为Springmvc(名字自定)



2.引用SpringMVC 需要的核心jar包:



3.配置web.xml文件

[html] view
plain copy

print?





<?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">

<!-- 配置监听器 -->

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

<!-- 在项目启动时,加载Src/config下的所有以 spring- 开头的.xml 配置文件 -->

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:config/spring-*.xml</param-value>

</context-param>

<!--项目启动后默认打开的页面 -->

<welcome-file-list>

<welcome-file>login.jsp</welcome-file>

</welcome-file-list>

<!--这里的配置是关键,servlet-name -->

<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*:config/springmvc.xml</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

<!-- 配置servlet映射

在访问URL时路径要写为: /service/+ Controller 层@RequestMapping("/admin") 中的admin /+方法上的@RequestMapping(value = "/login")中的 login

例如 登陆表单 提交的action就是 /service/admin/login -->

<servlet-mapping>

<servlet-name>springmvc</servlet-name>

<url-pattern>/service/*</url-pattern>

</servlet-mapping>

</web-app>

4.配置Spring.xml文件,此文件的名称必须与web.xml中的servlet-name名称一致。

[html] view
plain copy

print?





<?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:cache="http://www.springframework.org/schema/cache" xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:jdbc="http://www.springframework.org/schema/jdbc"

xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.1.xsd"

default-autowire="byName">

<!-- 自动搜索@Controller标注的类 -->

<context:component-scan base-package="com.yfapp.platform" />

<context:annotation-config />

<bean

class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />

<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->

<bean

class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

<property name = "messageConverters">

<list>

<bean class="org.springframework.http.converter.StringHttpMessageConverter">

<property name="supportedMediaTypes">

<list>

<value>text/plain;charset=UTF-8</value>

</list>

</property>

</bean>

</list>

</property>

</bean>

<!-- Default ViewResolver -->

<bean id="viewResolver"

class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="viewClass"

value="org.springframework.web.servlet.view.JstlView" />

<property name="prefix" value="" />

<property name="suffix" value=".jsp"></property>

</bean>

<!-- 启用缓存注解功能,这个是必须的,否则注解不会生效,另外,该注解一定要声明在spring主配置文件中才会生效 -->

<cache:annotation-driven cache-manager="cacheManager"/>

<bean id="cacheManager" class="org.springframework.cache.concurrent.ConcurrentMapCacheManager" />

</beans>

5.配置数据库读取文件jdbc.properties放在类文件夹src下我这里加载的是SqlServer数据库

[html] view
plain copy

print?





driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver //连接的数据库

url=jdbc:sqlserver://127.0.0.1:1433; DatabaseName=renji

username=sa

password=admin

6.配置数据库相关的文件

spring-application.xml(文件名称可以自定义,但是需要在web.xml文件中加载这里即对应web.xml中的<!--在你项目启动时加载spring- 开头的.xml文件-->)

[html] view
plain copy

print?





<?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:aop="http://www.springframework.org/schema/aop"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

<!-- 读取资源文件 步骤5 的文件 -->

<bean

class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

<property name="location" value="classpath:jdbc.properties" />

</bean>

<!-- 这个是Spring的注入技术 给org.apache.commons.dbcp.BasicDataSource 类的属性注入对应的值 ,读取数据库配置信息-->

<bean id="dataSource"

class="org.apache.commons.dbcp.BasicDataSource">

<property name="driverClassName" value="${driverClassName}"></property>

<property name="password" value="${password}"></property>

<property name="username" value="${username}"></property>

<property name="url" value="${url}"></property>

</bean>

<!-- 这个是向第7步中的 DbUtilsTemplate.java 类的dataSource变量注入值 -->

<bean id="dbUtilsTemplate" class="com.yfapp.platform.dao.template.DbUtilsTemplate">

<property name="dataSource" ref="dataSource" />

</bean>

</beans>

7.数据库操作类:DbUtilsTemplate.Java这是我封装好的工具类直接使用就可以了。

[html] view
plain copy

print?





import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource;

import org.apache.commons.dbutils.QueryRunner;

import org.apache.commons.dbutils.handlers.BeanHandler;

import org.apache.commons.dbutils.handlers.BeanListHandler;

import org.apache.commons.dbutils.handlers.MapHandler;

import org.apache.commons.dbutils.handlers.MapListHandler;

import org.apache.commons.dbutils.handlers.ScalarHandler;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

public class DbUtilsTemplate {

private DataSource dataSource;

private QueryRunner queryRunner;

private static final Log LOG = LogFactory.getLog(DbUtilsTemplate.class);

public void setDataSource(BasicDataSource dataSource) {

this.dataSource = dataSource;

}

/**

* 执行sql语句

* @param sql sql语句

* @return 受影响的行数

*/

public int update(String sql) {

return update(sql, null);

}

/**

* 执行sql语句

* <code>

* executeUpdate("update user set username = 'kitty' where username = ?", "hello kitty");

* </code>

* @param sql sql语句

* @param param 参数

* @return 受影响的行数

*/

public int update(String sql, Object param) {

return update(sql, new Object[] { param });

}

/**

* 执行sql语句

* @param sql sql语句

* @param params 参数数组

* @return 受影响的行数

*/

public int update(String sql, Object[] params) {

queryRunner = new QueryRunner(dataSource,true);

int affectedRows = 0;

try {

if (params == null) {

affectedRows = queryRunner.update(sql);

} else {

affectedRows = queryRunner.update(sql, params);

}

} catch (SQLException e) {

LOG.error("Error occured while attempting to update data", e);

}

return affectedRows;

}

/**

* 执行批量sql语句

* @param sql sql语句

* @param params 二维参数数组

* @return 受影响的行数的数组

*/

public int[] batchUpdate(String sql, Object[][] params) {

queryRunner = new QueryRunner(dataSource,true);

int[] affectedRows = new int[0];

try {

affectedRows = queryRunner.batch(sql, params);

} catch (SQLException e) {

LOG.error("Error occured while attempting to batch update data", e);

}

return affectedRows;

}

/**

* 执行查询,将每行的结果保存到一个Map对象中,然后将所有Map对象保存到List中

* @param sql sql语句

* @return 查询结果

*/

public List<Map<String, Object>> queryForList(String sql) {

return queryForList(sql, null);

}

/**

* 执行查询,将每行的结果保存到一个Map对象中,然后将所有Map对象保存到List中

* @param sql sql语句

* @param param 参数

* @return 查询结果

*/

public List<Map<String, Object>> queryForList(String sql, Object param) {

return queryForList(sql, new Object[] {param});

}

/**

* 执行查询,将每行的结果保存到一个Map对象中,然后将所有Map对象保存到List中

* @param sql sql语句

* @param params 参数数组

* @return 查询结果

*/

@SuppressWarnings("unchecked")

public List<Map<String, Object>> queryForList(String sql, Object[] params) {

queryRunner = new QueryRunner(dataSource,true);

List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();

try {

if (params == null) {

list = (List<Map<String, Object>>) queryRunner.query(sql, new MapListHandler());

} else {

list = (List<Map<String, Object>>) queryRunner.query(sql, new MapListHandler(), params);

}

} catch (SQLException e) {

LOG.error("Error occured while attempting to query data", e);

}

return list;

}

/**

* 执行查询,将每行的结果保存到Bean中,然后将所有Bean保存到List中

* @param entityClass 类名

* @param sql sql语句

* @return 查询结果

*/

public <T> List<T> queryForList(Class<T> entityClass, String sql) {

return queryForList(entityClass, sql, null);

}

/**

* 执行查询,将每行的结果保存到Bean中,然后将所有Bean保存到List中

* @param entityClass 类名

* @param sql sql语句

* @param param 参数

* @return 查询结果

*/

public <T> List<T> queryForList(Class<T> entityClass, String sql, Object param) {

return queryForList(entityClass, sql, new Object[] { param });

}

/**

* 执行查询,将每行的结果保存到Bean中,然后将所有Bean保存到List中

* @param entityClass 类名

* @param sql sql语句

* @param params 参数数组

* @return 查询结果

*/

@SuppressWarnings("unchecked")

public <T> List<T> queryForList(Class<T> entityClass, String sql, Object[] params) {

queryRunner = new QueryRunner(dataSource,true);

List<T> list = new ArrayList<T>();

try {

if (params == null) {

list = (List<T>) queryRunner.query(sql, new BeanListHandler(entityClass));

} else {

list = (List<T>) queryRunner.query(sql, new BeanListHandler(entityClass), params);

}

} catch (SQLException e) {

LOG.error("Error occured while attempting to query data", e);

}

return list;

}

/**

* 查询出结果集中的第一条记录,并封装成对象

* @param entityClass 类名

* @param sql sql语句

* @return 对象

*/

public <T> T query(Class<T> entityClass, String sql) {

return queryFirst(entityClass, sql, null);

}

/**

* 查询出结果集中的第一条记录,并封装成对象

* @param entityClass 类名

* @param sql sql语句

* @param param 参数

* @return 对象

*/

public <T> T queryFirst(Class<T> entityClass, String sql, Object param) {

return queryFirst(entityClass, sql, new Object[] { param });

}

/**

* 查询出结果集中的第一条记录,并封装成对象

* @param entityClass 类名

* @param sql sql语句

* @param params 参数数组

* @return 对象

*/

@SuppressWarnings("unchecked")

public <T> T queryFirst(Class<T> entityClass, String sql, Object[] params) {

queryRunner = new QueryRunner(dataSource,true);

Object object = null;

try {

if (params == null) {

object = queryRunner.query(sql, new BeanHandler(entityClass));

} else {

object = queryRunner.query(sql, new BeanHandler(entityClass), params);

}

} catch (SQLException e) {

LOG.error("Error occured while attempting to query data", e);

}

return (T) object;

}

/**

* 查询出结果集中的第一条记录,并封装成Map对象

* @param sql sql语句

* @return 封装为Map的对象

*/

public Map<String, Object> queryFirst(String sql) {

return queryFirst(sql, null);

}

/**

* 查询出结果集中的第一条记录,并封装成Map对象

* @param sql sql语句

* @param param 参数

* @return 封装为Map的对象

*/

public Map<String, Object> queryFirst(String sql, Object param) {

return queryFirst(sql, new Object[] { param });

}

/**

* 查询出结果集中的第一条记录,并封装成Map对象

* @param sql sql语句

* @param params 参数数组

* @return 封装为Map的对象

*/

@SuppressWarnings("unchecked")

public Map<String, Object> queryFirst(String sql, Object[] params) {

queryRunner = new QueryRunner(dataSource,true);

Map<String, Object> map = null;

try {

if (params == null) {

map = (Map<String, Object>) queryRunner.query(sql, new MapHandler());

} else {

map = (Map<String, Object>) queryRunner.query(sql, new MapHandler(), params);

}

} catch (SQLException e) {

LOG.error("Error occured while attempting to query data", e);

}

return map;

}

/**

* 查询某一条记录,并将指定列的数据转换为Object

* @param sql sql语句

* @param columnName 列名

* @return 结果对象

*/

public Object queryForObject(String sql, String columnName) {

return queryForOjbect(sql, columnName, null);

}

/**

* 查询某一条记录,并将指定列的数据转换为Object

* @param sql sql语句

* @param columnName 列名

* @param param 参数

* @return 结果对象

*/

public Object queryForObject(String sql, String columnName, Object param) {

return queryForOjbect(sql, columnName, new Object[] { param });

}

/**

* 查询某一条记录,并将指定列的数据转换为Object

* @param sql sql语句

* @param columnName 列名

* @param params 参数数组

* @return 结果对象

*/

public Object queryForOjbect(String sql, String columnName, Object[] params) {

queryRunner = new QueryRunner(dataSource,true);

Object object = null;

try {

if (params == null) {

object = queryRunner.query(sql, new ScalarHandler(columnName));

} else {

object = queryRunner.query(sql, new ScalarHandler(columnName), params);

}

} catch (SQLException e) {

LOG.error("Error occured while attempting to query data", e);

}

return object;

}

/**

* 查询某一条记录,并将指定列的数据转换为Object

* @param sql sql语句

* @param columnIndex 列索引

* @return 结果对象

*/

public Object queryForObject(String sql, int columnIndex) {

return queryForObject(sql, columnIndex, null);

}

/**

* 查询某一条记录,并将指定列的数据转换为Object

* @param sql sql语句

* @param columnIndex 列索引

* @param param 参数

* @return 结果对象

*/

public Object queryForObject(String sql, int columnIndex, Object param) {

return queryForObject(sql, columnIndex, new Object[] { param });

}

/**

* 查询某一条记录,并将指定列的数据转换为Object

* @param sql sql语句

* @param columnIndex 列索引

* @param params 参数数组

* @return 结果对象

*/

public Object queryForObject(String sql, int columnIndex, Object[] params) {

queryRunner = new QueryRunner(dataSource,true);

Object object = null;

try {

if (params == null) {

object = queryRunner.query(sql, new ScalarHandler(columnIndex));

} else {

object = queryRunner.query(sql, new ScalarHandler(columnIndex), params);

}

} catch (SQLException e) {

LOG.error("Error occured while attempting to query data", e);

}

return object;

}

/**

* 获取记录数

* @param sql

* @param entityClass

* @return 结果对象

*/

public Object getCount(String sql,Class entityClass){

queryRunner = new QueryRunner(dataSource,true);

Object i=null;

try {

List list = (List) queryRunner.query(sql, new BeanListHandler(entityClass));

if(list.size()>0){

i=list.get(0);

}

} catch (SQLException e) {

e.printStackTrace();

}

return i;

}

/**

* 获取记录数

* @param sql

* @param entityClass

* @param param

* @return 结果对象

*/

public Object getCount(String sql,Class entityClass,Object param ){

return getCount(sql,entityClass,new Object[] { param });

}

/**

* 获取记录数

* @param sql

* @param entityClass

* @param Object[] params

* @return 结果对象

*/

public Object getCount(String sql,Class entityClass,Object[] params ){

queryRunner = new QueryRunner(dataSource,true);

Object i=null;

try{

if (params == null) {

i= getCount(sql,entityClass);

}else{

List list = (List) queryRunner.query(sql, new BeanListHandler(entityClass),params);

if(list.size()>0){

i=list.get(0);

}

}

}catch (Exception e) {

}

return i;

}

}

8。到此为止,框架已经搭建成功了,可以启动一下项目,



启动成功!

下面我写个测试例子大家看一下:

我的项目是写成了三层分开的架构,控制层(Controller),服务层接口(Service),服务层实现类(ServiceImpl),数据库操作接口(Dao),数据库操作实现类(DaoImpl).



1.login页面:

[html] view
plain copy

print?





<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme() + "://"

+ request.getServerName() + ":" + request.getServerPort()

+ path + "/";

%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<base href="<%=basePath%>">

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

</head>

<body>

<form action="service/admin/login" method="post">

<div class="user clr">

<span class="fl">管 理 员 :</span><input name="adminCode" type="text"

class="fl " />

</div>

<div class="user clr">

<span class="fl">密 码 :</span><input

name="adminPwd" type="password" class="fl" />

</div>

<div class="user clr">

<input name="" type="reset" value="重 置" class="cancel_btn fr" /><input

name="" type="submit" class="login_btn fr" value="登 录" />

</div>

</form>

</body>

</html>

2.Controller(控制)层的代码:AdminController.java

[html] view
plain copy

print?





package com.yfapp.platform.controller;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import com.yfapp.platform.entity.Admin;

import com.yfapp.platform.service.AdminService;

@Controller

@RequestMapping("/admin")

public class AdminController {

@Autowired

private AdminService adminService;

/**

* 管理员登陆

* @param admin 登陆传入的用户对象

* @return String 要跳转到的页面

*/

@RequestMapping(value = "/login")

public String login(HttpServletRequest request, HttpServletResponse response, Admin admin) throws Throwable {

Admin ad =new Admin();

if(null!=admin.getAdminPwd()||null!=admin.getAdminCode()){

ad = adminService.login(admin);

}else{

ad=null;

}

if (null != ad) {

request.getSession().setAttribute("admin", ad);

return "/indexhome";

} else {

request.setAttribute("imgs", "请重新登录!");

return "/login";

}

}

}

3.服务层接口:AdminService.java 以及 服务层实现类AdminServiceImpl.java

[html] view
plain copy

print?





package com.yfapp.platform.service;

import com.yfapp.platform.entity.Admin;

public interface AdminService{

//登陆

Admin login(Admin admin);

}

[html] view
plain copy

print?





package com.yfapp.platform.service.impl;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import com.yfapp.platform.dao.AdminDao;

import com.yfapp.platform.entity.Admin;

import com.yfapp.platform.service.AdminService;

@Service("adminService")

public class AdminServiceImpl implements AdminService{

@Autowired

private AdminDao adminDao;

/**

* 登陆

*/

public Admin login(Admin admin){

return adminDao.login(admin);

}

}

4.数据库操作接口类 BaseDao.java 和 AdminDao.java

BaseDao.java是基础的操作类,这里面可以将写一些基本的数据库操作方法比如增删改查,我这里就不写了,写这个主要是映射数据库连接,创建连接池。

AdminDao.java是功能模块的接口类,如果你要写别的模块的时候只需要想AdminDao一样继承BaseDao就行,当然如果不需要BaseDao 也可以不写BaseDao,这样写只是应用了java的思想。使用了泛型。

[html] view
plain copy

print?





package com.yfapp.platform.dao;

import java.io.Serializable;

public interface BaseDao<PO,ID extends Serializable> {

}

[html] view
plain copy

print?





package com.yfapp.platform.dao;

import com.yfapp.platform.entity.Admin;

public interface AdminDao extends BaseDao<Admin, Integer>{

// 登陆

Admin login(Admin admin);

}

5.数据库操作接口实现类 BaseDaoImpl.java 和 AdminDaoImpl.java

[html] view
plain copy

print?





package com.yfapp.platform.dao.impl;

import java.io.Serializable;

import org.springframework.beans.factory.annotation.Autowired;

import com.yfapp.platform.dao.BaseDao;

import com.yfapp.platform.dao.template.DbUtilsTemplate;

public class BaseDaoImpl<PO,ID extends Serializable> implements BaseDao<PO,ID>

{ //这个是之前说的数据库操作帮助类,使用注解的方式,此变量在spring-application.xml中注入值。

@Autowired

protected DbUtilsTemplate dbUtilsTemplate;

}

[html] view
plain copy

print?





package com.yfapp.platform.dao.impl;

import org.springframework.stereotype.Repository;

import com.yfapp.platform.dao.AdminDao;

import com.yfapp.platform.entity.Admin;

@Repository

public class AdminDaoImpl extends BaseDaoImpl<Admin, Integer> implements AdminDao {

/**

* 管理员登陆

*/

public Admin login(Admin admin) {

String sql="select adminCode,adminPwd,loginTime from yf_admin where adminCode=? and adminPwd=?";

Object[] params = { admin.getAdminCode(),admin.getAdminPwd() };

Admin ad = dbUtilsTemplate.queryFirst(Admin.class, sql, params);

return ad;

}

}

6。我的测试数据库表结构,使用的是SqlServer:



7.登陆成功要跳转的页面:indexhome.jsp

[html] view
plain copy

print?





<%@page import="com.yfapp.platform.entity.Admin"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme() + "://"

+ request.getServerName() + ":" + request.getServerPort()

+ path + "/";

Admin admin = (Admin) request.getSession().getAttribute("admin");

%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<base href="<%=basePath%>">

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

</head>

<body>

欢迎您:<%=admin.getAdminCode()%>|上次登录时间:<%=admin.getLoginTime()%>

|今天是:

<span id="webjx"><script>

setInterval(

"webjx.innerHTML=new Date().toLocaleString()+' 星期'+'日一二三四五六'.charAt(new Date().getDay());",

1000);

</script> </span>

</body>

</html>

8.重新运行项目:

测试结果:

在浏览器中访问 http://localhost:8080/Springmvc/



点击登陆:



完了!

源码下载:http://download.csdn.net/detail/u010469432/6786687
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: