-
J2EE相关
-
Servlet的生命周期
在web容器中,客户端请求servlet包含四个阶段
1.加载Servlet 创建Servlet实例 基类Httpservlet.class 2.初始化Servlet init() 3.处理服务 service() 4.销毁 servlet长时间不适用或者servlet申请关闭 -
Servlet请求流程
-
浏览器发起请求 80:/**1/**2
-
服务器解析url
-
解析tomcat根目录的/config/server.xml 中**1,获得项目实际路径,
找不到404
-
在实际路径/WEB-INF/web.xml的url-pattern中找**2,并拿取Servlet全限定类名com.bat.*
找不到404
-
在Servlet实例缓存池查com.bat.*
-
如果对象不存在,反射创建,并加入缓冲池
obj=Class.forName("com.bat.*").newInstance()
cache.put("com.bat.*",obj)
obj.init()
obj.service(req,resp)
-
Servlet是单例的,创建后驻留内存不会自行销毁,除非服务器关闭
-
get和post区别
get安全系数相对低,参数直接暴露地址栏,请求信息不能超过1kb post相对安全,可上传图片,信息大小不限制
-
tomcat乱码问题如何解决
-
用iSo-8859-1解码乱码数据,再用utf-8编码,数据多的时候,太繁琐,损耗性能
-
post请求 setCharacterEncoding("utf-8")
get请求,修改server.xml URIEncoding="UTF-8"
-
-
forward和redirect
forward:
用法: request.getRequestDispatcher(path).forward(req,reps)
1.单Servlet,单请求地址栏地址不改变 2.getAttribute() setAttribute()共享资源 3.可访问WEB-INF下资源 4.不能跨域访问[域名 协议 端口]redirect:
用法: request.sendRedirect(String location) 1.地址改变, 2.两个请求, 3.两个Servlet, 4.不能访问WEB_INF, 5.能跨域 -
JSP原理
浏览器访问JSP,tomcat的JSP引擎会翻译成Servlet,编译Class文件,容器装载Servlet程序
-
静态包含和动态包含
<%@include file="被静态包含的页面的路径"%> JSP被翻译时候合并,合成一个class <jsp:include page="被动态包含页面的路径"></jsp:include> 运行时候合并,两个class-
JSP九大内置对象
request 一次get/post请求
response 一次响应
pageContext 当前JSP
session 一次会话
application 当前应用
out 输出流
config jsp配置
page 当前页面
exception 异常
-
JSTL 是JSP标准标签库
-
cookie和session
1.cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
2.session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
3、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
4、可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。
-
Servlet的filter
作用:
1.请求资源前设置编码 2.登陆校验 3.参数校验过滤 4.数据压缩,加密,转换 -
为什么使用MVC三层架构
答: 请求到后端Controller,调用Model逻辑,View生产JSP,动态输出HTML,最后返回浏览器,将模模块松耦合,各自完成功能.提高代码可读性和可维护性
-
Spring框架
-
- Spring中Bean作用域
// XML 中设置作用域 <0bean id="" class="" scope="prototype" />
// 使用注解设置作用域 @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
singleton
prototype
request
session
globalsession 单点登录
- MVC请求流程详解

第一步来到DispatcherServlet其实就是阻断筛选请求到spring MVC
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<!-- 拦截所有的请求 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
第二步来到处理器映射器,也就是挑选controller
<bean id="simpleUrlHandlerMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<!-- /hello 路径的请求交给 id 为 helloController 的控制器处理-->
<prop key="/hello">helloController</prop>
</props>
</property>
</bean>
<bean id="helloController" class="controller.HelloController"></bean>
第三步来到处理器适配器 并拿到数据
第四步数据一般发送到视图jsp,逻辑jsp名和数据返回给DispatcherServlet
第五步,由视图解析器匹配特定视图,可能是jsp可能其他
第六步,视图渲染,html通过DispatcherServelt返回前台客户端
- MyBatis的占位符 # $区别
答:
- #传入数据都当做字符串,自动加双引号
- $ 直接拼接sql中
- #预编译,可以防止sql注入
- 总之能用#别用$
4.MyBatis缓存结构
答:
* 一级缓存sqlsession级别 同一个sqlsession访问
* 二级缓存mapper级别 跨sqlsession共享