一、选择题
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();
}
}