Session、Struts and Hibernate
Session
1、什么是Session
服务器可以为每个用户浏览器创建一个会话对象(session对象), 一个浏览器独占一个session对象(默认情况下)。
在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中。
由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session.典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用于标识用户,并且跟踪用户,这样才知道购物车里面有几本书。这个Session是保存在服务端的,有一个唯一标识。
客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录 在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
用户与服务器建立连接的同时,服务器会自动为其分配一个SessionId。
2、什么是Cookie
Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端会把Cookie保存起来。
当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。
3、Cookie与Session的区别
Cookie是把用户的数据写给用户的浏览器。
Session技术把用户的数据写到用户独占的session中。
Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。
4、Session的实现原理
服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机,这样,只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号去,服务器发现客户机浏览器带session id过来了,就会使用内存中与之对应的session为之服务。
//使用request对象的getSession()获取session
HttpSession session = request.getSession();
Hibernate
1、什么是Hibernate
一个对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
2、POJO与JAVABean
POJO:纯洁老式的Java对象
JavaBean是一种组件技术,就好像你做了一个扳子,而这个扳子会在很多地方被拿去用,这个扳子也提供多种功能(你可以拿这个扳子扳、锤、撬等等),而这个扳子就是一个组件。
2、为什么使用Hibernate
Hibernate对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
Hibernate是一个基于JDBC的主流持久化框架。
JDBC:JDBC是一种用于执行SQL语句的Java API
3、Spring 中的JdbcTemplate
@Test
public void test1() {
// JDBC模板依赖于连接池来获得数据的连接,所以必须先要构造连接池
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/spring");
dataSource.setUsername("root");
dataSource.setPassword("123456");
// 创建JDBC模板
JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(dataSource);
// sql语句
INSERT INTO t1(field1,field2) VALUE(v001,v002);
String sql = "delete from temp where id = ?";
String sql = "update temp set username =?,password=? where id = ?";
jdbcTemplate.update(sql, user.getUsername(),user.getPassword(),user.getId());
System.out.println(num);
}
execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;
query方法及queryForXXX方法:用于执行查询相关语句.
4、Spring JPA ----------- Hibernate
JPA:Java持久层API,一种对象/关系映射工具来管理Java应用中的关系数据。
配置数据源:
spring.datasource.url=jdbc:mysql://localhost:3306/sys
spring.datasource.username=root
spring.datasource.password=123
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto=create
编写实体类:我们给实体类加上@Entity加上注解后,实体类User会将首字母变为小写和数据库中的user表相对应。
@Entity
public class User {
@Id
@GeneratedValue
private Long id;
@Column(nullable=false)
private String name;
@Column(nullable=false)
private Integer age;
public User(){}
public User(String name, Integer age){
this.name = name;
this.age = age;
}
省略get/set方法。。。
}
编写接口:
@Repository
public interface UserRepository extends JpaRepository<User, Long>{
User findByName(String name);
User findByNameAndAge(String name, Integer age);
//test的实际效果是查询
@Query("select p from Person p where p.name=?1 ")
User test( String name);
}
两个框架
Struts
轻量级的MVC框架,主要解决了请求分发的问题,重心在控制层和表现层。
![](https://img.haomeiwen.com/i5501905/4351a496b8d41b74.png)
Action:
public class LoginAction extends ActionSupport {
private String username;
private String password;
@Override
public String execute() throws Exception {
if (username.equals("wu") && password.equals("123")) {
return SUCCESS;
} else {
return LOGIN;
}
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Spring
![](https://img.haomeiwen.com/i5501905/f2f1eb03fe9a5f6e.png)
ORM :对象关系映射Object Relational Mapping
Other
一个int占4个字节 32位
Float 占4字节
char占2字节
AOP的实现原理—反射与动态代理
JAVA反射机制:
对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
HashMap:数组和链表