才等录xchssm的时候,h5页面获取手机通讯录显示wwWxchssm空白是咋回事

博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)38826人阅读
SSM框架搭建流程
上面链接总结的流程很好,但是该流程没有加入DAO这一层,经过分析本项目源码,流程应该是这样的:
database–&Entity.java–&mapper.xml–&Mapper.java–&Dao.java–&DaoImpl.java–&Service.java–&ServiceImpl.java–&Controller.java–&login.jsp
根据需要建立数据库、数据表、字段;根据表中字段建立实体类;在Mapper中实现对数据库的增删改查操作;设计DAO(data access object)数据操作对象接口;设计Service,通过DAO获取对象,然后进行业务逻辑实现;设计控制层Controller,用于从页面获取请求,调用Service处理并将处理结果返回给页面。
根据上面所列,下面就按照这个流程进行设计。
数据库设计
使用MySQL数据库:
建立数据库 DB_TESTCREATE DATABASE DB_TEST;
建立用户表 T_USERCREATE TABLE T_USER (
ID INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,
USERNAME VARCHAR(16) NOT NULL,
PASSWORD VARCHAR(16) NOT NULL
插入一条用户信息INSERT INTO T_USER (USERNAME,PASSWORD) VALUES ("admin","123");
建立USER实体类
public class User {
private int
public int getId() {
public void setId(int id) {
public String getUsername() {
public void setUsername(String username) {
this.username =
public String getPassword() {
public void setPassword(String password) {
this.password =
Mapper实现增删改查
UserMapper接口,定义通过用户名获取用户对象的方法public interface UserMapper {
public User getUserByName(String username);
usermapper.xml,用于操作数据库,实现接口中的方法
namespace="com.crm.mapper.UserMapper"&
type="com.crm.entity.User" id="userMap"&
property="id" column="id" /&
property="username" column="username" /&
property="password" column="password" /&
id="getUserByName" parameterType="string" resultMap="userMap"&
select * from T_USER where username = #{username}
DAO 数据操作对象
DAO接口 UserDao.javapublic interface UserDao {
public User findUserByName(String username);
DAO接口实现 UserDaoImpl.java
@Repository对应数据访问层Bean
@Repository(value=”userDao”)注解是告诉Spring,让Spring创建一个名字叫“userDao”的UserDaoImpl实例。
当Service需要使用Spring创建的名为“userDao”的UserDaoImpl实例时,
就可以使用@Resource(name =”userDao”)注解告诉Spring,Spring把创建好的userDao注入给Service即可。
@Repository("userDao")
public class UserDaoImpl implements UserDao {
@Resource(name = "userMapper")
private UserMapper userM
public User findUserByName(String username) {
return userMapper.getUserByName(username);
业务层 Service
业务层接口 UserService.javapublic interface UserService {
public User checkLogin(String username, String password);
业务层接口实现类 UserServiceImpl.java
@Service对应的是业务层Bean
这样当Action需要使用UserServiceImpl的的实例时,就可以由Spring创建好的”userService”注入给Action:在Action只需要声明一个名字叫“userService”的变量来接收由Spring注入的”userService”即可
@Service("userService")
public class UserServiceImpl implements UserService {
private UserDao userD
public User checkLogin(String username, String password) {
User user = userDao.findUserByName(username);
if (user != null && user.getPassword().equals(password)) {
return null;
控制层 Controller
@Controller对应表现层的Bean,也就是Action
注意:如果@Controller不指定其value【@Controller】,则默认的bean名字为这个类的类名首字母小写,如果指定value【@Controller(value=”UserAction”)】或者【@Controller(“UserAction”)】,则使用value作为bean的名字。
@Scope(“prototype”)表示将Action的范围声明为原型
可以利用容器的scope=”prototype”来保证每一个请求有一个单独的Action来处理,避免struts中Action的线程安全问题。
spring 默认scope 是单例模式(scope=”singleton”),这样只会创建一个Action对象,每次访问都是同一Action对象,数据不安全。
struts2 是要求每次次访问都对应不同的Action,scope=”prototype” 可以保证当有请求的时候都创建一个Action对象
@RequestMapping(“/user”)
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
本项目中,该Controller类RequestMapping(”user”)
该Controller类的login方法RequestMapping(”login”)
所以登录页面中用户登录的 action=”/ssm/user/login”
@Controller
@Scope(value="prototype")
@RequestMapping("/user")
public class UserController {
private UserService userS
@RequestMapping(value="/login",method=RequestMethod.POST)
public String login(User user,Model model) throws Exception {
user=userService.checkLogin(user.getUsername(), user.getPassword());
if(user!=null){
model.addAttribute(user);
return "welcome";
return "fail";
xmlns="http://www.w3.org/1999/xhtml"&
http-equiv="Content-Type" content="text/ charset=utf-8" /&
&用户登录&
action="/ssm/user/login" method="post" id="myform"&
type="text" id="username" name="username"/&
type="password" id="password" name="password"/&
type="submit" value="提交" id="login" /&
DEMO工程中的所有配置文件
applicationContext.xml
这个文件是Spring公共配置文件,下面分块进行解析。
数据库配置文件database.properties的引入
id="property"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&
name="locations"&
&classpath:database.properties&
数据库连接池的配置
数据库连接池可以让服务器预先与数据库建立部分连接,存入内存中,以减少连接数据库的耗时操作。
此处定义使用C3P0连接池的数据源。
id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close"&
name="driverClass"&
&${mysql.driver_class}&
name="jdbcUrl"&
&${mysql.connection.url}&
name="user"&
&${mysql.connection.username}&
name="password"&
&${mysql.connection.password}&
name="maxPoolSize"&
name="minPoolSize"&
name="initialPoolSize"&
name="maxIdleTime"&
自动扫描配置
使用& context:component-scan&标签后,spring可以自动去扫描base-pack下面或者子包下面的java文件,如果扫描到有@Component @Controller@Service等这些注解的类,则把这些类注册为bean
base-package="com.crm.*"&
type="annotation" expression="org.springframework.stereotype.Controller" /&
集成Mybatis
SqlSessionFactoryBean是一个工厂bean,它的作用就是解析配置(数据源、别名等)。
id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"&
name="dataSource" ref="dataSource" /&
name="configLocation" value="classpath:mybatis.xml" /&
name="mapperLocations"&
&classpath:com/crm/mapper/*.xml&
Mapper扫描配置
dao需要配置,如果数量大不适合一个个配置,需要使用mapper自动扫描来批量进行配置。
class="org.mybatis.spring.mapper.MapperScannerConfigurer"&
name="basePackage" value="com.crm.mapper" /&
Mybatis事务管理配置
&bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager"&
&property name="dataSource" ref="dataSource" /&
数据库配置文件database.properties
mysql.driver_class=com.mysql.jdbc.Driver
mysql.connection.url=jdbc:mysql://localhost:3306/DB_TEST
mysql.connection.username=root
mysql.connection.password=root
日志管理文件 log4j.properties
此处省略,入门阶段暂不考虑这么高端的日志用法。
Mybatis配置文件
通过使用别名,可以缩短类名的长度,但是只能在配置文件中使用。
type="com.crm.entity.User" alias="user" /&
web配置文件
此配置文件注释比较清楚,就不单独解析了。
&webAppRootKey&
&crm.root&
&log4jConfigLocation&
&classpath:log4j.properties&
&log4jRefreshInterval&
&org.springframework.web.util.Log4jConfigListener&
&contextConfigLocation&
&classpath*:springContext/*Context.xml&
&org.springframework.web.context.ContextLoaderListener&
org.springframework.web.util.IntrospectorCleanupListener
&springmvc&
&org.springframework.web.servlet.DispatcherServlet&
&contextConfigLocation&
&/WEB-INF/springmvc.xml&
&springmvc&
&characterEncodingFilter&
&org.springframework.web.filter.CharacterEncodingFilter&
&encoding&
&characterEncodingFilter&
&login.jsp&
springmvc配置文件
之前扫描专门忽略了Controller,在此处扫描。
例如在Controller类中常有类似return welcome这样的语句
其实完整的应该是return WEB-INF/pages/welcome.jsp
base-package="com.crm.controller"/&
location="/img/" mapping="/img/**"/&
location="/js/" mapping="/js/**"/&
location="/common/" mapping="/common/**"/&
id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /&
id="handlerAdapter" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /&
id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"&
name="prefix" value="/WEB-INF/pages/"&&
name="suffix" value=".jsp"&&博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 页面相对度多少被收录 的文章

 

随机推荐