首页 > 代码库 > j2ee学习笔记
j2ee学习笔记
Servlet:
①字符集问题:
②身份验证:
③统一的输入输出:类似母版,重写ServletResponeceWraper的getWriter,使用缓存流。
然后输出时,分析stringWriter ,重构html结构。
原因:之前的方式存在两个问题:
①目录结构混乱
②程序可能将printwriter关闭,导致下边的输出停止。
解决方法:filter 过滤器
特点:
①过滤方向是双向的
②request和response,chaine
③配置web.xml
④默认只过滤client的请求
<dispatcher>request</dispatcher> 默认状态
<dispatcher>forward</dispatcher>内部转发也过滤
<dispatcher>include</dispatcher>
修饰模式(装配模式)
实现接口,成员为其实现类的对象,增加其他数据。
①ServletResponeceWraper就是这样一个类,
②我们继承其类,即可完成。
listener
===监听生命周期的事件==
创建:*Init ①服务器启动时,加载公用数据。
销毁:*Destroy
=============================
ServletContextListener
HttpSessionListener :购物车collection<Product>;
ServletRequestListener
=============================
ServletContextAtrributeListener
HttpSessionAtrributeListener
ServletRequestAtrributeListener
=============================
JSP与Servlet的对比:
①实质都是Servlet,应用服务器将其翻译,转换成java,然后使用。tomcat/work/catalina/...
②servlet更适合业务处理,jsp更适合视图,即显示数据
JSP:
一、语法:
①.jsp的后缀
②存在位置:webapps下,web-inf外的路径下
③直接访问,无须web.xml配置
④当jsp首次访问时,服务器将jsp翻译成java文件,然后javac成执行文件
二、元素:
1>脚本元素:
①声明脚本 <%! 声明体%> 成员变量
②表达式脚本 <%= 表达式 %> 编译在service方法中,当局部变量与成员变量重复时,所以优先使用普通脚本中的变量。
③普通脚本 <% %> 在service方法中,变量是局部变量 可以编写除了函数声明外的任何java代码
2>指令元素:
1.页面指令:<%@page 属性="值" 属性2="值2" ...%>
对jsp页面描述说明
①contentType="text/html"
contentType="text/html;character-set"
②import 导包、类
<%@page import="java.util.*"%>
默认,已导入:java.lang.*,javax.servlet.*,javax.servlet.http.*,javax.servlet.jsp.*
③isErrorPage="true|false"
④errorPage="URI"
⑤session="true" 是否使用session,默认true
⑥language="java"
2.包含指令:
静态包含:<%@ include file="url"%> 静态包含,编译前包含
三、隐含对象
不需要new,直接使用的一组对象,tomcat自动创建
只能在<%=%>、<% %>中使用。
1.request
type:HttpServletRequest
method:getParameter
setAttribute
getAttribute
getSession
getMethod
getRequestURL:全球资源定位
getRequestURI:主机资源定位
getContextPath:应用名
2.session
type:httpSession
method:setAttribute
getAttribute
removeAttribute
isNew:第一次访问true,之后是false
3.out
type:javax.servlet.jsp.jspWriter
4.exception
注意:只能在error.page中使用
5.responce:
6.application
type:javax.servlet.ServletContext
setAttribute()
getAttribute()
removeAttribute()
7.page
type:java.lang.Object
代表当前jsp对象
8.config
type:javax.servlet.servletConfig
9.pageContext
type:javax.servlet.jsp.PageContext
①获取其他8个隐含对象
pageContext.getRequest();
②作用域:代表请求中的一个页面,其作用域只是一个请求中的一个页面对象
③可以直接获取其他3个作用域中的属性:依次从小到大查找
Object o = pageContext.findAttribute();
getAttribute(name,scope)
④include|forward
四、EL表达式:express language 表达式语言
1>语法:${ name } 按照从小到大的顺序在四个作用域中查,找名字为name的命名属性
2>作用:计算表达式,且输出${param.name} == <%= request.getParameter(“name” ) %>
3>基本运算:${ empty a } :a如果为空返回true ,否则返回false
4>简化获取作用域中的命名属性:
②当作用域中存在重名变量时,可以在EL中明确指定查找的作用域:
5>作用域:pageSope/requestScope/sessionScope/applicationScope
6>如果属性是对象,可以使用点语法。
7>获取Client的数据:${param.age} 等价于 request.getParameter(age);
8>获取Cookie的数据:${cookie.JSESSIONID.value}
等价于:Cookie cookies = request.getCookies();
遍历;
9>隐含对象:
五、JSTL :java standard tag library apache提供的
四、静态包含和动态包含(类似静态库和动态库)
<%@include file=“fun.jsp”%>
静态包含指令,用于将目标文件的源代码包含到本页面中
相当于进行了一次拷贝粘贴操作,被包含的目标文件不会生成独立的servlet源码
如果被包含的多个文件中有重名的变量,会出现变量冲突
<jsp:include page=“header.jsp” />
动态包含指令,用于将目标文件的输出结果和本页面合并在一起
被包含的目标文件独立运行,会生成独立的servlet文件
由于只是进行结果的合并,不存在变量冲突
参数传递:
动态包含参数传递:当前jsp对象向被包含对象传递参数,使用getparameter("name")获取即可
<jsp:include page=“/common/header.jsp”>
<jsp:param name=“a” value=http://www.mamicode.com/“123”/>
<jsp:param name=“b” value=http://www.mamicode.com/“456”/>
</jsp:include>
<jsp:forward page=“sub/b.jsp”>
<jsp:param name=“a” value=http://www.mamicode.com/“1”/>
<jsp:param name=“b” value=http://www.mamicode.com/“2”/>
</jsp:forward>
五、Java标准标签库 JSTL java standt tag libary
①引入包文件:jstl.jar 和 standard.jar
②标签作用域scope
page : pageConetxt
session : HttpSession
application : ServletContext
框架学习:
一、Hibernate框架:
二、Struts2框架:
1.struts.xml
<package name="user" namespace="/User" extends="struts-default">
<action name="Login">
<result>/login.jsp</result>
</action>
<action name="Welcome" class="com.yiibai.user.action.WelcomeUserAction">
<result name="SUCCESS">/welcome_user.jsp</result>
</action>
<action name="Hello">
<result>/WEB-INF/page/hello.jsp</result>
</action>
</package>
①package的namespace不写,则为默认命名空间,找不到的action都会在默认命名空间下寻找
②action:
name:action的名字,区分大小写,请求中可以不添加action的后缀
class:默认是"ActionSupport"
method:默认是"execute"
搜索顺序:
①请求url中寻找,如未找到,跳至上一级,继续①,如果找到,则处理返回
②如果根命名空间下还未找到,则到默认命名空间寻找
③如果找到,则报错
③result:
name:默认"SUCCESS"
三、spring mvc框架
1.spring mvc是spring框架的一部分,即在spring框架下的mvc的具体处理和实现
2.执行过程:
1.request->dispacherServlet
2.dispacherServlet -> handlerMapping 根据注解、xml
3.handlerMapping -> dispacherServlet 返回handlerExcutionExplain(Handler)
4.dispacherSerlet -(handler)> handlerAdapter
5.handlerAdapter -> 执行handler
6.handlerAdapter —> dispacherServlet 返回ModelAndView
7.dispacherServlet -(ModelAndView)> Viewresolver
8.Viewresolver -> dispacherServlet 返回物理View
9.dispacherServlet 填充model,视图渲染,相应结果
3.组件:
1.前端控制器 DispatcherServlet (不需要开发,配置即可)
作用:Controller,接受请求,相应结果,即转发器dispacher
2.处理器映射器 HandlerMapping (不需要开发)
作用:根据请求url,根据注解、查找handler
3.处理器适配器 HandlerAdapter (不需要开发)
作用:按照特定规则,执行handler
注意:编写handler按照adapter的要求编写
4.处理器 Handler (需要按照adapter进行开发)
5.视图解析器 View resolver
作用:根据逻辑视图,解析成真正的视图
6.视图 View (jsp freemaker pdf excel)(需要开发)
j2ee学习笔记