servlet是一个可以在任何服务器上运行的一个小程序。被容器调用。
servlet是一个接口。genericServlet 实现了该接口,httpServlet继承了genericServlet,专门为web http请求所用。doGet doPost两方法常用。
自己写一个servlet继承自httpServlet,把该servlet编译后的文件放到tomcat容器内该项目的WEB-INF下的classes文件夹下,并在web.xml里配置servlet和servlet-mapping.
servlet-mapping设置如何配置url才能找到该servlet。如
<url-pattern>/abc</url-pattern>
表示ip+端口+/项目名(以上为web主url)+/abc 就可以找到该servlet。servlet就会执行doGet或doPost.
Servlet生命周期:
servlet只构建一个对象,所有该servlet的请求都由这一个对象来处理。
init()方法只执行一次。
destroy()方法在容器退出的时候执行。
httpServletRequest httpServletResponse
http协议无连接性,一次请求一次反馈。反馈后,socket就close掉。
Cookie
cookie:保存在客户端。服务器可以向客户端写内容,只能是文本内容,客户端可以阻止服务器写入。
服务器只能从客户端拿取自己webapp写入的东西,浏览器不同,不共享cookie。
cookie是名值对,未登录时购买的商品信息会保存在cookie里。或者记录用户名和密码。
cookie分两种,一种写入文件内,一种存在内存里,页面关闭这种cookie就消失了。
一个servlet或jsp设置的cookie,只能够被同一个路径下面、或者是子路径下面的servlet或者jsp读到。
路径指的是URL路径,不是文件的真实路径。
Session
session针对同一个窗口,不像cookie一样拥有路径问题,同一个application下的servlet或jsp可以共享同一个session,前提是同一个窗口。
session记录在服务端,因为cookie保存在客户端,可以被手动删除,不可靠。
服务器开辟一块内存,与浏览器关联,保存session信息。
第一种:把sessionID存储在cookie里。客户端把sessionID传递给服务端。
如果浏览器支持cookie,创建session时,会把sessionID保存到cookie内存里,生命周期与浏览器相同。
第二种:如果不支持cookie,必须自己编程使用URL重写的方式实现。
response.encodeURL()作用:1转码 2url后面加sessionID
session有过期时间。
httpSession session = request.getSession(true)
session.isNew()
session.getId()
web.xml <!-- session配置15分钟失效 -->
<session-config>
<session-timeout>15</session-timeout>
</session-config>
session可以存放任何内容,key-value
application:
用于保存整个webApplication的生命周期内都可以访问的数据。
在API中表现为servletContext
通过httpservlet的getContext获取servletContext
bean:
狭义的:具有界面形式(GUI)的体现。类似unity的组件。
广义的:普通的java类。属性名第一个字母小写,private属性具有get和set方法。
JSP:
jsp=servlet
1、原始语法:<% java %>html页面里写java代码。
声明:
<%! int i=0 void m()%>成员变量、方法
<% int i=0 %>局部变量
<%= ++i %> ==后必须是字符串变量或者能被转换成字符串的表达式。只有一行,不用分号。
*注释:
<% // %> <%-- --%> <%/ */%>
指令Directive:(编译期间的指令)
<%@Directive 属性=“属性值”%> 常用Directive:
page :jsp的page指令(directive)影响着由JSP页面生成的Servlet的整体结构
<%@page import=" "%>
page的几个重要的属性:
1、import 唯一的一个允许多次出现的attirbute.
默认情况下有以下几个是自动导入的包,java.lang.; java.servelt.; javax.servlet.jsp.;
javax.servlet.http.!
2、pageEncoding用来单独设置页面的字符集。<%@page pageEncoding=“GB2312”%>
3、contentType设置响应报头标明发送到客户端的MIME类型和页面字符集!
<%@ page contentType=“text/html;charset=gb2312”%>
4、session 属性控制页面的会话特性!<%@page session=“true|false”%> 默认值为true.
5、buffer 和 autoFlush 属性
buffer 设置缓冲区的大小 <%@ page buffer=“sizekb|none”%>
autoFlush 当缓冲区满后自动清空!<%@page autoFlush=“true|false”%> 默认值为true,为false时会抛出一个异常。
6、errorPage 和isErrorPage (attribute)
<%@page errorPage=“RelativeURL”%>指定该页面出错后,显示哪个错误页面。
<%@page isErrorPage=“true|false”%> 表明当前页面是否可以作为其他jsp页面的错误页面 。可以将此页面放在WEB-INF目录中,有助于提高程序的安全性。
include:将指定的jsp或html页面包含进来。
<%@include file=“fileURL”%>先将页面包含进来,然后再开始编译。
限制:不能向fileURL中传参数,不能写成这样:adb.jsp?name=abc,所以适合引入静态页面。
taglib:
action动作指令: 运行期间指令
常见指令4种:
jsp:useBean
<jsp:useBean id=“beanName” class=“package.beanClass” />相当于 beanClass beanName = new beanClass();
<jsp:useBean id=“beanName” class=“package.beanClass” type=“typeName” scrop=“page/request/session/application”>
<jsp:setProperty name=“beanName” property=“属性” value=“值”>
<jsp:getProperty name=“beanName” property=“属性”>
</jsp:useBean>
bean要放在包内,不能使用裸体bean.
jsp:include
<jsp:include page=“URLSpec” flush=“true”/>运行时导入该页面
<jsp:include page=“URLSpec” flush=“true”>
<jsp:param name=“paramName” value=“paramValue”
</jsp:include>
jsp:forward
<jsp:forward page=“URLSpec” flush=“true”/>运行时将该jsp的内容传送至page指定的jsp或servlet中处理。例如跳转到登录界面。
forward跳转和response.sendRedirect重定向区别:
forward使用同一个request,sendRedirect使用不同的request。
forward是由服务端跳转,客户端无感知。
sendRedirect是由客户端重新访问。
<jsp:forward page=“URLSpec” flush=“true”>
<jsp:param name=“paramName” value=“paramValue”
</jsp:forward>
jsp:plugin
2、JSTL语法
3、JSF语法
4、其他taglib,如Struts