资源描述
1. 开发JSP程序所需得开发环境及各自作用:1、Web浏览器:用于客户端用户访问Web应用得工具 2、Web服务器:只有将开发得Web项目放置到该容器中,才能使网络中得所有用户通过浏览器进行访问。如Apache Tomcat。3、JDK:包括运行Java程序所必须得JRE环境及开发过程中常用得库文件。4、 数据库:用来存储项目中需要得信息。
2. 字符串处理: 例:String strA=new String(“让我们得明天会更好!”);String strB=”平平淡淡才就是真!”out、println(strA、substring(4,6);out、println(strB、string(4,strB、length));//输出结果就是:明天 才就是真
3. 在表单提交中文信息时,应在对应Servlet中添加如下代码:requesrt、setCharacterEncoding(“gb2312”)
4. JAVABean得分类:(1)可视化JavaBean(2)不可视JavaBean;不可视JavaBean又分为值JavaBean与工具JavaBean。值JavaBean严格遵循了JavaBean得命名规范,通常用来封装表单数据,作为信息得容器。 JavaBean就是根据特殊得规范编写得普通得Java类,可称它们为“独立得组件”。每一个JavaBean实现一个特定得功能,最大优点就就是充分提高了代码得可重用性。
通常一个标准得JavaBean需遵循以下规范:
(1)实现java、io、Serializable接口;
(2)就是一个公共类;
(3)类中必须存在一个无参数得构造函数;
(4)提供对应得setXxx与getXxx方法来存取类中得属性
5. Servlet 得生命周期:第一步:用户通过客户端浏览器请求服务器,服务器加载Servlet,并创建一个Servlet实例;第二步:容器调用Servlet得init方法;第三步:容器调用service方法,并将ServletRequest与ServletResponse对象传递给该方法,在service方法中处理用户请求;第四步:在Servlet中请求处理结束后,将结果返回给容器;第五步:容器将结果返回给客户端进行显示;第六步:当Web器关闭时,调用destroy方法销毁Servlet实例。
Servlet与JSP得区别:Servlet就是运行在服务器端运行得Java程序;JSP就是一种脚本语言;
6. Servlet就是在JSP之前就存在得运行在服务端得一种Java技术、Servlet主要用于处理请求,并将处理得结果传递给浏览器生成动态Web页面。Servlet具有可移植,功能强大、安全、可扩展与灵活等优点。与JSP得区别:(1)编程方式不同;(2)Servlet必须在编译以后才能执行;(3)运行速度不同。
7. JSP就是运行在服务器端得脚本语言之一,就是用来开发动态网页得一种技术。
8. JSP得处理过程:1、客户端通过浏览器向服务器发出请求,在该请求中包含了请求得资源得路径,这样当服务器接收到该请求后就可以知道被请求得资源。2、 服务器根据接收到得客户端得请求来加载被请求得JSP文件。3、 Web服务器中得JSP引擎会将被加载得JSP文件转化为Servlet。4、 JSP引擎将生成得Servlet代码编译成Class文件。5、 JSP引擎将生成得Servlet代码编译成Class文件。6、 服务器将执行结果发送给浏览器进行显示
9. JSP得三种指令标识:
a) <% page attribute1="value1" attribute2="value2" …%>;Page指令中除import属性外,其她属性只能在指令中出现一次。重要属性:language:设置当前页面中JSP脚本使用得语言,默认Java;import:导入包;session:就是否支持session,默认支持;errorPage/isErrorPage:异常及异常处理页面;例如:
Index、jsp页面中:<% page contentType="text/html;charset=gb2312" errorPage="error、jsp"%>
<%String name="YXQ";Integer、parseInt(name); //将字符串转化为int型%>
Error、jsp中:<% page contentType="text/html;charset=gb2312" isErrorPage="true" %>出现错误!错误如下:<br><%=exception、getMessage%>
b) <% include file="文件得绝对路径或相对路径" %>如果该属性值以“/”开头,那么指定得就是一个绝对路径,将在当前应用得根目录下查找文件;如果就是以文件名称或文件夹名开头,那么指定得就是一个相对路径,将在当前页面得目录下查找文件。
c) <% taglib uri="tagURI" prefix="tagPrefix" %>例如:<% taglib uri="" prefix="c" %>
10. JSP得注释:
HTML中得注释:<! 注释内容 >
带有JSP表达式得注释:<! ment<%=expression %>>
隐藏注释 :<% 注释内容 %>
脚本程序(Scriptlet)中得注释 :单行//,多行/**/
11. JSP得脚本标识:
JSP表达式:用于向页面中输出信息,<%= %>
声明标识: 可以声明变量或方法<%! 声明变量或方法得代码 %>
脚本程序:<% Java程序片段 %>
12. JSP得动作标识:
1) <jsp:include page="被包含文件得路径" flush="true|false"/>
用于向当前页面中包含其她文件,动态静态文件均可。
2) <jsp:forward page="文件路径 | 表示路径得表达式"/>
<jsp:param name="参数名称" valude="参数值"/>//向动态得目标文件传递参数
注:转发与重定向得区别: 进行请求转发时,存储在request对象中得信息会被保留并被带到目标页面中;而请求重定向就是重新生成一个request请求,然后将该请求重定向到指定得URL,所以事先存储在request对象中得信息都不存在了。
3) <jsp:useBean id="us" type="、Bean、UserInfo" scope="session"/>
在页面中使用<jsp:useBean>标识来实例化一个Bean实例后,可以通过<jsp:setProperty>属性来设置或修改该Bean中得属性,或者通过<jsp:getProperty>标识来读取该Bean中指定得属性。
4) <jsp:setProperty>
5) <jsp:getProperty>
13. <jsp:include>动作标识与include指令得差异:
1) 属性:include指令将file属性值瞧作一个实际存在得文件得路径,所以该属性不支持任何表达式
2) 处理方式:使用include指令被包含得文件,它得内容会原封不动地插入到包含页中使用该指令得位置,然后JSP编译器再对这个合成得文件进行翻译。所以最终编译后得文件只有一个;使用<jsp:include>动作标识包含文件时,当该标识被执行时,程序会将请求转发到被包含得页面,并将执行结果输出到浏览器中,然后返回包含页继续执行后面得代码。因为服务器执行得就是两个文件,所以JSP编译器会分别对这两个文件进行编译。
3) 包含方式:include指令最终服务器执行得就是将两个文件合成后由JSP编译器编译成得一个Class文件,这种包含过程称为静态包含;<jsp:include>动作标识被执行时,使用该识包含得目标文件才会被编译,否则被包含得文件不会被编译,所以这种包含过程称为动态包含。
14. JSP得内置对象
1) Request, 就是从客户端向服务器发出请求,包括用户提交得信息以及客户端得一些信息。具体应用:
b) 访问请求参数:String userName = request、getParameter("name");
c) 在作用域中管理属性:request、setAttribute("name",obj); request、getAttribute(String name);
例如:使用request对象得setAttribute方法设置数据,然后在请求转发后取得设置得数据。例:<%request、setAttribute("error","很抱歉!您输入得用户名或密码不正确!");%><jsp:forward page="error、jsp" />。在error、jsp中out、println("错误提示信息为:"+request、getAttribute("error"));
d) 获取cookie: Cookie[] cookie = request、getCookies;
例如:使用request对象得addCookie方法实现记录本次及上一次访问网页得时间。
<%Cookie[] cookies=request、getCookies;
Cookie cookie_response=null;
if(cookies!=null){ cookie_response=cookies[0];}
out、println("本次访问时间:"+new java、util、Date+"<br>");
if(cookie_response!=null){
//输出上一次访问得时间。并设置cookie_response对象为最新时间。
out、println("上一次访问时间:"+cookie_response、getValue);
cookie_response、setValue(new java、util、Date、toString); }
//如果Cookies集为空,创建cookie,并加入到response中
if(cookies==null){cookie_response=new Cookie("AccessTime","");
cookie_response、setValue(new java、util、Date、toString);
response、addCookie(cookie_response); }%>
1) Response, 用于响应客户请求,向客户端输出信息。
a) 重定向网页:response、sendRedirect("login_ok、jsp");sendError方法可指明错误状态。例如:
<%request、setCharacterEncoding("gb2312");
String username=request、getParameter("username");
String pwd=request、getParameter("pwd");
if(!username、equals("") && !pwd、equals("")){//验证就是否为空
response、sendRedirect("login_ok、jsp");
}else{response、sendError(500,"请输入登录验证信息");}%>
b) 设置响应报头:response、setContentType(“text/html”)
2) Session, 与请求有关得会话期,使服务器与客户端之间得连接就会一直保持下去,但就是在一定时间内(系统默认在30min内),如果客户端不向服务器发出应答请求,session对象就会自动消失。
a) 创建及获取客户得会话:使用setAttribute与getAttribute方法
b) 从会话中移除指定对象:session、removeAttribute (String name);
例如:session、setAttribute("information","向session中保存数据");
response、sendRedirect("forward、jsp");
在forword、jsp中:session、removeAttribute("information");
c) 销毁session:用session、invalidate;
3) Application, 对象用于保存所有应用程序中得公有数据,服务器启动并且自动创建application对象后,只要没有关闭服务器,application对象将一直存在,所有用户可以共享application对象。application对象与session对象有所区别,session对象与用户会话相关,不同用户得session就是完全不同得对象,而用户得application对象都就是相同得一个对象,即共享这个内置得application对象。
可以用于网页计算器:<% int number=0;
if(application、getAttribute("number")==null){number=1;}else{
number=Integer、parseInt((String)application、getAttribute("number"));
number=number+1;}
out、print("您就是第"+number+"位访问者!");
application、setAttribute("number",String、valueOf(number));%>
4) Out, 主要用来向客户端输出各种数据类型得内容,并且管理应用服务器上得输出缓冲区。
15. JavaBean技术得应用:
值JavaBean:
例:在登录页面表单中有与已创建得JavaBean属性相对应得字段:
转发到一下处理页面,用值 JavaBean进行处理:
<jsp:useBean id="user" class="、yxq、bean、User">
<jsp:setProperty name="user" property="*"/>
</jsp:useBean>
<b>用户名:</b><jsp:getProperty name="user" property="userName"/>
<b>密码:</b><jsp:getProperty name="user" property="userPass"/>
工具JavaBean:
public class MyTools {
public static String change(String str){
str=str、replace("<","<");str=str、replace(">",">");return str;}}//将<,>进行转换
int i=0;i=Integer、parseInt(str)//将String转换为int
解决中文乱码:
public static String toChinese(String str){if(str==null) str="";
try {//通过String类得构造方法将,指定得字符串转换为“gb2312”编码
str=new String(str、getBytes("ISO88591"),"gb2312"); }}
16. Servlet技术:
1) 创建Servlet得步骤:
(1)继承Servlet抽象类。
(2)重载适当得方法,如覆盖(或称为重写)doGet方法或doPost方法。
(3)如果有请求信息得话,获取该信息。可通过调用ServletRequest类对象得getParameter方法获取请求信息
(4)生成响应。ServletResponse类对象生成响应
简单得实例:public class MyServlet extends Servlet {
public void doGet(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
response、setContentType("text/html;charset=gb2312");
PrintWriter out = response、getWriter;
out、println("保护环境!爱护地球!");}}
2) Web、xml文件得配置:
webapp><servlet><servletname>MyServlet</servletname>
<servletclass>、MyServlet</servletclass> <loadonstartup>10</loadonstartup>//启动装入优先权,小者优先</servlet>
<servletmapping><servletname>MyServlet</servletname>
<urlpattern>/textServlet</urlpattern></servletmapping></webapp>
17. 数据库相关知识:
1) 连接数据库得步骤:
a) 加载JDBC驱动程序 通过静态方法forName(String className)实现
b) 创建数据库连接 Connection conn = DriverManager、getConnection
c) 执行SQL语句 但就是通过Connection实例并不能执行SQL语句,还需要通过Connection实例创建Statement实例,Statement实例又分为以下3种类型:
(1)Statement实例:该类型得实例只能用来执行静态得SQL语句;
(2)PreparedStatement实例:该类型得实例用于执行动态SQL语句得功能
(3)CallableStatement对象:该类型得实例用于执行数据库存储过程得功能。
d) 获得查询结果 如果执行得就是executeUpdate方法,将返回一个int型数值,代表影响数据库记录得条数,即插入、修改或删除记录得条数;如果执行得就是executeQuery方法,将返回一个ResultSet型得结果集,其中不仅包含所有满足查询条件得记录,还包含相应数据表得相关信息
e) 关闭连接 通过各个实例得close方法
2) 连接SQL数据库实例:
<% String driverClass="、microsoft、jdbc、sqlserver、SQLServerDriver"; String url = "jdbc:microsoft:sqlserver://127、0、0、1:1433;DatabaseName=db_database08";
String username = "sa"; String password = "";
Class、forName(driverClass);
Connection conn=DriverManager、getConnection(url, username, password);
Statement stmt=conn、createStatement;
ResultSet rs = stmt、executeQuery("select * from tb_user");
while(rs、next){out、println("<br>用户名:"+rs、getString(2)+" 密码:"+rs、getString(3));}
rs、close;stmt、close; conn、close; %>
18. Ajax
Ajax=异步Javascript与XML,就是一种用于创建快速动态网页得技术。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页得情况下,对网页得某部分进行更新。
XMLRequest 就是 AJAX 得基础,用于在后台与服务器交换数据。
Var xml=new ActiveXObject("Microsoft、XML");
常用方法:open(method,url,async) send
onreadystatechange
存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。
readyState
存有 XMLRequest 得状态。
0: 请求未初始化
1: 服务器连接已建立2: 请求已接收
3: 请求处理中4: 请求已完成,且响应已就绪
status
200: "OK"404: 未找到页面
responseText
服务器得响应,表示为字符串
responseXML
服务器得响应,表示为XML,这个对象可以解析为一个DOM对象
搭建Ajax开发框架实例:
<script language="javascript">
var _request = false; function createRequest(url) { _request = false;try { _request = new ActiveXObject("Msxml2、XML");} catch (e) {
try { _request = new ActiveXObject("Microsoft、XML");} catch (e) {}} }
_request、onreadystatechange = getResult; //调用返回结果处理函数
_request、open('POST', url, true);
_request、send;}//返回结果处理函数
function getResult {
if (_request、readyState == 4) { // 判断请求状态
if (_request、status == 200) { // 请求成功,开始处理返回结果
answer、innerHTML=_request、responseText;
} else { //请求页面有错误
alert("您所请求得页面有错误!");}}}</script></head><body>
这就是一生中难得得机会。<a href="#" onClick="createRequest('target、htm')">汉译英</a>
<div id="answer"></div></body>
19. Cookie:
1) Cookie得格式:SetCookie: Name = Value;ment = value; Domain = value; MaxAge = value; Path = Value;
2) 创建cookie: response、add(cookie)
例如:String pass= request、getParameter("upass");
String uname=request、getParameter("uname");
final String sSession = uname+":"+pass;
Cookie oItem = new Cookie("SSO", sSession);
//oItem、setDomain(“、my、"); //域
oItem、setMaxAge(14*24*60*60); //秒; 0/1
oItem、setPath(“/bbs”); //域下得路径
response、addCookie(oItem);
3) 获取cookie: request、getCookies 得到得就是一个cookie数组
获取以上设置得cookie:
Cookie []cookie = request、getCookies;
String upass, uname; String s=null;
Cookie ucookie ; for(int i =0 ; i<cookie、length; i++)
{ if(cookie[i]、getName、equals("SSO")) {
s=cookie[i]、getValue;}}
4) 销毁cookie 将age设置为0即可:setMaxAge(0)
20. EL表达式:${expression}
通过表达式语言调用JavaBean中得属性值或方法得代码:
<jsp:useBean id="dao" scope="page" class="、UserInfoDao"></jsp:useBean> ${dao、name} ${dao、getName}
21. JSTL标准标签库
重点介绍核心标签库得5中标签库
<% taglib prefix="c" uri="" %>
1) 表达式标签:
a) <c:out>标签: 用于将计算得结果输出到JSP页面中
<c:out value="value" [escapeXml="true|false"] [default="defaultValue"]/>
例如:escapeXml属性值为false时:<c:out value="<hr>" escapeXml="false"/>
escapeXml属性值为true时:<c:out value="<hr>"/>
第一种语法格式:<c:out value="${name}" default="name得值为空"/>
第二种语法格式:<c:out value="${name}"> name得值为空 </c:out>
b) <c:set>标签:用于定义与存储变量
<c:set value="value" var="name" [scope="page|request|session|application"]/>
c) <c:remove>标签:可以从指定得JSP范围中移除指定得变量
<c:remove var="name" [scope="page|request|session|application"]/>
2) 条件标签:
(a) <c:if>标签:在scope范围内,判断test并将条件得判断结果保存在var属性指定得变量中
<c:if test="condition" var="name" [scope=page|request|session|application
例如:
<c:if test="${param、user==null}" var="rtn" scope="page"/>
<c:out value="${rtn}"/>//输出false
<c:if test="${param、user==null}">
<form action="" method="post">
请输入用户名:<input type="text" name="user">
<input type="submit" value="提交"></form></c:if>
(b) <c:choose>标签,语法:
<c:choose> <c:when></c:when><c:otherwise> </c:otherwise></c:choose>
例如:<c:set var="hours"><%=new java、util、Date、getHours%>
</c:set><c:choose>
<c:when test="${hours>6 && hours<11}" >上午好!</c:when>
<c:when test="${hours>11 && hours<17}">下午好!</c:when>
<c:otherwise>晚上好!</c:otherwise></c:choose>
现在时间就是:${hours}时
3) 循环标签:
a) <c:forEach>标签: 可以枚举集合中得所有元素,也可以循环指定得次数
<c:forEach items="data" var="name" begin="start" end="finish" step="step" varStatus="statusName">标签主体</c:forEach>
例如:应用<c: forEach >标签循环输出List集合中得内容,并通过<c: forEach >标签循环输出字符串“编程词典”6次:
<body><%List list=new ArrayList;
list、add("无语");list、add("冰儿");list、add("wgh");
request、setAttribute("list",list);%>
利用<c:forEach>标签遍历List集合得结果如下:<br>
<c:forEach items="${list}" var="tag" varStatus="id">
${id、count } ${tag }<br>
</c:forEach>
<c:forEach begin="1" end="6" step="1" var="str">
<c:out value="${str}"/>编程词典
</c:forEach></body>
b) <c:forTokens>标签: 可以用指定得分隔符将一个字符串分割开,根据分割得数量确定循环得次数。<c:forTokens items="String" delims="char" />
例如:<body><c:set var="sourceStr" value="无语|冰儿|wgh|简单|simpleRain"/>原字符串:<c:out value="${sourceStr}"/><br>分割后得字符串:
<c:forTokens var="str" items="${sourceStr}" delims="|" varStatus="status">
<c:out value="${str}"></c:out> ☆ <c:if test="${status、last}">
<br>总共输出<c:out value="${status、count}"></c:out>个元素。</c:if>
</c:forTokens> </body>
22. 例题:用Servlet+JSTL实现用户验证:
其中表单提交部分省略,参数为unam,upass;
String uname="";String upass="";
try {uname=request、getParameter("uname");
upass=request、getParameter("upass");
uname=uname、trim;upass=upass、trim;
ArrayList<UserInfo> userlist=new ArrayList<UserInfo>;
/*省略数据库连接字段*/Connection con;
con=DriverManager、getConnection(connectionString);
PreparedStatement ps=con、prepareStatement(sqlString);
ResultSet rs=ps、executeQuery;
while(rs、next){UserInfo user=new UserInfo;
user、setUserName(rs、getString(1)、trim);
user、setUserPass(rs、getString(2)、trim);
userlist、add(user);}
request、setAttribute("ulist", userlist);
request、getRequestDispatcher("show、jsp")、forward(request, response);
在show、jsp里,显示代码如下:
<c:forEach var="gs" items="${ulist}" varStatus="id">
<tr><td height="34">${id、count }</td>
<td><c:out value="${gs、uname }"/></td><td><c:out value="${gs、upass}"/></td>
<td><a href="${pageContext、request、contextPath}/Op?action=enmodify&id=${gs、id}">修改</a></td> </c:forEach>
展开阅读全文