1、J2EE是一个企业级开发平台,一个标准。
2、 模型(业务数据和处理该数据的方法的组合)-视图(表示层1)-控制器(MVC)不是Servlet和Jsp所特有的,MVC关键是业务逻辑与表示分离,业务逻辑本身就能作为一个可重用的独立Java类存在。
3、Servlet&Jsp中的MVC
M(普通Java类)具体的业务逻辑和状态。
C(Servlet)从请求获得用户输入,明确输入对模型的影响。告诉模型自动更新,并让视图(JSP)得到新的模型状态。(更新模型,驱动视图反应新的模型)
V(Jsp)负责表示方面,从控制器得到模型的状态。另外视图还要获得用户输入,比交给控制器。
4、容器为Web应用提供了通信支持、生命周期管理、多线程支持、声明方式安全、以及Jsp支持。创建了一个请求对象和响应对象
5、逻辑名映射到servlet类文件
a)点击,浏览器生成以下请求URL
(主机服务器的根)/Beer-v1(Web应用上下文根)/SelectBeer.do(逻辑资源名)
b)容器搜索DD,找到<Url-pattern>-/资源逻辑名相匹配的<servlet-mapping>
c)看到对应的<servlet-name>的servlet名
d)容器查找到<servlet-name>同名的<servlet>标记
e)根据<servlet>标记中<servlet-class>容器知道负责处理这个请求的servlet类
f)容器开发一个新线程来处理这个请求,并把请求传递给这个线程(传递给servlet的service方法
g)容器把响应(当然是通过Web服务器)发回给客户
6、from表单中action=提交的地址(相对路径/绝对路径),跳转到相对应的url地址
7、MVC啤酒顾问WEB应用
1)浏览器把请求数据发送给容器
2)容器通过URL找到servlet,并把请求传送给servlet
3)servlet调用BeerExpert组件获得帮助
4)这个“专家”返回一个回答,servlet把这个回答添加到请求对象
5)servlet把请求传递给Jsp
6)Jsp从请求对象获得答案
7)Jsp为容器生成一个页面
8)容器把这个页面发回给用户
8、Jsp页面注释
1)、<% XXXXXXXXX%>内部的代码和普通java文件一样“//”,"/**/",“/*
* */”
2)、html的代码,和html相同“<!-- XXXXXXX-->”
3)、<%%>整体可以当做html代码来处理“<!-- <%XXXXXXXXXX %> -->”
9、servlet中init方法与service方法
Init初始化,在service调用之前完成
10、servlet中默认调用doGet()方法,
11、设置编码均是response响应!!!
response.setCharacterEncoding(“gbk”);
response.setContentType(“text/html;charset=gbk”);
12、jsp与servlet之间跳转
Jsp----->servlet form表单的action提交
Eg:Login.jsp Check.java Welcom.jsp
<form action=”Check”>/<formaction=”/项目名/Check”>
RequestDispatcher rd =getServletContext().getRequestDispatcher(“/Login.jsp”);
RequestDispatcher rd =request.getRequestDispatcher(“Login.jsp或者 /Login.jsp”)
Rd.forward(request,response);
/request.sendRedirect(Login.jsp);
13 、Http方法
doGet、doOptions、doPut、doHead、doTrace、doDelete是幂等的(不会修改服务器上的任何内容,可执行多次)
doPost是非幂等的(提交数据可能用于不可逆转的事物,需要验证)
方法默认为get()
14、Request&Response
请求和响应是一切一切的关键,也是service()的参数
ServletRequest<-----------------------------HttpSerlvetRequest
|-getAttribute(String) |-getCookie
|-getContentLength() |-getSession
|-getInputStream() |-getHeader(String)
|-getLocalPort() |-getContentPath()
|-getParameter(String) |-getQueryString()
|-getParameterNames() |-getMethod()
a)getParameterValues()-->String[](复选框)
b)getInputStream 处理post中过于大的请求体(包含要处理的文本或二进制的内容),这些流只包含Http请求的体而不包含首部。
c)getServerPort(请求用来发送到的端口)
getLocalPort(请求最后发送到的端口)
getRemotePort(得到发出请求的客户端口,远程即是客户)
ServletRsponse<----------------------------HttpSerlvetResponse
|-setContentType(String) |-addCookie(Cookie)
|-getContentLength(int) |-encodeRedirectURL(String url)
|-getOutputStream() |-addHeader(String name,Stringvlaue)
|-getBufferSizet() |-sendError(int)
|-getWriter() |-sendStatus(int)
a)addHeader()与setHeader()区别
首部以是响应的一部分,set会替换原有值,add另增一个值,无时,都会增加一个值。
setIntHeader()用提供的整数值替换现有首部的值,或者另增加一个新的。
b) setContentType(“内容类型/MIME类型”)
MIME类型:text/html
application/pdf
video/quicktime
application/java
Image/jpeg
Application/jar
Appilcation/octet-stream
Application/x-zip
HttpServletRequest与HttpServletResponse接口增加了与Http协议相关的方法......你的Servlet与客户/浏览器通信时就要使用这些方法。
15、Http请求方法有8种
GET:doGet() 得到请求Url上的一个东西(资源或文件)
-->数据小、不安全、但可建立书签、幂等、默认方法
POST:doPost() 要求服务器接收附加的请求的体信息(似扩展的Get)
-->数据大、安全、不可建立书签、非幂等、非默认
HEAD:doHead() 得到Get返回结果的首部部分,可提供信息,不会真正返回实际的那个东西(资源或文件)
TRACE:doTrace() 请求信息回送,客户可以看到,以便测试或排错
PUT:doPut() 把包含的信息体包含到请求的Url上
DELETE:doDelete()删除所请求的URL上的东西(资源或文件)
OPTIONS:doOptions()要求得到Http方法的列表,所请求的URL上的东西可对这些HTTP方法做出响应。
CONNECTION:连接以便建立隧道
16、servlet初始化参数
DD(web.xml):
<servlet>
<init-param>
<param-name>参数名</param-name>
<param-calue>参数值</param-value>
</init-param>
</servlet>
Servlet:
Out.println(getServletConfig().getInitParameter(“参数名”));
详解:
getServletConfig()-->每个servlet均继承了一个getServletConfig()方法--->该方法返回一个ServletConfig--->getInitParameter()是ServletConfig的一个方法。
容器初始化一个servlet时,会为这个servlet建立唯一一个ServletConfig,容器从DD“读出”servlet初始化参数,并把这些参数交给ServletConfig(),然后把ServletConfig交给servlet的init方法
超类包括两个版本的init,init()与init(ServletConfig)
17、ServletConfig
|-getInitParameter(String)
|-EnumerationgetInitParameterNames()
|-getServletContext()
|-getServletName()
Enumeration e
e.hasMoreElements()枚举对象中是否还存有元素
e.nextElement() 下一个元素
18、上下文初始化参数----->针对这个web应用
DD(web.xml)
<servlet>
</servlet>
<context-param>
<param-name>参数名</param-name>
<param-value>参数值</param-value>
</context-param>
Servlet:
Out.println(getServletContext().getInitParameter(“参数名”));
详解:
getServletCOntext()-->每个servlet均继承了一个getServletContext():jsp以特殊的方式访问上下文-->该方法返回一个ServletContext对象--->getInitParameter()是ServletContext的一个方法。
#初始化参数可认为是部署时的常量,可在运行时得到这些初始化参数,但不能设置。
19、ServletContext
|-getInitParameter(String)
|-getInitParametrNames()
|-getAttribute(Sring) 得到初始化参数,以及获取/设置属性
|-getAttributeNames()
|-setAttribute(String,Object)
|-removeAttribute(String)
|-getRequestDispatcher(String) 请求分派(sendRedirect请求重定向)
20、监听者
Eg:ServletContextListener是否创建或撤销了一个上下文
要监听ServletContext事件,需要编写一个实现了ServletContextListener的监听者类,并在部署描述文件中放一个listener元素来告诉容器。
21、属性---->即是一个对象,可设置到(ServletContext、HttpServletRequest、HttpSession),简单认为既是一个映射实例对象的名值对(String,Object),我们关心谁能访问、存多久既是属性作用域是什么?