jsp/servlet

_jspService

init/destory/service

jsp注释 <%--xxx--%>

jsp声明 <%! 声明部分 %>  不能声明abstract method,否则就导致servlet变成abstract 而无法实例化

jsp表达式 <%=表达式%>

jsp脚本 <%脚本%>

<%
for (int i=0;i<10;i++)
{
%>
<tr>
<td></td>
<td><%=i%></td>
</tr>
<%
}
%>

==>

_jspService(){
for (int i=0;i<10;i++)
{
out.write("\t\t<tr>\r\n");
out.write("\t\t<td></td>\r\n");
out.write("\t\t<td>");
out.print(i);
out.write("</td>\r\n");
out.write("\t\t</tr>\r\n");
}
}

jsp编译指令

page/include/taglib

9内置对象

application/config/exception/out/page/request/response/pageContext/session

request/response这两个对象是_jspService()方法的参数,而page,pageContext,application,config,session,out都是这个方法的局部变量。

所以不要在JSP声明中使用这些对象!!!

关于exception 只有当PAGE为isErrorPage为TRUE时,Servlet才会初始化exception对象。

WEB 服务基本流程 参考tomcat 源代码

  • 启动服务的进程或线程
  • 通过IO读取用户的请求数据
  • 从流中解析出各种数据参数
  • 处理用户请求
  • 生成相应的response数据
  • 通过IO-Stream向客户端发回数据

 JSP Servlet之间怎么交换数据

map: application,session,request,page 四个cache 对应于application,session,request,pageContext for _jspService()

ServletContext sc=getServletConfig().getServletContext();
sc.getAttribute("counter");

获取application的配置参数

<%
String user=application.getInitParameter("username");
%>

request

<%
String rawQueryStr= request.getQueryString();
String queryStr= java.net.URLDecoder.decode(rawQueryStr,"gbk");

%>

forward 请求的参数和请求属性都不会丢失!!!

include vs forward

getRequestDispatcher("/bla.jsp").include(request,response)

getRequestDispatcher("/foo.jsp").forward(request,response)

response可以用来重定向 与forward不用,重定向会丢失所有的请求参数!

<%
out.print("===");
response.sendRedirect("redirect-result.jsp");
%>

Cookie vs session.

session 会随着browser关闭而丢失而cookie会persist在client

response支持对cookie的增加操作,而request.getCookies()

Cookie ck=new Cookie("username","abccxx");
ck.setMaxAge(24*3600);
response.addCookie(ck);

session getAttribute,setAttribute

自MVC规范后,Servlet的职责开始明确为CONTROLLER,不再需要为生产页面标签而繁琐,那是jsp等其他view framework的职责!!!

servlet:

doGet/doPost/doPut/doDelete/service/init/destory

通过init来初始化,因为servlet本身被容器构造,通过destory来销毁

Servlet 3.0 Annotation.

@WebServlet(name="firstServlet",urlPatterns={"/firstServlet"})
public class FirstServlet extends HttpServlet{

}

生命周期

lazy loaded: first requst to create servlet instance, for most cases.

you can early startup with application bootstrap: load-on startup servlet.

create instance--> init-->handle request-->destory

servlet主要用来做控制器使用!!!

 

JSP 2 标签库

  • 标签处理类,
  • tld文件,
  • embed in JSP
<%@ taglib uri="http://www.crazyit.org/mytaglib" prefix="mytag"%>

<mytag:helloworld/>
public class HelloWorldTag extends SimpleTagSupport{
public void doTag() throws JspException,IOException{
getJspContext().getOut().write("Hello World " +
new java.util.Date());
}

}

QueryTag sample

public class QueryTag extends SimpleTagSupport{
private String driver;
private String url;
private String user;
private String pass;
private String sql;
//getter setter for tag attributes...
public void doTag() throw JspException,IOException{

}
}

tld

<tag>
<name>query</name>
<tag-class>lee.QueryTag</tag-class>
<attribute>
<name>driver</name>
<required>true</required>
</attribute>
</tag>

embedded in jsp

<mytag:query
driver="xxx"
url=""
user=""
pass=""
sql=""
/>

 Filter 

chain of handlers

典型Filter

用户授权的Filter/log filter/decode+encode filter/改变XML内容的XSLT FILTER

javax.servlet.Filter

init/destory/doFilter

@WebFilter(filterName="log",urlPatterns={"/*"})

 

Listener介绍

web容器/应用内部会发生各种事情, Listener就是用来处理监听这些事情的.

web app启动关闭/app属性的改变/request attribute/session/session attribute的变化.

 

 

posted on 2012-09-19 14:34  grep  阅读(362)  评论(0编辑  收藏  举报