JSP的4种基本语法:
1.JSP注释:
<%-- JSP注释部分 --%>
2.JSP声明:
<%! //声明一个整型变量
public int count;
//声明一个方法
public String info(){
return "hello";
}
%>
3.输出JSP表达式:
<%=count++%>
这句话代替了Java中的out.print(count++);但是注意输出表达式后面不能有分号。
4.JSP脚本:
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<html>
<head>
<title>欢迎</title>
</head>
<body>
<table bgcolor="#9999dd" border="1" width="300px">
<%
for(int i = 0; i < 10; i++){
%>
<tr>
<td>循环值:</td>
<td><%=i%></td>
</tr>
<%
}
%>
</body>
</html>
JSP的3个编译指令:(这里只讲两个)
1.page指令:位于JSP页面的顶端,一个JSP页面可以是用多条page指令。
page语法格式:<%@page contentType="text/html; charset=GBK" language="java" ... %>
contentType属性参考网页:http://developer.51cto.com/art/201106/270666.htm
2.include指令:可以将一个外部文件嵌入到当前JSP文件中,同时解析这个页面中的JSP语句。
include既可以包含静态的文本,也可以包含动态的JSP页面。静态的include编译指令会将被包含的页面加入本页面,融合成一个页面,因此被包含页面不需要是一个完整
页面。
静态include格式:<%@include file="relativeURLSpec"%>
JSP的7个动作指令:
1.forward指令:用于将页面响应转发到另外的页面。既可以转发到静态的HTML页面,也可以转发到动态的JSP页面,或者转发到容器中的Servlet.
2.include动态指令:用于包含某页面,被包含的页面不会导入包含页面,仅仅将被包含页面的body内容插入本页面。
3.useBean指令:用于在JSP页面初始化一个Java实例
4.setProperty指令:用于为JavaBean实例的属性设置值
5.getProperty指令:用于输出JavaBean实例的属性
若多个JSP页面需要重复使用某段代码,则可以把这段代码定义成Java类的方法,然后让多个JSP页面调用该方法,这样可以代码复用。
6.plugin指令:主要用于下载服务器端的JavaBean或Applet到客户端执行。由于程序在客户端执行,所以客户端必须安装虚拟机
7.param指令:用于设置参数值,该指令不能单独使用,可以与jsp:include、jsp:forward、jsp:plugin三个指令结合使用。
JSP脚本中的9个内置对象:
这9个内置对象都是Servlet API接口的实例,只是JSP规范对它们进行了默认初始化(有JSP页面对应Servlet的_jspService()方法来创建这些实例)。即它们已经是对象,可直接
使用。
1.application:javax.servlet.ServletContext的实例,这个实例代表JSP所属的Web应用本身,可用于JSP页面,或者Servlet之间交换信息。
2.config:javax.servlet.ServletConfig的实例,该实例代表该JSP的配置信息。
3.exception:java.lang.Throwable的实例,用来代表其他页面中的异常和错误。只有当页面是错误处理页面,即编译指令page的isErrorPage属性为true时,该对象才可以使用
4.out:javax.servlet.jsp.JspWriter的实例,该实例代表JSP页面的输出流,用于输出内容,形成HTML页面。
5.page:代表该页面本身,也就是Servlet中的this,其类型就是生成的Servlet类,能用page的地方就可用this。
6.pageContext:javax.servlet.jsp.PageContext的实例,该对象代表JSP页面上下文使用该对象可以访问页面中的共享数据。
7.request:javax.servlet.http.HttpServletRequest的实例,该对象封装了一次请求,客户端的请求参数都被封装在该对象里,获取客户端请求参数必须使用该对象。
8.response:javax.servlet.http.HttpSerletResponse的实例,代表服务器对客户端的响应。通常很少使用该对象直接响应,而是使用out对象,除非需要生成非字符响应。
response对象常用于重定向。
9.session:javax.servlet.http.HttpSession的实例,该对象代表一次会话。当客户端浏览器和站点建立连接时,会话开始;当客户端关闭浏览器时,会话结束。
Servlet介绍:
JSP的本质就是Servlet,开发者把编写好的JSP页面部署在Web容器中之后,Web容器会将JSP编译成对应的Servlet。
直接使用Servlet坏处:Servlet的开发效率非常低,特别是当使用Servlet生成表现层页面时,页面中的所有HTML标签,都采用Servlet的输出流来输出,极其繁琐。
自MVC规范出现后,Servlet的责任开始明确下来,仅作为控制器使用,不在需要生成页面标签,也不再作为视图层角色使用。
Servlet的开发:
Servlet被称为服务器端小程序,是运行在服务器端的程序,用于处理及响应客户端的请求。
Servlet是个特殊的java类,继承自HTTPServlet。
Servlet提供不同的方法用于响应客户端请求:
1.doGet:响应客户端的GET请求
2.doPost:响应客户端POST请求
3.doPut:响应客户端PUT请求
4.doDelete:响应客户端DELETE请求
客户端的请求通常只有GET和POST两种,Servlet为了响应这两种请求,必须重写doGet()和doPost()两个方法。
大部分时候Servlet对于所有请求的响应都是完全一样的。此时可以采用重写service(HttpServletRequest request, HttpServletResponse response)方法来代替上面的几个方法,
即可响应客户端的所有请求。
不用为Servlet类编写构造器,若要对Servlet执行初始化操作,应将初始化操作放在Servlet的init()方法中定义。若重写init(ServletConfig config)方法,则应该在重写该方法的
第一行调用super.init(config)。这样该方法将调用HTTPServlet的init方法。
package lee; import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*; import java.io.*; // Servlet必须继承HttpServlet类
@WebServlet(name="firstServlet"
, urlPatterns={"/firstServlet"})
public class FirstServlet extends HttpServlet
{
// 客户端的响应方法,使用该方法可以响应客户端所有类型的请求
public void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,java.io.IOException
{
// 设置解码方式
request.setCharacterEncoding("GBK");
response.setContentType("text/html;charSet=GBK");
// 获取name的请求参数值
String name = request.getParameter("name");
// 获取gender的请求参数值
String gender = request.getParameter("gender");
// 获取color的请求参数值
String[] color = request.getParameterValues("color");
// 获取country的请求参数值
String national = request.getParameter("country");
// 获取页面输出流
PrintStream out = new PrintStream(response.getOutputStream());
//输出HTML页面标签
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet测试</title>");
out.println("</head>");
out.println("<body>");
// 输出请求参数的值:name
out.println("您的名字:" + name + "<hr/>");
// 输出请求参数的值:gender
out.println("您的性别:" + gender + "<hr/>");
// 输出请求参数的值:color
out.println("您喜欢的颜色:");
for(String c : color)
{
out.println(c + " ");
}
out.println("<hr/>");
out.println("您喜欢的颜色:");
// 输出请求参数的值:national
out.println("您来自的国家:" + national + "<hr/>");
out.println("</body>");
out.println("</html>");
}
}
Servlet和JSP的区别是:
1.Servlet中没有内置对象,原来JSP中的内置对象都必须由程序显示创建
2.对于静态的HTML标签,Servlet都必须使用页面输出流逐行输出
JSP是Servlet的一种简化,使用JSP只需要完成程序员要输出到客户端的内容,JSP脚本嵌入一个类中由JSP容器完成。
Servlet是一个完整的Java类,这个类的service()方法用于声称对客户端的响应。
Servlet的配置:
编辑好的Servlet源文件并不能响应用户请求,还需将其编译成class文件。将编译后的class文件放在WEB-INF/classes路径下,若Servlet有包,则在WEB-INF/classes路径下创建
对应的文件夹。
从Servlet3.0开始,配置Servlet有两种方式:
1.在Servlet类中使用@WebServlet注解进行配置:参考网址:http://blog.csdn.net/kpchen_0508/article/details/41312735
2.在web.xml文件中进行配置:参考网址:http://01121264-163-com.iteye.com/blog/1530063
JSP/Servlet的生命周期:
JSP本质是Servlet,开发者编写的JSP页面将由Web容器编译成对应的Servlet,当Servlet在Web容器中运行时,其实例的创建及销毁都不是由程序员决定的,而是由Web容器进
行控制。
创建Servlet实例有两个时机:
1.客户端第一次请求某个Servlet时,系统创建Servlet的实例:大部分的Servlet都是这种。
2.Web应用启动时立即创建Servlet实例,即load-on-startup Servlet。
每个Servlet的运行都遵循如下生命周期:
1.创建Servlet实例
2.Web容器调用Servlet的init方法,对Servlet进行初始化
3.Servlet初始化后,将一直存在于容器中,用于响应客户端请求。若客户端发送GET请求,Web容器调用Servlet的doGet方法处理并响应请求;若客户端发送POST请求,
荣器调用Servlet的doPost方法处理并响应请求。或统一使用service()方法来响应用户请求。
4.Web容器决定销毁Servlet时,先调用Servlet的destroy方法,通常在关闭Web应用之时销毁Servlet。
深入理解Java对象的创建过程:类的初始化与实例化:http://blog.csdn.net/justloveyou_/article/details/72466416
Servlet生命周期与工作原理:http://www.cnblogs.com/cuiliang/archive/2011/10/21/2220671.html
Request的getParameter和getAttribute方法的区别: http://blog.csdn.net/huoyunshen88/article/details/8603306
使用Servlet作为控制器:
M:Model,模型,对应JavaBean,对数据进行操作
V:View,视图,对应JSP页面,展示给用户的页面
C:Controller,控制器,对应Servlet,做出M和V之间的逻辑
URI和URL的区别:http://www.cnblogs.com/gaojing/archive/2012/02/04/2413626.html
Filter介绍:
使用Filter完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter在对服务器响应进行后处理。
Filter有如下几个用处:
1.在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest
2.根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据
3.在HttpServletResponse到达客户端之前,拦截HttpServletResponse
4.根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据
Filter有如下几个种类:
1.用户授权的Filter:Filter负责检查用户请求,根据请求过滤用户非法请求
2.日志Filter:详细记录某些特殊的用户请求
3.负责解码的Filter:包括对非标准编码的请求解码
4.能改变XML内容的XSLT Filter等
5.Filter可负责拦截多个请求或响应;一个请求或响应也可被多个Filter拦截
创建一个Filter只需两个步骤
1.创建Filter处理类
2.web.xml文件中配置Filter
静态和伪静态网站的区别:http://www.divcss5.com/html/h63.shtml
使用URL Rewrite实现网站伪静态:http://www.cnblogs.com/ljxxz/p/3560791.html
<url-pattern>/*</url-pattern>的解释:http://blog.csdn.net/qq_36870779/article/details/62883466
application,request,session三个对象,谁可以获取谁?http://www.cnblogs.com/z0228-0322x/p/6170588.html