Struts2框架与Spring框架初解三

Spring框架

读取 properties配置文件

<!-- location 让spring去读取配置文件,
    能够在当前spring的配置文件中获取使用 -->
<context:property-placeholder location="classpath:user.properties"></context:property-placeholder>

value使用json字符串 获取配置文件中的内容

<bean id="user02" class="com.lanou.entity.User">
	<property name="orders" ref="orderlist"></property>
	<property name="name" value="${user.name}"></property>
	<property name="pwd" value="${user.pwd}"></property>	
</bean>
注意: properties中避免使用 user  user.name等   user.name默认指本计算机用户名
使用Spring框架配置数据源 和 hibernate

注: 配置文件中的头文件 可以下载插件自动生成

<!-- 配置数据源 -->
	<!-- id自己命名  无要求 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
		<property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/jdbcd"></property>
		<property name="user" value="root"></property>
		<property name="password" value="123456"></property>
	</bean>
<!-- 有了dataSource 就可以扩展sessionFactory -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
		<!-- 获取数据源 -->
		<property name="dataSource" ref="dataSource"></property>
		<!-- hibernate自身的配置 -->
		<property name="hibernateProperties">
			<props>
				<!-- 配置方言 必须的 重要 -->
				<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
 				<prop key="hibernate.show_sql">true</prop>
 				<prop key="hibernate.format_sql">true</prop>
 				<prop key="hibernate.hbm2ddl.auto">update</prop>
			</props>
		</property>
		<!-- 扫描映射文件 使用*通配符 可以自动扫描包下所有配置文件 -->
		<property name="mappingLocations" value="classpath:com/lanou/entity/*.hbm.xml"></property>
	</bean>

连接完数据源 生成sessionFactory 可以配置DAO层的内容

<bean id="userDao" class="com.lanou.dao.UserDao">
	<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

使用配置的dataSource和sessionFactory查找数据库

注意: 配置表映射关系的配置文件 

public static void main(String[] args) throws SQLException {
	ApplicationContext ac = new ClassPathXmlApplicationContext("application-pools.xml");
	ComboPooledDataSource dataSource = (ComboPooledDataSource)ac.getBean("dataSource");
	Connection connection = dataSource.getConnection();
	String sql = "select * from jdbcd";
	PreparedStatement ps = connection.prepareStatement(sql);
	ResultSet resultSet = ps.executeQuery();
	while (resultSet.next()) {
		String string = resultSet.getString("username");
		System.out.println(string);
	
}
构造注入
<bean id="stu1" class="com.lanou.entity.Student">
	<!-- 构造注入 -->
	<!-- 两参构造 double,int可以通过type切换选择对应属性 -->
	<constructor-arg index="1" type="int" value="123"></constructor-arg>
	<constructor-arg index="0" value="lna"></constructor-arg>	
</bean>
value特殊符号 或 语句的录入
<bean id="stu2" class="com.lanou.entity.Student">
	<constructor-arg name="stuName">
		<value><![CDATA[<aaa>]]></value>
	</constructor-arg>
	<constructor-arg ref="car"></constructor-arg>
	<property name="car.price" value="200"></property>
</bean>
自动注入 autowire
	<!-- autowire="byName"根据属性的set方法名来进行匹配 自动注入 -->
<bean id="stu3"  autowire="byName" class="com.lanou.entity.Student">
	<property name="stuName" value="wukong"></property>	
</bean>

autowire 自动注入的是该bean对象中的对象属性(并且该对象是IOC中与set注入名相同的bean对象)

比如  stu3中有一个car类对象作为属性 在IOC中配置了该car类的对象 且id="car"

继承 parent  和 依赖 denpends-on

<bean id="stu4" depends-on="car1" parent="stu3">
	<!-- spring的EL表达式 -->
	<property name="money" value="#{T(java.lang.Math).PI * 10}"></property>
	<property name="stuName" value="#{car1.price > 30 ? '有钱人' : '兄弟一起吃土吧'}"></property>
</bean>

注意: 继承时 不会继承父级bean的 自动注入的属性

        依赖的bean对象要在IOC中存在  否则bean无效

自动注入 (使用扫描注解)
<?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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
	
	<!-- context:component-scan 扫描注解 -->
	<context:component-scan base-package="com.lanou"></context:component-scan>
	<!-- 配置数据源 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
		<property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/jdbcd"></property>
		<property name="user" value="root"></property>
		<property name="password" value="123456"></property>
	</bean>
	<!-- 配置sessionFactory -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
		<!-- 获取数据源 -->
		<property name="dataSource" ref="dataSource"></property>
		<!-- hibernate自身的配置 -->
		<property name="hibernateProperties">
			<props>
				<!-- 配置方言  必须的 重要的 -->
				<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
 				<prop key="hibernate.show_sql">true</prop>
 				<prop key="hibernate.format_sql">true</prop>
 				<prop key="hibernate.hbm2ddl.auto">update</prop>
			</props>
		</property>
		<!-- 扫描映射文件 -->
		<property name="mappingLocations" value="classpath:com/lanou/entity/*.hbm.xml"></property>
	</bean>

</beans>

此配置方法可以通过扫描注解直接注入依赖对象 

不用在ICD中配置bean对象  

@Repository
public class UserDao {
	@Autowired
	private SessionFactory sessionFactory;

	public User findById(Integer id) {
		Session session = sessionFactory.openSession();
		User user = session.get(User.class, id);
		return user;
	}
}
Struts2框架

使用ajax 实现前后端交互  将后台返回的data以json字符串形式打印出来

创建struts2的action类

package com.lanou.controller;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport{
	private String result;
	
	public String getResult() {
		return result;
	}
	public void setResult(String result) {
		this.result = result;
	}
	public String test() throws JsonProcessingException {
		User user = new User();
		user.setUserName("哈哈哈");
		user.setPassword("123");
		// 要把user转换成json字符串
		// 所以要用到 json转换工具
		ObjectMapper mapper = new ObjectMapper();
		// 实例化工具 mapper
		// 用 mapper转化对象
		result = mapper.writeValueAsString(user);
		System.out.println(result);
		return "success";
	}
}

注意: 在result的方法中 使用ObjectMapper对象(实例化工具) 将返回的data对象转化成json字符串

在struts.xml配置文件中 需要配置返回json字符串类型

<struts>					<!-- 如果要返回json 还需要继承json-default -->
	<package name="json" namespace="/json" extends="struts-default,json-default">
		<action name="test" class="com.lanou.controller.UserAction" method="test">
		<!-- 要返回json 需要把type写成json -->
			<result type="json" name="success">
			   <param name="root">
			   	<!-- 是方法返回对象的属性名 -->
			   	result  
			   </param>
			</result>
		</action>
	</package>
</struts>

写html页面  不需要form表单提交请求,使用ajax

<body>
	<h1>这是我们用ajax实现的前后端交互页面</h1>
	用户名:<input type="text" name="userName" class="name"><br/>
	密码:<input type="password" name="password" class="pass"><br/>
	生日:<input type="date" name="birthday" class="birth"><br/>
	<input type="submit" class="sub" value="提交">
</body>
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<script type="text/javascript">
	$(".sub").click (
		function() {
			$.ajax({
			url:"/struts2-02/json/test",
			data:{},
			dataType:"json",
			type:"get",
			success:function(data){
				console.log(data);
				// 但是这里得到的是json字符串
				// 而前端要获取的 一般是json对象
				// 所以前端需要将这个字符串转化为json对象
				var d = eval("("+data+")")
				console.log(d);
				console.log(d.userName);
			}
		})
		}	
	)
</script>
ajax ---用来处理异步请求的 json字符串 用xml存储数据
同步请求: 等待一个一个执行
异步请求: 等待 但不妨碍其他执行(相当于又开启一个线程 多线程)
SSH三大框架 
来源: https://www.cnblogs.com/laibin/p/5847111.html

ssh为 Struts + Spring + hibernate的一个集成框架,是目前较流行的一种web应用程序开源框架

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。

Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。

轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。

控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。

面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。

容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。

框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值