JAVAEE 课程设计 “购物商城”

一、开发前期

1、开发环境 :

当前用myeclipse jdk1.8 tomcat 6

2、创建项目

new —— web project ——— 记得把web.xml勾上

3、SSM框架整合配置

添加依赖
添加依赖的方式常用的有两种:

通过maven创建 项目,通过maven来添加依赖
本地导入对应的jar包,初学者可以使用,不过添加内容比较多
我们现在用本地导入 WEB-INF --lib文件夹中

添加配置文件
1、spring的基本配置
applicationContext.xml文件的配置
由于需要配置的内容比较多,我们可以成多个文件进行配置
在这里:applicationContext-dao.xml applicationContext-service.xml applicationContext-tx.xml

基本配置:命名空间和约束条件,来源于官网的模板
2、springMVC的基本配置
创建springMVC.xml文件,添加约束
3、mybatis的配置
4、log4j.properties配置
一般情况我们使用通用配置,如果有特殊要求,可以去学log4j的配置语法

二、开始整合配置

1、在web.xml(项目自带的配置文件) 配置其他配置文件启动或者关联

1.1、实例化并启动spring的容器(加载applicationContext,让这个配置文件起作用)

   <!--实例化spring的容器 -->
  <context-param>
  		<!-- 指定一下applicationContext的路径 -->
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:applicationContext-*.xml</param-value>
  </context-param>
  <!--添加监听器,启动spring的容器  -->
  <listener>
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

1.2、添加springmvc的配置

<!-- 添加springmvc的配置文件  -->
  <servlet>
     <servlet-name>DispatcherServlet</servlet-name>
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     <!--当springMVC.xml文件不在默认位置(webroot下web-inf),那么需要我们手动配置  -->
     <init-param>
         <param-name>contextConfigLocation</param-name>
         <param-value>classpath:springMvc.xml</param-value>
     </init-param>
  </servlet>
  <servlet-mapping>
     <servlet-name>DispatcherServlet</servlet-name>
     <url-pattern>*.action</url-pattern>
  </servlet-mapping>

注1:什么是DispatcherServlet?

  • servlet,用来处理用户请求,前端控制器的(DispatcherServlet)跟之前的Servlet作用相似,都是用来接收用户请求.
  • SpringMVC也是Servlet的实现,只不过SpringMVC增加了一个DispatchServlet,所有的http请求都是映射到这个Servlet上,请求进入到这个Servlet中之后,就算进入到了框架之中了,由这个Servlet来统一的分配http请求到各个Controller。

关于什么是DispatcherServlet、Servlet,推荐这篇博客

1.3、添加编码过滤器

 <!-- 避免中文乱码 -->
  <filter>
     <filter-name>characterFilter</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>characterFilter</filter-name>
       <!-- 匹配所有的请求,拦截下来 -->
      <url-pattern>/* </url-pattern>
  </filter-mapping>

其他配置按照正常开发流程,应该在这里配置(我们作为初学者,在需要的时候配置)

2、能够在浏览器上访问网页界面

1、创建前端界面

一般我们的前端界面放在WEB-INF下面自己创建的文件夹中,因为webRoot文件夹下,除了WEB-INF以外,都是对外开放的
我们的界面源码应该是被保护的

2、创建控制器

创建一个单独的包,用来存放所有的控制器

@Controller
public class IndexController {
    
    
	
	//匹配访问路径
	@RequestMapping("/index")
	public String index(){
    
    
		System.out.println("进来");
		//返回的是你要访问的页面的名字(不包含后缀)
		return "index";
	}

}

3、在springMvc.xml文件配置扫描器和视图解析器

<!-- 配置扫描器:配置的是控制器的包名 -->
    <context:component-scan base-package="com.qfedu.controller"></context:component-scan>
    <!-- 配置视图解析器 -->
    <bean  class="org.springframework.web.servlet.view.InternalResourceViewResolver"
           id="internalResourceViewResolver">
           
         <!-- 前缀 -->
         <property name="prefix" value="/WEB-INF/jsp/"></property>
         <!--后缀  -->
         <property name="suffix" value=".jsp"></property>
    </bean>

相关参数具体解释,推荐这篇博客

4、测试

浏览器访问:http://loalhost:8080/GouWuShangCheng/index.action

总结:访问页面数据流跑通流程

在这里插入图片描述

三、SSM框架数据加载流程(springMVC 的model)

1、数据库的配置

在applicationContext-dao.xml文件配置dataSource

1.1配置数据库的连接(数据库的驱动和数据库版本必须匹配),配置连接池,还有数据库的连接

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
	      <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
	      <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/shop?characterEncoding=utf-8"></property>
	      <property name="user"  value="root"></property>
	      <property name="password" value="123456"></property>
</bean>

1.2 配置mybatis的sqlsession,将dataSource注入进来

<!--加载sqlsession工厂,同时加载mybatis.xml   注入数据源 -->
	 <bean id="sqlSessionFactory"  class="org.mybatis.spring.SqlSessionFactoryBean">
	      <!--name中的值是java文件中对应的对象名,ref是数据源配置的id值-->
	 	  <property name="dataSource"  ref="dataSource"></property>
	 	  <property name="configLocation" value="classpath:mybatis.xml"></property>
 </bean>

1.3 在applicationContext-tx.xml中配置数据源的事务管理

<!--添加事务管理-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
       
       <property name="dataSource"   ref="dataSource"></property>
    </bean>

1.4 简单的配置mybatis(也可以不配置)

<configuration>
   <settings>
	   <!--是否开启懒加载-->
      <setting name="lazyLoadingEnabled" value="true"/>
      <setting name="aggressiveLazyLoading" value="false"/>
      
      <setting name="cacheEnabled" value="true"/>
   </settings>
</configuration>

2、操作数据库,其实就是Mapper映射器的编写

2.1 、编写CategoryMapper.java文件

创建一个interface接口文件

public interface CategoryMapper {
    
    
	/*查询所有目录的方法*/
	public List<Category> selectALLCategory();
	}
	

2.2 、创建CategoryMapper.xml文件

2.2.1 由于查询语句的返回是一个结果集,所以这里需要自定义映射集

 <resultMap type="com.qfedu.pojo.Category" id="allCategory">
   <!--column 的值是数据库表中的列名,property是pojo中的属性名-->
       <id  column="cid"  property="cId" />
       <result column="cname" property="cName" />
       <!--一对多级联使用collection标签-->
       <collection property="second" ofType="com.qfedu.pojo.CategorySecond">
           <id  column="csid" property="csId"/>
           <result column="csname" property="csName"/>
           <result column="cid" property="cId"/>
       </collection>
   </resultMap>

2.2.2 编写sql语句

    <select id="selectALLCategory"  resultMap="allCategory">
      select category.*,categorysecond.* from category,categorysecond where
      category.cid= categorysecond.cid
   </select>

2.3 在applicationContext-dao.xml中配置mapper的扫描器

  <!--配置mapper的扫描器-->
 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
     <property name="basePackage" value="com.qfedu.mapper"></property>
     <property name="sqlSessionFactoryBeanName"  value="sqlSessionFactory"></property>
 </bean>

3、业务逻辑代码的编辑,也就是service的编写

3.1 编写service类

在service里,我们调用mapper的方法,获取数据库的操作结果,然后进行逻辑处理

  public class CategoryService {
    
    
	
	@Autowired
	public CategoryMapper categoryMapper;
	
	/*调用mapper映射器的方法,或者数据库操作结果,并处理
	 * 这里是获取所有的目录*/
	public List<Category>  findAllCategory(){
    
    
		 //调用mapper方法,回去操作结果
	     List<Category> list=categoryMapper.selectALLCategory();
	     if(list!=null&&list.size()!=0){
    
    
	    	 return list;
	     }else{
    
    
	    	 return null;
	     }
	}
	
}

3.2 在applicationContext-service.xml中配置service的bean

<bean id="categoryService" class="com.qfedu.service.CategoryService" > </bean>

3.3 在applicationContext-tx.xml中以service为aop的切入点,配置aop切面的切入点

<!--开启注解,添加通知-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="save*" propagation="REQUIRED"/>
			<tx:method name="get*" propagation="SUPPORTS"/>
		</tx:attributes>
	</tx:advice>
	
	<!--配置切面-->
	<aop:config>
		<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.qfedu.service.*.*(..))"/>
	</aop:config> 
    
    </beans>

4、在controller中调用service的方法,获取结果,向前端返回结果

@Controller
public class IndexController {
    
    
	
	@Autowired
	public CategoryService  categoryService;
	

	@RequestMapping("/index")
	public String index(Model model){
    
    
		//获取目录的数据,然后返回给前端界面
		List<Category> cList=categoryService.findAllCategory();
		
		model.addAttribute("cList", cList);
		
		return "index";
	}

} 

5、在前端接收数据

<div class="span6">
				<div class="hotProductCategory">
				     <!--${cList}这个就是接收数据,cList是键值对的键  
				      var="c"  这个c是集合中的一个元素
				      ${c.cId}  cId是pojo的属性名 -->
					<c:forEach var="c" items="${cList}">
						<dl>
							<dt>
								<a
									href="${pageContext.request.contextPath}/findCategorySecond.action?cid=${c.cId}&page=1">
									${c.cName} </a>
							</dt>
							<c:forEach items="${c.second}" var="cs">
								<dd>
									<a
										href="${pageContext.request.contextPath}/findCategorySecond1.action?csid=${cs.csId}&page=1">
										${cs.csName}</a>
								</dd>
							</c:forEach>
						</dl>
					</c:forEach>
				</div>
		

四、前端页面+数据库

在这里插入图片描述

在这里插入图片描述

四、简单总结

1、SSM整合思路

spring在进行管理时,是很有条理的,每个层都由spring管理,然后不同的层可以调用其它层,Handler调用service,service调用mapper等。

1整合dao层。mybatis和spring整合,通过spring管理mapper接口。使用mapper的扫描器自动扫描mapper接口在spring中进行注册。

2整合service层。通过spring管理 service接口。使用配置方式将service接口配置在spring配置文件中。实现事务控制。

3整合springmvc。由于springmvc是spring的模块,不需要整合。

2、整合分析

1、spring MVC + spring +mybatis,是标准的MVC设计模式,将整个系统划分为显示层,Controller层,Service层,DAO层四层
使用Spring MVC负责请求的转发和视图管理
spring实现业务对象管理,mybatis作为数据对象的持久化引擎。
2、Spring是一个开源框架,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,还能更好的让其他框架整合。
3、Spring MVC框架是有一个MVC框架,通过实现Model-View-Controller模式来很好地将数据、业务与展现进行分离。
4、MyBatis 是一个基于Java的持久层框架

Service层是建立在DAO层之上的,建立了DAO层后才可以建立Service层,而Service层又是在Controller层之下的,因而
Service层应该既调用DAO层的接口,又要提供接口给Controller层的类来进行调用,它刚好处于一个中间层的位置。
每个模型都有一个Service接口,每个接口分别封装各自的业务处理方法。

四层的关系,推荐这篇博客
和这篇博客
本项目原是专科课程设计,现在本科再次需要,故重新跑通,如有侵权,立即联系删除

猜你喜欢

转载自blog.csdn.net/qq_30336973/article/details/118076429
今日推荐