jsp基础

**<%  %>内的代码为java代码
**JSP语法:
显式注释:发送到客户端:HTML注释:
隐式注释:不发送到客户端:Java注释:// 或 /*   */
 JSP注释:<%--  --%>
 
声明代码:声明全局变量、类、方法(实例化一次):<%!  %>
表达式:<%=输出值%> 类似于 out.print();(最好用表达式形式输出,以达到HTML代码与java代码的分离)
脚本代码:写具体的Java代码或声明局部变量:<%%>
脚本小程序(Scriptlet):<%
if(){
%>
<%
}
%>
page指令:
为JSP的页面指定编码(乱码问题,只能指定一次):<%@ page contentType="text/html;charset=gb2312"%>
导入工具包(可以指定多次):<%@ page import="java.util.*"%>  <%@ page import="java.io.*","java.sql.*"%>
/*session管理缓冲设置处理*/(不作为重点)
包含语句:
<%@include file="uri"%>:""内可以包含任意类型文件,但是在一个JSP页面中,只能有一组、、
原则:在开发中被包含的文件,只写显示部分的HTML代码,主体代码不要出现。
(与HTML代码形式相似/* */,称为标签指令语句,该类代码必须完结);

//此语句可以向被包含的页面传递参数,如果传递参数,则被包含的页面必须是动态页面
  */*
   <%@include%>:静态包含页面。先包含后处理。
   只是将页面的内容静态的包含进来,如果被包含的页面有JSP代码,则执行此代码,而不管被包含的页面文件后缀如何
   :动态包含页面。先处理后包含。
   如果被包含文件是静态的,则直接将内容包含进来,但是不处理,如果被包含页面是动态的,则先执行,再把结果包含在一起
   */
跳转语句:
1.
2.

 

 //无条件跳转语句,服务器端跳转,地址栏无变化


中文该如何处理
1.对所有的数据进行再编码:ISO8859-1
String类中的getBytes("ISO8859-1");
getByte()方法定义:
public byte[] getByte("encoding")
再将byte数组重新变为字符串
等价于String name = new String(request.getParameter("uname").getBytes("ISO8859-1"));

2.设置统一的字符编码
void setCharacterEncoding(String env)throws UnsupportedEncodingException
设置统一的请求编码
eg: request.setCharacterEncoding("UTF-8");
String name = request.getParameter("uname");


在开发中较为常用的表单控件:隐藏域
将内容隐藏起来,是用户不能修改,之后随表单一起提交到服务器上显示


地址重写
可以将内容传送到服务器端————服务器端只认HTTP协议,不管接受的内容是如何传来的
123

**JSP是一种动态WEB程序,必须有交互功能


**HTML与服务器交互的主要途径是表单


**使用/*request.getParameter("参数名称");*/接收传递过来的参数,返回值为String类型。
  request为JSP的一个内置对象
  
**HTML 500 :服务器端程序错误


**form表单提交方式: post:提交内容不会显示;
 没有长度要求;
get:提交的内容会显示出来;
地址栏中的长度只有4k~5k,如果传递大数据,则无法使用;

**标签指令形式代码,必须写在Scriptlet(<%...%>)之外。



内置对象:
1.与Servlet有关的隐含对象
page:
config:
2.与Input.Output有关的隐含对象
out:
request:
response:
3.JSP执行时,提供有关的Context的隐含对象
pageContext:
session:
application:
4.与Error有关的隐含对象
exception:


public void setAttribute(String name,Object value)
public abstract void setAttribute(String name,Object value,int scope)
属性名为字符串
属性值可以为任意对象
scope:  pageContext.--_SCOPE (常量)
public Object getAttribute(String name)
四种属性的保存范围:
(择上使用)
-在一个页面范围内:page
  ※-在一次服务器请求范围内:request (MVC设计模式 Struts Webwork)
  ※-在一次会话范围内:session(用于验证用户是否登陆)
-在一个应用服务器范围内:application(服务器端设置属性)(在线人员统计,在线人员名单列表)
 如果要释放application资源,只能重新启动服务器

四种属性范围都是依靠pageContext展开的,但是在开发中,往往使用session,request范围最多。

1.request

request实际上是服务器端接受客户端请求的信息的
接受信息之后,做进一步处理

所属接口:javax.servlet.http.HttpServletResquest
getParameter:接受请求参数
getParameter(),
getParameterValues()(接受一组数据(数组(复选框,多个下拉列项))),
java.util.*;
public Enumeration getParameterNames();
Enumeration:枚举
功能:取得客户端所有请求的参数
Enumeration enu = request.getParameterNames();
while(enu.hasMoreElements()){
//<%=enu.nextElement()%>

Strint name = (String)enu.nextElement();
<%=name%> --> <%=request.getParameter(name)%>
}
public String getRemoteAddr();//获取客户端IP地址

总结:
只要是客户端信息,在服务器端都可以通过request对象取得
只需要注意中文乱码问题
getParameter();
getParameterValues();
setCharacterEncoding();

2.response

response对象的主要功能是服务器端用于向客户端发送信息(设置HTTP头信息,重定向,设置Cookie)

所属接口:javax.servlet.http.HttpServletResponse

主要功能:
1.设置头信息:
最有用的一个头信息:refresh:刷新
response.setHeader("头信息内容","头信息参数");//实现跳转功能
response.setHeader("refresh", "1");//一秒钟刷新一次
response.setHeader("refresh","2;URL=页面名称");跳转到指定页
2.response进行跳转——重定向
response.sendRedirect(跳转路径);//页面地址变为跳转后的地址
*两种跳转的区别:
1.
地址栏不改变跳转——服务器端跳转
执行到跳转语句后无条件立刻跳转——之后的代码不再被执行
注意:如果使用forward跳转,则一定要在跳转之前释放掉全部的资源
使用forward时,request设置的属性仍然能保留在下一个页面(setAttribute)
通过传递参数

2.response.sendRedirect("地址");
地址栏改变跳转——客户端跳转
所有代码执行完毕之后跳转
不能保存request属性——地址栏变了,客户端跳转
通过对URL地址的重写传递参数
//response.sendRedirect("地址?id=xxx");
//request.getParameter("id");

3.设置Cookie
Cookie时服务器端保存在客户端的一组资源
//登陆时问你是否记住密码?或XX长的时间不用再登陆

javax.servlet.http.Cookie
构造方法:
Cookie(String name, String value) 
Constructs a cookie with a specified name and value
//Cookie c1 = new Cookie("name","lalala");

通过response对象将Cookie设置到客户端  
void addCookie(Cookie cookie) 
Adds the specified cookie to the response 
//response.addCookie(c1);
Cookie是通过服务器端设置到客户端上去的——response

如果要在服务器端取得Cookie——request
public Cookie[] getCookies() 
Returns an array containing all of the Cookie 
objects the client sent with this request. 
实际上客户端的Cookie是通过HTTP头信息发送到服务器端上的

在使用request对象取得全部Cookie时,会出现以下信息:
JSESSIONID-->500914552C1FB01207BDD8D2930F1C1E
JSESSIONID-->表示唯一的一个客户端在服务器上的编号
 -->身份证编号--自动获得(SESSION对象)
 
默认情况下,Cookie只针对当前浏览器有效,如果需要Cookie长留在本地计算机上
可以设置Cookie的保存时间。
 
Cookie时保存在客户端上的信息,安全性较差。不要把过多的隐秘信息保留在Cookie中,不安全。
Cookie可以设置最大保留时间——setMaxAge
服务器端在客户端第一次访问后,会设置一个默认的Cookie在客户端上:JSESSIONID

4.session
session对象主要用于保存用户的各种信息,知道它的生命周期(一般为900s)
超时或被人为释放掉为止。
可以通过session对象来判断此用户是否是合法用户。

session对象属于javax.servlet.http.HttpSession接口的实例化对象
session属于Http协议范畴之内的对象,所以只有唯一一个http包下有此接口,没有任何继承关系。
用户只要一连接到服务器,则立刻分配一个session给用户

Session的主要方法:
1.服务器上通过session来分别不同的用户-->SessionID:任何连到服务器上的用户,服务器都会
为之分配唯一的一个不会重复的sessionID
sessionID是由服务器统一管理的,人为不能控制
方法:session.getId() 长度为32位。
2.判断是否是新的session
public boolean isNew()//判断当前的session是否是新建立的session
3.session的属性设置
设置属性:
public void setAttribute(String name,Object value)
取得属性:
public Object getAttribute(String name)
删除属性:
public void removeAttribute(String name)


JavaBean:
*JavaBean就是一个Java类,Java的一切特性,此处都可以使用,它没有图形显示
代码,只是完成基础业务逻辑。
*使用JavaBean封装许多可重复调用的代码。
*达到显示(JSP)与业务(JavaBean)分离。
*将JavaBean编译好的*。class文件拷贝到WEB-INF/classes文件夹之下。

1.




































你可能感兴趣的:(jsp)