1.servlet的生命周期
Servlet运行在Servlet容器中,其生命周期由容器来管理。Servlet的生命周期通过javax.servlet.Servlet接口中的init()、service()和destroy()方法来表示
Servlet的生命周期包含了下面4个阶段:
1.加载和实例化
Servlet容器负责加载和实例化Servlet。当Servlet容器启动时,或者在容器检测到需要这个Servlet来响应第一个请求时,创建Servlet实例。当Servlet容器启动后,它必须要知道所需的Servlet类在什么位置,Servlet容器可以从本地文件系统、远程文件系统或者其他的网络服务中通过类加载器加载Servlet类,成功加载后,容器创建Servlet的实例。因为容器是通过Java的反射API来创建Servlet实例,调用的是Servlet的默认构造方法(即不带参数的构造方法),所以我们在编写Servlet类的时候,不应该提供带参数的构造方法。
2.初始化
在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象。初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化的工作,如建立数据库的连接,获取配置信息等。对于每一个Servlet实例,init()方法只被调用一次。在初始化期间,Servlet实例可以使用容器为它准备的
ServletConfig对象从Web应用程序的配置信息(在web.xml中配置)中获取初始化的参数信息。在初始化期间,如果发生错误,Servlet实例可以抛出
ServletException异常或者UnavailableException异常来通知容器ServletException异常用于指明一般的初始化失败,例如没有找到初始化参数;而UnavailableException异常用于通知容器该Servlet实例不可用。例如,数据库服务器没有启动,数据库连接无法建立,Servlet就可以抛出
UnavailableException异常向容器指出它暂时或永久不可用。
3.请求处理
4.服务终止
2.ajax的异步和同步有什么区别
同步:我的理解是一种线性执行的方式,执行的流程不能跨越。一般用于流程性比较强的程序,我们做的用户登录功能也是同步处理的,必须用户通过用户名和密码验证后才能进入系统的操作。
异步:是一种并行处理的方式,不必等待一个程序执行完,可以执行其它的任务。在程序中异步处理的结果通常使用回调函数来处理结果。
3.过滤器的实现方式
新建一个Filter接口的实现类
public class AFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("you are blocked by me");
// filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
4.Filter可以用来干嘛?
1. 他可以过滤指定的文件夹或者指定网址
2. 可以为不同客户提供不同权限的功能
3. 解决一些字符乱码问题
5.mybatis如何实现分页
- 使用Map来进行包装数据实现分页功能
1),在SQL语句映射的ResultType返回的是你要查询得到的实体类
2),穿进去的参数parameterType是你自己包装的Map类型
3),首先你传进来的参数要和SQL语句中的字段名要保持一致
4),在实体DAO层还需要把查询数据的起始下标,和查询多少条数据都put进Map中
SQL映射:
<select id="getAllMap" resultType="User" parameterType="Map">
SELECT * FROM user limit #{startIndex},#{pageSize}
</select>
DAO实现类:
//这个是实现分页查询功能(用map来实现的第一种方式)
public List<User> getAll(int currentPage,int pageSize) throws IOException {
SqlSession sqlSession = MybatisUtil.getSession();
Map<String,Integer> map = new HashMap<String, Integer>();
//这个是把当
map.put("startIndex",(currentPage-1)*pageSize);
map.put("pageSize",pageSize);
List<User> list = sqlSession.selectList("UserMapper.getAllMap",map);
sqlSession.close();
return list;
}
- 使用RowBounds来实现分页
1),只需要设置一个返回值为User实体类型
2),RowBounds rowBounds= newRowBounds((currentPage-1)*pageSize,pageSize);
3),就是上一步多了一个创建一个RowBounds对象,然后需要传入SQL语句中需要的参数就行了
4),然后sqlSession在执行selectList的时候把那个rowBounds对象直接传进去就可以了