JAVAEE 复习猜想

一、选择题

1.404资源不存在 500服务器错误
2.page一个页面 request请求产生后,响应完成前
session浏览器 application web服务器自创建至结束
3.spring bean的作用域(scope属性)
singleton prototype request session globalsession
4.依赖注入的方式
byName byType constructor autodetect
5.spring四种注解
@autowired默认按类型装配 @resource默认按名称装配
@service业务层 @Controller控制层(如struts中action)@RepositoryDAO层 @Component不好归类的组件
6.一个action可以接受多个请求
7.session,servlet线程不安全,sessionFactory,action线程安全

二、简答题

1.Hibernate生命周期的四种状态
瞬时态:一个新建的对象是处于瞬时状态的,即不和数据库中的任意表有关联。
持久态:实体对象和Hibernate的session实例关联;在数据库中有与之关联的记录。
脱管态:持久态的session关闭后就是脱管态。(本质上与瞬时对象相同;多了一个数据库记录标识值)
移除态:调用session的delete或remove方法删除持久态。

2.jsp和servlet的原理及对比。
servlet实质上是一种java类,服务器端收到客户端请求后执行servlet响应返回给客户端。
jsp是将java代码嵌入到HTML代码中形成jsp文件。jsp是基于servlet技术的,要由servlet容器转换为servlet编译。
区别:
编程方式不同:jsp为了生成动态web页面,嵌入java代码。servlet通过action传递给服务器端servlet进行处理。
编译时机不同:servlet在web应用部署到服务器前编译,jsp转换和编译都是servlet容器自动完成;servlet没修改一次都要重新编译和部署,jsp文件修改后servlet容器自动更新编译。(即修改servlet需要重启tomcat,jsp不用)
jsp是MVC中的表现层(View),servlet是控制层(Controller)

3.内置对象的含义及生命周期
request:生命周期由JSP容器创建,当客户端通过HTTP协议请求一个JPS页面时,JSP容器就会创建一个request对象并将请求封装到request对象中,当JSP容器处理完请求之后request对象将被销毁。

response:当服务器向客户端传送数据时,JSP容器就会创建response对象并将响应信息封装到response对象中,当JSP容器处理完响应后,response对象将会被销毁。

session:session对象处理客户端与服务器的回话,从客户端连接服务器开始直到客户端与服务器断开连接为止。

application:服务器创建后会自动创建application对象,该对象一直有效直到服务器关闭。

参考原文:https://blog.csdn.net/he1154910941/article/details/80764249

4.struts拦截器与过滤器

拦截器 (interceptor):在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。

过滤器(filter):过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet或JSP页面上,并且可以检查进入这些资源的请求信息。

拦截器和过滤器的区别:

1、拦截器是基于java的反射机制的,而过滤器是基于函数回调

2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器

3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用

4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能

5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次

参考原文:https://www.cnblogs.com/ncl-960301-success/p/7552230.html

5.延迟加载

延迟加载(lazy load)是(也称为懒加载)Hibernate3关联关系对象默认的加载方式,延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。
在这里插入图片描述

6.struts配置文件

<package name="root",namespace="/",extends="struts-default">
<action name="helloservlet",class="/servlet/helloservlet">
<result>view.jsp</result>
</action>
</package>

ERROR //动作执行错误
INPUT //输入验证失败
LOGIN //用户未登录
NONE //动作执行,但没有结果视图
SUCCESS //动作执行成功

7.IOC和DI
IOC,控制反转。即应用本身不负责依赖对象的创建和维护,而依赖对象的创建和维护由外部容器负责。
DI,依赖注入。在运行期,外部容器动态地将依赖对象注入到组件中。

8.AOP
AOP,面向切面编程,是OOP的发展,也是spring框架中的一个重要内容。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

9.ORM
对象关系映射,即对象数据到关系型数据映射的机制。
1.是一种规范,完成实体类到关系模式的映射(设计时)
2.是一种技术,完成数据库中关系记录到实体对象之间的映射(运行时)
优势:既可以利用面向对象语言的直观性,又利用关系数据库管理优势。

10.请求转发与请求重定向的对比
在这里插入图片描述

五、程序设计题

1.前端页面,后台接收,请求转发,重定向
Servlet:

protected void doGet(HttpServletRequest request,HttpServletResponse response) throws Exception
{
	request.setCharacterEncoding("UTF-8");
	String name=request.getParamete("username");
	String pd=request.getParameter("passwd");
	HttpSession session=request.getSession();
	session.setAtrribute("uname",name);
	response.sendRedirect("./show.jsp");
}

index.jsp:

<form method="post" action="/servlet">
用户名:<input type="text" name="u"><br>
密码:<input type="text" name="p"><br>
<input type="submit" value=“提交”>

show.jsp:

<%String uname=(String)session.getAttribute("uname");%>
欢迎<%=uname%>登陆!

2.struts拦截器
p128页

3.hibernate注解

package base;

import javax.persistence.*;

@Entity
@Table(name="t_user")
public class User {
	private int uid;
	private String username;
	String passwd;
	String address;
	
	@Id
	@GeneratedValue
	public int getUid() {
		return uid;
	}
	public void setUid(int uid) {
		this.uid = uid;
	}
	@Column(name="username")
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	
	@Column(name="password")
	public String getPasswd() {
		return passwd;
	}
	public void setPasswd(String passwd) {
		this.passwd = passwd;
	}
	@Column(name="address")
	public String getAddress() {
		return address;
	}
	public User() {
		super();
	}
	public void setAddress(String address) {
		this.address = address;
	}

}

hibernate增删改查

package Test;

import static org.junit.Assert.*;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Before;
import org.junit.Test;

import base.User;

public class TestAdd {
	@Test
	public void testAdd() {
//		第一步 加载hibernate核心配置文件
		// 到src下面找到名称是hibernate.cfg.xml
		//在hibernate里面封装对象
		Configuration cfg = new Configuration();
		cfg.configure();
		
//		第二步 创建SessionFactory对象
		//读取hibernate核心配置文件内容,创建sessionFactory
		//在过程中,根据映射关系,在配置数据库里面把表创建
		SessionFactory sessionFactory = cfg.buildSessionFactory();
		
//		第三步 使用SessionFactory创建session对象
		// 类似于连接
		Session session = sessionFactory.openSession();
		
//		第四步 开启事务
		Transaction tx = session.beginTransaction();

//		第五步 写具体逻辑 crud操作
		//添加功能
		User user = new User();
		user.setUsername("小王");
		user.setPasswd("250");
		user.setAddress("日本");
		//调用session的方法实现添加
		session.save(user);
		//session接口:save、update、delete、load、find
		
//		第六步 提交事务
		tx.commit();

//		第七步 关闭资源
		session.close();
		sessionFactory.close();
	}

}