JSP概述:
tomcat安装目录的介绍:
bin:其中存放各种不同平台开启与关闭Tomcat服务器的脚本文件
lib:存放tomcat与web应用的jar包,如果使用连接池,数据库驱动放置于此
conf:存放tomcat的配置文件
webapps:web应用的发布目录
work:各web应用中由jsp转译生成的Java(servlet)文件存放的地方
logs:存放tomcat的运行日志
temp:存放tomcat运行时生成的临时文件的地方
在tomcat服务器的webapps目录中,存放的是当前服务器管理的项目。一个tomccat服务器可以管理和运行多个项目,每个项目是以独立的文件夹形式存放于webapps目录下。
Tomcat服务器的默认端口号是8080,如果要更改此端口号,可以进入Tomcat安装目录\conf下,使用任意文本工具打开server.xml文件
有三处的port需要更改:
(1)<Server port="8006" shutdown="SHUTDOWN">
(2) <Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
URIEncoding="UTF-8"(可以避免get提交中文乱码问题)
redirectPort="8443" />
(3)<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
另外,第二个端口处添加的: URIEncoding="UTF-8",可以避免get提交中文乱码问题
同时,在此目录中的tomcat-users.xml文件中,可以设置管理员的用户名和密码:
<user username="admin" password="在此输入密码" roles="admin,manager"/>
在tomcat_home/conf/server.xml中设置站台。
<Context path=“ /myweb” docBase=“myjsp”
debug=“0” reloadable=“true”>
</Context>
</Host>
说明解释:
path=“/myweb”代表网络域名,http://IP:port/myweb
docBase=“myjsp”代表站台的目录位置,
{tomcat}/webapps/myjsp
Debug是调试等级,0提供的信息最少,9提供的信息最多
Reloadable表示tomcat在执行的时候,当WEB-INF\web.xml被更新时,是否不需重启tomcat而自动更新加载。
Servlet:
Servlet是一种运行于服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面,它担当客户请求与服务器响应的中间层 ,有特殊的技术规范:必须继承某个特定父类;必须配置之后才能执行;有特定的生命周期
Servlet是在Java代码中嵌入页面代码,JSP是在页面代码中嵌入Java代码
JSP不能执行,必须转译成Servlet并编译成class后才能执行,Servlet是学好JSP的基础,能了解JSP的底层运作方式。
Servlet接口
HttpServlet类
httpServlet中各种接受请求处理的方法。
doGet() | 处理http的get请求 |
doPost() | 处理http的post请求,主要用于发送HTML文本中FORM的内容 |
doHead() | 用于处理HEADER请求 |
doPut() | 处理http的put请求,模仿 ftp发送 |
doDelete() | 处理http的delete请求 |
doOptions() | 该操作自动决定支持什么HTTP方法 |
doTrace() | 处理HTTP的trace请求 |
发送请求的三种基本方式
(1)地址栏直接键入地址(默认get方式) 例如:在地址栏输入:http://127.0.0.1/jsp2/index.jsp?a=2
(2)使用表单提交(默认get方式)只有使用表单的method=post才是post提交
(3)点击超链接(默认get方式)
HttpServletRequest接口中的方法
String getParameter(String CtlName)方法:可取得用户在表单或URL中向服务器传送的相应参数,
其中的CtlName代表html表单中控件的名称或在URL地址中传递的参数的名称
setCharacterEncoding( String EncodingCode):该方法用于设置接收参数的编码类型,仅适用于post提交方式。
其中EncodingCode参数指定具体的编码类型。
GB2312:中国国家语言标准编码,如果出现中文问题,可将EncodingCode参数设为此值
GBK:国标扩展编码,含GB2312中的常见汉字编码及一些难检汉字,利用此编码同样可以解决汉字乱码问题
BIG5:是处理繁体汉字的一种编码方式。
ISO8859:国际通用字符编码标准,是Servlet默认的编码
HttpServletResponse接口封装了http协议的服务器响应相关的内容,利用此接口可获得向浏览器或其他http客户端输出响应结果的输出流。
PrintWriter getWriter()方法:获得向客户端进行文本输出的控制流
ServletOutputStream getOutputStream()方法: 获得向客户端输出二进制数据的控制流
void setContentType(String TYPE)方法:设置输出流的数据类型。如果要设置输出的数据类型,必须首先调用此方法对输出流的数据类型进行设定。
TYPE的取值类型:text/html[;charset=charEncoding]
向客户端回应一个超文本文件,其编码为charset所指定的编码。如果省略了charset指定,将采用服务器端的默认的编码。
说明:如果响客户端回应的内容含有中文,且采用JDK自带的编译器进行编译(编译时不指定编码类型),
则需要利用charset参数指定文档的编码类型为GBK或GB2312,否则向客户端输出的中文内容将是乱码
serlvet配置:
<servlet>
<servlet-name>Servlet的名称</servlet-name>
<servlet-class>该servlet类的路径</servlet-class>
<init-param>
<param-name>参数名</param-name>
<param-value>参数值</param-value>
</init-param>
<jsp-file>/路径/XXX.JSP </jsp-file>
<load-on-startup>表示web站台被启动时,自动加载该servlet的优先级别,越小越优先加载</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>对应的servlet-name名称</servlet-name>
<url-pattern>在项目运行时用以访问的URL </url-pattern>
</servlet-mapping>
url-pattern 取值:1、可以与具体的某个Servlet对应。2、也可以用/* 来指定所有的页面。
Servlet的生命周期
每个servlet实例的生命周期中只有三种类型的事情,分别对应于由servlet容器所调用的三个方法:
init() 初始化时期:
当servlet第一次被装载的时候由servlet容器调用init(),且只调用一次,默认情况下调用超类的init()方法。
service()运行时期:
接受客户请求并决定调用何种doXXX方法,并将处理结果返回到客户端。
destroy()结束时期:
为可选方法,释放不用的servlet实例所占内存和资源。
Servlet的生命周期可以归纳为以下几步:
Servlet创建一个Servlet实例;
Servlet调用Servlet的init()方法;
客户发送请求到Servlet;
Servlet创建一个请求对象和一个响应对象
Servlet调用service()方法,传递请求和响应对象作为参数;
service()方法获得请求对象的参数,处理请求,访问其他资源。
service()方法通过响应对象将结果传递给Server,最终到达客户端。
对于更多的相同客户端请求, Servlet将创建新的请求和响应对象,仍然激活此Servlet的service方法,传递新的参数对象,不需在初始化一次。
当Servlet不再需要Servlet时(关闭时)调用destory()方法。
JSP基本语法:
JSP网页由两部分组成
Template Date:固定模板数据
Template Date:JSP容器不处理的部分,如HTML的内容,直接送到客户端执行。
Elements:元素数据
Elements:必须经由JSP容器处理的,而大部分都以XML作为语法基础,且大小写必须一致。
Elements分为四类:
(1)指令元素:提供JSP网页的相关信息和属性。语法格式一般为 <%@elements ….%>
(2)java脚本:<% …%>,<%!...%>
(3)动作元素:<jsp:…>
(4)表达式语言:${…}
Jsp脚本元素:<%%>,<%!%>称为界定符
其中包含java代码,如变量或方法声明,表达式求值
1脚本元素分为三类:
1.1声明元素:<%! int i=0; %>
1.1.1可一次声明多个变量或方法;
1.1.2编译后最终转换成servlet代码;
1.1.3变量和方法只在当前一个页面有效;
1.1.4变量为页面级的全局变量,若有N个请求执行该JSP页面,将启动多个线程共享此变量。建议改用<% %>
1.2.表达式元素:<%= getName() %>
1.2.1Expression的值必须能转换成字符串,否则异常
1.2.2在expression中不能用;作为其结束符号
1.2.3Expression能包含任何java语法
1.2.4等价于<%out.print(expression)%>
1.3.Scriptlets:<% 合乎JAVA标准语法的程序片断 %>
1.3.1可使用声明中定义的变量和方法
1.3.2包含的小程序片段必须符合java语法规范
1.3.3可以使用JSP中包含的隐含对象
1.3.4可使用表达式或<jsp:useBean>声明过的对象
1.3.5若有注释其方法和java中的注释方法一样。、
2.指令 :
主要用来提供整个JSP网页相关的信息,并且用来设定JSP网页的相关属性,例如:网页的编码方法、语法、信息等等起止符号为:<%@...%>
内文部分为一些指令和一连串的属性设定:<%@ directive attr1=“value1” attr2=“value2”… %>
包含三种指令:
2.1page: 页面属性指令
2.1.1Page指令:设定整个JSP网页的属性和相关功能。
<%@page attri1=“ ” attri2=“ ” .... %>
Attribute可选值:
Import =“ ” 指明该JSP可以使用那些JAVA API
session=“true/false” 指明该JSP是否可以用session对象
pageEncoding=“ ” 指明该JSP网页的编码方式
contentType =“ ” 表示MIME类型和JSP的编码方式
buffer=”none/size kb” 设置缓冲区,默认8KB
autoFlush=“true/false” 是否自动清楚缓冲
Langugae=指明小脚本片断使用的语言,默认java
Extends =“ ” 指明生成的servlet继承那个父类
errorPage=“ ” 异常后的重定向UTL
isThreadSafe=true|false
eg:
<%@page import =“java.net.*, java.util.List” %>
<%@page contentType=“text/html;charset=gbk” %>
注意点:
导入多个包的时候可以分开写,也可以用,隔离 初import属性外,其他属性只能设置一次
<%@page contentType=“text/html;charset=gbk” %>
不能分开写成:<%@page contentType=“text/html”;charset=“gbk” %>
2.2include:包含指令
Include指令:在JSP编译时插入一个包含文本或代码的文件,这个包含过程是静态的。
<%@include file=“relativeURLspec” %>包含的文件类型:jsp,html,文本,java程序段。
relativeURLspec值不能是变量URL。
relativeURLspec后不能加任何参数。
relativeURLspec所指的路径必须是相对于此JSP的网页的路径。
文件中要避免有<html></html>
2.3taglib: 自定义标签指令
JSP:常用动作指令
1.<jsp:include>包含指令,用来动态包含另一个JSP页面;
1.1.<jsp:include>元素允许你包含动态和静态文件,路径可以是变量URL
1.2.被包含文件中不要带有HTML标签;
1.3若是静态文件,内容直接加到JSP网页中;
1.4若是动态文件,被包含的文件也会被JSP引擎编译执行。
<jsp:include> 与<%@include >的区别
(1)动态包含使用<jsp:include> 标签来实现
<jsp:include page=“included.jsp” flush=“true” />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。
动态包含可以给被包含的页面传递参数
(2)静态包含使用include伪码实现
不会检查所含文件的变化,适用于包含静态页面;静态包含不能给被包含的页面传递参数
<jsp:forward>转发指令,用来将请求转发至一个新的页面
操作将客户端所发出的请求从当前页面转交到另一个HTML或JSP页面。
<jsp:forward>标签之后的程序将不会在执行。
例如:
<% out.println(“会被执行!!!”);%>
<jsp:forward page=“quoting.jsp”>
<jsp:param name=“name” value=“Tom”/>
</jsp:forward>
<% out.println(“不会被执行!!!”); %>
<jsp:param>参数标签,一般与其它动作指令搭配使用
<jsp:param>用来提供key/value值,常与<jsp:include><jsp:forward>一起使用。
<jsp:param name=“pname” value=“pvalue”/>
当与<jsp:include>和<jsp:forward>一起用时,被包含的网页或转向后的网页会先看看request对象里面除原来的参数值之外,
是否有新的参数值,如果有,则新参数值会替换原来的参数值
例如:src.jsp (String a = foo) __包含__> des.jsp (String a = bar ) ====>最终页面String a = bar
例如:
first.jsp:
<%@ page contentType="text/html;charset=gbk"%>
……
<center>
<a href="second.jsp?p1=first">second.jsp</a>
</center>
second.jsp:
<%@ page contentType="text/html;charset=gbk"%>
<%System.out.println("转发前."); %>
<jsp:forward page="third.jsp">
<jsp:param name="p2" value="second"/>
</jsp:forward>
<%System.out.println("转发后(不会被执行)."); %>
third.jsp:
<%@ page contentType="text/html;charset=gbk"%>
<%
out.println("最终的页面,请求结束了。<br>");
out.print("first.jsp传递过来的参数p1:");
out.println(request.getParameter("p1")+"<br>");
out.print("second.jsp传递过来的参数p2:");
out.println(request.getParameter("p2")+"<br>");
%>