jsp学习(一)

来源:互联网 发布:etap电气仿真软件 编辑:程序博客网 时间:2024/06/05 14:38

jsp基础微笑

1 JSP页面元素与内置对象

1. page指令:常用的page指令有8个:language、extends、import、errorPage、isErrorPage、contentType、isThreadSafe、session

      1. language设置JSP页面中用到的语言,默认值是“Java”语法如:<%@pagelanguage=”java”%>

      2. extends设定目前JSP页面要继承的父类,一般不需要进行设置,默认是HttpJspBase。例如当前页面要继承mypackage包下的myclass类,相应的声明为:<%@page extends=”mypackage.myclass”%>

      3. import设置目前JSP页面中要用到的Java类,可以是sunjdk中的也可以使自己定义的,<%@page import=”java.sql.*,java.util.*”%>

      4. errorPage用来设定当JSP页面出现异常时所要转向的页面,如果不设定就在默认的当前页面显示<%@page erroPage=“/error/error_page.jsp”%>

      5. isErrorPage用来设定当前的JSP页面是否作为传回错误页面的网页默认值是false,如果设定为True。容器则会在当前的页面中生成一个exception对象。errorPage与isErrorPage: <%@pagelanguage=”java”errorPage=”3-5page”contentType=”text/html;charset=GBK”%> 另外3-5jsp:<%@pagelanguage=”java”isErrorPage=”true”contentType=”text/html;charset=GBK”%>

      6. contentTy用来设定传回网页的文件格式和编码方式,一般使用“Text/html;charset=GBK”

      7. isThreadSafe定义JSP容器执行JSP程序的方式,默认是“True”代表JSP容器会以多线程方式运行JSP页面,当设定为“false”时为单线程

 8. session定义当前JSP页面中是否要用到session默认为“True”

2.  include指令:用来指定怎样把另一个文件包含到当前的JSP页面中,这个文件可以是普通的文本文件,也可以是一个JSP页面。<%@ include file=”logo.htm”%>采用include指令可以实现JSP页面的模版化,是开发维护变的非常简单

3.  taglib指令:实际上是执行Java代码。语法:<%@taglib  uri=”tagLibraryURI”prefix

=”tagPrefix”%>

2 操作指令

1. jsp:inclulde指令:用于在当前JSP页面中加入静态和动态的文件资源;格式:<jsp:Include page=”test.htm”/>指令必须以“/”结束

2. jsp:forward指令:用于把当前的JSP页面转移到另一个页面上,基本语法是:<jsp:forward page=”test2,jsp”/>

3. jsp:forward指令:可以在执行forward操作动作时追加参数,按照“名字/值”的方式进行传递,可以把其与forward指令结合到一起使用:<jsp:forward page=”mypage.jsp”><jsp:paramname=”param1” value=”value1”/></forward>可以使用request对象来读取这些参数的值。

Jsp:useBean、jsp:setProperty、jsp:getProperty都是用来操作javaBean的。

3 JSP代码

1. 变量和方法:变量的声明时使用<!% %>标记,标记!是声明变量类似与static

4 JSP隐含对象

1. out对象:把信息回送到客户端的浏览器中。out.write()和out.print()相同。newLine()功能是输出一个换行符,out.flush()输出缓冲的内容,out.close()关闭输出流,

2. response对象:最常用到的是sendRedirect()方法,可以使用这个方法将当前客户端的请求转到其他页面上,相应的代码格式为:response.sendRedirect(“URL地址”)而且地址栏也会显示URL的路径

3. 动态contentType响应:把相应的文件方式发送给客户端。常用的:text/plain(文本文件)、application/x-msexcel(Excel文件)、application/msword(word文件)

4. HTTP文件头响应:利用JSP动态改变客户端的响应,使用语法是:response.setHeader(),比如让客户端每隔5秒刷新一次:response.setHeader(“Refresh”,”5”);

5. 设置缓冲区:为了确保显示的正确性,需要将禁用页面缓冲,否则会显示其它用户的一些信息,解决办法需要在每个JSP的页面中加入语句如:response.setHeader(“Pragma”,”No-cache”);response.setHeader(“Cache-Control”,”no-cache”);response.setDateHeader(“Expires”,-1);使得浏览器每次请求页面的时候都取重新编译运行

6. request对象:当客户端请求一个JSP页面时,JSP容器会将客户端请求信息包装在这个request对象中,请求信息包括:头信息、系统信息、请求方式(get/post)请求的参数名称和参数值。如:

request.getParameter(“参数“);取得所有参数:Enumeration parames=request.getParameterNames

();使用while(params.hasMoreElements())循环输出值:参数名:current_param=(String)parames

.nextElement();参数值:request.getParameter(current_param);

1.       Request中常用方法有:

(1)    客户使用协议:request.getProtocol();

(2)    接受客户提交信息的页面request.getServletPath();

(3)    接受客户提交信息的长度:requset.getContentLength()

(4)    提交的方式:request.getMethod()

(5)    获取HTTP头文件中User-Agent的值:requset.getHeader(“User-Agent”);

(6)    获取头文件accept的值:requset.getHeader(“accept”);

(7)    获取host的值:requset.getHeader(“Host”)

(8)    获取accept-encoding的值:requset.getHeader(“accept-encoding”);

(9)    客户的ip地址:requset.getRemoteAddr();

(10)客户机的名称:requset.getRemoteHost()

(11)获取服务器的名称:requset.getServerName()

(12)获取服务器的端口号:requset.getServerPort();

7.汉字问题的解决办法:当利用request.getParameter的到form表单中元素时,默认字符编码为ISO-8859-1这种编码方式不能正确显示汉字。有三种解决方法:

      1.执行操作前设置request的编码格式:request.setCharacterEncoding(“GBK”);

      2.转化字符编码:str=request.getParameter(“name”);byte b[]=str.getBytes(“ISO-8859-1”);

Str=newString(b);

      3.使用过滤器:把CharSetFilet.java放在conn包下面,servlet.jar放在lib包下面,在web.xml中配置:<filter>

                  <filter-name>encoding</filter-name>

                  <filter-class>com.cn.comm.CharSetFilter</filter-class>

                  <init-param>

                     <param-name>encoding</param-name>

                     <param-value>UTF-8</param-value>

                  </init-param>

              </filter>

              <filter-mapping>

                     <filter-name>encoding</filter-name>

                     <url-pattern>/*</url-pattern>

 </filter-mapping>

com.cn.comm.CharSetFilter包下的java文件

public class CharSetFilter extends HttpServlet implements Filter {
    private FilterConfig filterConfig;
    private String coding="GBK";
    boolean  showFlag=false;
    public void init(FilterConfig filterConfig) throws ServletException {
        //初始化
        this.filterConfig = filterConfig;
        this.coding=filterConfig.getInitParameter("encoding");
       
    }


    public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain filterChain) {
        //进行过滤处理
        try {
            //System.out.println("使用" + coding + "编码方式对请求进行编码");
            HttpServletRequest req = (HttpServletRequest) request;
            /*对所有请求的页面数据指定编码格式:防止中文乱码*/
            req.setCharacterEncoding(coding);


            /*在处理权发送给下一个过滤器,如果没有下一个过滤器,就将请求发送给目标*/
            filterChain.doFilter(request, response);
        } catch (ServletException sx) {
        sx.printStackTrace();
            filterConfig.getServletContext().log(sx.getMessage());
        } catch (IOException iox) {
        iox.printStackTrace();
            filterConfig.getServletContext().log(iox.getMessage());
        }
    }
    public void destroy() {
        //销毁过滤器
        this.filterConfig=null;
    }


}

8.application对象:站点所有用户共用一个application对象,开启就被创建直到网站关闭。

属性有:

(1)   publicvoid setAttribute(String key,Object obj):

(2)   publicObject getAttribute(String key);

9.session对象:仅次于application,它保存的对象在当前用户连接的所有页面中都是可以被访问到的。当用户页面之间跳转时,存储在session中的值不会被清除。Session中常用到的方法是:setAttribute()、getAttribute()、removeAttribute()

10.cookie对象:使用如下:写入cookie:String str=”zhourunf” ;cookiec=new cookie(“name”,str);

response.addCookie(c);读出cookie:cookiecookies[]=request.getCookies();

for(inti=0;i<cookies.length;i++)

{if(cookies[i].getName().equals(“name”))

out.println(cookies[i].getValue());}

原创粉丝点击