欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Struts2框架与Spring框架初解三

程序员文章站 2022-07-13 21:11:11
...

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,完成数据持久化的重任。