JSP相关概念及应用

使用 JSP 处理客户端请求 

内置对象:内置对象是有WEB容器加载的一组类的实例(是指不需要创建可以直接使用的对象)


PageContex内置对象

Reques内置对象 作用:用于处理客户端请求
内置对象request的常用方法
返回类型 方法名称 说明
String getParameter(String name); 根据页面表单组件名称获取页面提交数据
String[] getParameterValues(String name); 获取一个页面表单组件对应多个值时的用户的请求数据
void setCharacterEncoding(String charset); 指定每个请求的编码,在调用 request.getParameter()方法之前进行设定,可以用于解决中文乱码问题
void getRequestDispatcher(String path); 返回一个 javax.servlet.RequestDispatcher 对象,该对象的 forward 方法用于转发请求
void setAttribute(String key,Object value); 以键-值方式,将一个对象的值存放到request中
Object getAttribute(String key); 根据键获得request中存放的对象(注:在获得值时要进行强制转换)
Response内置对象 作用:用于响应客户端请求并向客户端输出信息
内置对象response的常用方法
返回类型 方法名称 说明
void sendRedirect(String location); 用来请求重定向到一个不同的URL
Session内置对象 作用:用于存储有关用户会话的所有信息
返回类型 方法名称 说明
void setAttribute(String key,Object value); 以键-值方式,将一个对象的值存放到session中
Object getAttribute(String key); 根据键获得session中存放的对象(注:在获得值时要进行强制转换)
void removeAttribute(String key); 删除指定的session中存放的对象的值
session的失效
描述 方法
关闭浏览器 关闭浏览器
设置时间限制 1、session.setMaxInactiveInterval(时间大小);//设置失效最大时间间隔(单位为秒) 2、<session-config>      <session-timeout>2</session-timeout>    </session-config> //单位为分钟
直接失效 session.invalidate();
Application内置对象 作用:用于实现用户之间的数据共享
返回类型 方法名称 说明
void setAttribute(String key,Object value); 以键-值方式,将一个对象的值存放到application中
Object getAttribute(String key); 根据键获得application中存放的对象(注:在获得值时要进行强制转换)
<%   Integer counter = new Integer();   if(application.getAttribute("counter")==null)     application.setAttribute("counter",new Integer(1));   else{     counter = application.getAttribute("counter");     application.setAttribute("counter",counter.intValue()++);   } %>
page、request、session、application的作用范围
对象 描述 对应关系 生命周期
page 用户请求的当前页面 与浏览器对象对应  
request 用户请求访问的当前组件,以及和当前web组件共享同一用户请求的web组件 与浏览器对象对应  
session 同一个http会话中的web组件共享它 与浏览器对象对应 会话超时,或者服务器端强制使会话失效
application 整个web应用的所用web组件共享它 与服务器对象对应 应用程序(服务器端)启动到停止。
防止IE缓存jsp文件来源
方法 实现代码
使用java提供的方法,在jsp或者servlet中都可以 <%   RESPONSE.SETHEADER("PRAGMA","NO-CACHE");   RESPONSE.SETHEADER("CACHE-CONTROL","NO-CACHE");   RESPONSE.SETDATEHEADER("EXPIRES", 0); %>
使用html标记 <head>   <META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">   <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">   <META HTTP-EQUIV="EXPIRES" CONTENT="0"> </head>
//导入的包 import java.text.SimpleDateFormat; //日期格式化方法 public String getDateTime(){ SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); return formater.format(new Date()); } //给select中赋值(从库中查找到的数据显示到下拉列表中) <select name="boardID"> <% NewsBoardDao newsBoardDao = new NewsBoardDao(); List list = newsBoardDao.findAllNewsBoard(); if(list!=null){ for(int i=0;i<listb.size();i++){ NewsBoard newsBoards = (NewsBoard)list.get(i); if(news.getBoardID()==newsBoards.getBoardID()){ //加载显示选中项 %> <option value=<%=newsBoards.getBoardID() %> selected><%=newsBoards.getBoardTitle() %></option> <% }else{ //加载其他未选中项 %> <option value=<%=newsBoards.getBoardID() %>><%=newsBoards.getBoardTitle() %></option> <% } } } %> </select> <table width="256" border="0"> <% //循环输出版块标题 for(int i=0;i<list.size();i++){ NewsBoard newsBoard = (NewsBoard)list.get(i); if(i%4==0){ %> <tr> <% } %> <td align = "center"><%=newsBoard.getBoardTitle() %></a></td> <% if(i%4==3){ %> </tr> <% } } %> </table> //Jsp页面之间传参方式
地址传参
传参方式 语法
表单提交传参 <form name="myForm" action="#.jsp?变量名1=<%=参数%>&变量名2=<%=参数%>" method=post onsubmit="return fun()"> 获得参数值 String 变量名 = request.getParameter("变量名1");
链接传参 <a href = "#.jsp?变量名1=<%=参数%>&变量名2=<%=参数%>></a> 获得参数值 String 变量名 = request.getParameter("变量名1");
request转发传参 request.getRequestDispatcher("#.jsp?变量名1="+参数+"&变量名2="+参数2).forword(request,response); 获得参数值 String 变量名 = request.getParameter("变量名1");
response重定向传参 response.sendRedirect("#.jsp?变量名1="+参数+"&变量名2="+参数2); 获得参数值 String 变量名 = response.getParameter("变量名1");
调用方法传参
使用链接调用方法传参 function fun(){    var id=document.newsFrom.txtTP.value; //获得值    window.location.href="newsTP.jsp?str='ccc'&id="+id; //使用location进行连接 } <a href="javascript:fun()">确定</a> function delNews(id){    if(confirm("是否删除!")==true){       window.location.href="doNews.jsp?types=del&newsID="+id;    } } <a href="javascript:delNews(<%=news.getNewsID() %>)">删除</a>
使用按钮调用方法传参 function show(){    var x=document.getElementById("txtTP");//获得值    document.forms[0].action="newsTP.jsp?num="+x; //可以把一个页面的表单看成数组进行调用    document.forms[0].submit(); //调用表单提交方法 } <input name="btn" type="button" value="确定" onclick="show()"/>
使用Jsp调用方法传参 function fun(){    var id=document.newsFrom.txtTP.value; //获得值    window.location.href="newsTP.jsp?str='ccc'&id="+id; //使用location进行连接 } <% out.print(fun()); %>
页面跳转方法
分类 实现 浏览器地址 处理 跳转方式类型 请求状态
表单提交 <form name="myForm" action="#.jsp" method=post onsubmit="return fun()"> URL改变 浏览器端处理 既可以get也可以post 使用method属性来确定 失效
链接 <a href="#.jsp">链接</a> URL改变 浏览器端处理 get 失效
重定向 response.sendRedirect("#.jsp"); URL改变 浏览器端处理 post 失效
页面转发 request.getRequestDispatcher("#.jsp").forward(request,response); URL不改变 服务器端处理 get 不失效
使用out.print()方法 out.print("<script type="text/javascript">alert("失败");history.go(-1);</script>);   浏览器端处理 get 失效
get和post区别
  get post
传送 URL HTTP协议
可见性 客户端可见 客户端部可见
长度 255字节 理论上没有限制
中文处理 只要是有中文的变量都要处理  String strget = "接收的字符";  String str = new String(strget.getBytes("ISO8859-1")); 在小脚本中写入 request.setCharacterEncoding("GBK");
history对象的方法
名称 说明
back() 加载history列表中的上一个URL
forward() 加载history列表中的下一个URL
go("URL"or number) 加载history列表中指定的URL,或要求浏览器移动指定的页面数
location 对象的方法
名称 说明
assign("URL") 加载 URL 指定的新的 HTML 文档
reload() 重新加载当前页
replace("URL") 通过加载URL指定的文档来替换当前文档
//使用include引用页面,包含进来的页面与该页面真正的融合,共用一个pageContext对象,所有包含的页面之间不能含有同名变量.
使用include引用页面
实现 描述
<%@ include file="#.jsp" %> 当使用include引用时,当改变页面时,不可以立刻更新,必须重新加载(重新编译)
<jsp:include page="#.jsp" /> 当使用jsp引用时,当改变页面时可以立刻更新显示,不需要重新加载
声明和脚本的区别
转译前 转译后 运行机制 值变化
声明中的方法、变量 转换成类方法、全局变量 只在第一次打开页面时运行 值在每次打开浏览器时都不改变
脚本中的变量 转换成_jspService()方法中的变量 每次打开页面时运行 值在每次打开浏览器时都重新加载改变
转自:http://602618079.blog.163.com/blog/static/26657161200911595312132/

你可能感兴趣的:(jsp,Web应用)