JSP学习笔记

来源:互联网 发布:淘宝达人的推广方式 编辑:程序博客网 时间:2024/05/23 10:58
jsp技术
1.jsp的注释方式
1)显示注释
<!--      -->
2)隐式注释
<%--       -->
//
/*


*/
jsp的脚本元素
1)<%! 声明全局变量或者常量,方法和类%>
2)<% 声明局部变量或者语句  %>
3)<%=输出的内容 %>(在jsp中一般不采用out输出的形式)



jsp指令元素page
page主要用于设置jsp页面的MINI,language,pageEncoding ,导入要使用的java包,以及errorPage页面的设置
1)关于MINI
一般设置<%@ page contentType=“text/html;charSet=GBK“
如果要将html文件转化成其他文件,如word文件打开<%@ page contentType=”application/msword“
另外在response.setHead("   ")
2)关于import使用例
<%@ page import=”java.io.*;"%>
3)关于errorPage属性的设置
<%@ page errorPage=“error。jsp”  %>
在error。jsp页面中设置page isErrorPage=“true”
response.setStatus(200)

jsp指令元素include与jsp:include区别
1).<%@ include file="url   "%>静态包含的页面 先包含后处理(不建议使用)
2).<jsp:include page="   “/> 动态包含的页面 先处理后包含
<jsp:include page="   ">
<jsp:param name=" " value=" "/>
</jsp:include>
当一个页面需要多个页面的信息时可以动态包含页面文件


利用jsp实现页面的跳转
<jsp:forward page="url">
<jsp:param value=" " name=" "/>
</jsp:forward>
通过jsp:forward标签可以实现页面的服务器跳转(页面的内容改变,但是页面的地址没变)可以向跳转于的界面传递参数
跳转之后的页面通过requset.getparameter()来获得参数

通过jsp书写用户登录程序
需要login.jsp   login_success.jsp   login_failture.jsp   login_check.jsp
1)login.jsp 需要两个简单的输入框和两个按钮
username 与 password的参数传递到login_checkjsp页面,<%! 设置数据库连接的常数>
<%考虑到线程安全,将conn,prep,rs=null%>
<%driver.forname(加载驱动器)>
PrepareStatement prep=conn.PrepareStatement(sql);
对问号设置值prep.setString(1,req.getParameter(username))
ResultSet rs=prep.executeQuery(sql)
 if(rs.next()){
<jsp:forward page="login_success.jsp">
<jsp:param name=" " value=" "/>
/>
login_success.jsp 欢迎usern(通过getp)
login_fail。jsp login。jsp的连接


关于jsp中request对象的使用与注意
request对象实则是httpservletrequest接口的实例,由于HttpServletRequest继承于ServletRequest,因此满足ServletRequest接口中定义的方法
1)关于字符乱码现象的解决
request.setCharacterEncoding(字符编码)
及使得由前段传过来的属性不至于乱码
2)对于前台复选框的处理
前台通过<input type=“checkbox” name=“  ” >设置多个复选框应该保证变量名相同
后台通过request.getParameterValues();得到一个字符串数组然后通过for(int i=0;i<ilist.length;i++)得到选中的复选框的值必须对其设置健壮性if(ilist!=null)
前台设置radio,比如选中性别时后台得到的变量值同样通过getParameter()得到
前台设置隐藏域<input type="hidden" name=" id " value="12">类似这种同样通过getParameter()得到   
关于地址复用可以通过地址栏+?参数名=value设置传递的参数值同样可以达到目的
对于Http协议的发送方式post方法仅仅跳转页面,传递参数但是不用改变地址栏
Get方式除了跳转页面,同样地址栏会增加一个传递的参数项

3)获取头信息(用户的id,cookie,语言等等一些信息)
通过Enumeration enu= request.getHeaderNames();
通过while(enu.hasMoreElements)
{
String headerName=enu.nextElemnt();
通过<%=     %>输出对应的头信息的变量名
String header=request.getString(headerName);
<%=             %>对于头信息内容进行输出
}
4)关于其他
String method=request.getMethod();得到Http协议传送的方式
String ip=request.getRemoteAddr();   得到对应的ip地址
String path=request.getServletPath(); 得到访问路径
String contextPath=request.getContextPath();      得到根目录访问图片的方法<img src=“ 图片的路径    ”可以在根目录下新建一个images文件夹,存放图片   图片存放完成通过request.getContextPath()可以返回根目录/images/。。。。



response内置对象的使用
1)通过response.setHeader()设置头信息
可以实现动态刷新
<%@page language="java" contentType="text/html" pageEncoding="GBK"
 %>
 <%@ page import="java.util.*" %>
 <%!
 int count=0;
 %>
 <% response.setHeader("refresh","2");
 %>


 <h1>一共访问<%= ++count%></h1>
通过response.setHeader("refresh","3;url=   ")
通过头信息实现页面的定时跳转,如果登录不成功可以添加个超链接
<%@page language="java" contentType="text/html" pageEncoding="GBK"
 %>
 <%@ page import="java.util.*" %>
 <h1>3秒钟之后自动跳转到下一个页面,如果没有跳转请按<a href="hello.jsp">这里</a></h1>
 <% response.setHeader("refresh","3;URL=hello.jsp");
 %>
2)关于response.sendRedirect(url)与<jsp:forward page="url"/>的区别
1.前者是关于客户端的页面的跳转,request.getParameter()不能得到其跳转前页面设置的属性,request.getParameter()方法执行在页面处理的最后实现页面的跳转
2.后者则是关于服务器端的跳转,可以获得request范围的属性,并且是无条件跳转,遇到《jsp:forward》就跳转页面
3)关于在客户端通过response 设置cookie 用于保存登录用户的基本信息,通过request.getCookies()可以获得cookie的对象,通过getName()与getValue()获得cookie中存放的信息
1.关于前台cookie设置
<%!
 private static final String username="caiqi";
 %>
<% Cookie c1=new Cookie("name",username);
   Cookie c2=new Cookie("age","12");
   c1.setMaxAge(200);
   c2.setMaxAge(100);
   response.addCookie(c1);
   response.addCookie(c2);
%>
2.关于后台cookie的接收
<%
   Cookie[] cookies=request.getCookies();
   for(int i=0;i<cookies.length;i++){
       %>
       <%
       Cookie c=cookies[i];
       %>
       <h1><%=c.getName() %>---><%=c.getValue() %></h1>
       <%
   }
       %>  



关于内置对象session
1)session_id
当用户第一次登陆服务器时,服务器会为其设置一个session_id,作为该用户的唯一标识传送给浏览器保存,当继续发送请求时,session_id
会随着请求一起传送给服务器,服务器就能对用户进行会话跟踪,记录用户的登录信息(登录的时间,登录的状态)可以通过session;.getId()一个浏览器对应一个用户对应一个session_id当关闭服务器之后,session_id不存在了;若要保存session_id即使服务器关闭通过在server.xml文件中设置就可以;

2)session中常用的方法
getId()
getCreationTime() 返回该用户第一次登陆的时间
getAccessedTime() 返回该用户现在的时间
isNew()判断该用户是不是新用户
invalidate() 使session失效(注销用户)
3)可以通过session设置属性
同一个用户发送的多条请求都公用
4)获得用户登录时间
etCreationTime() 返回该用户第一次登陆的时间
getAccessedTime() 返回该用户现在的时间
两者相减


application对象
1)是ServletContext的对象this.getServletContext()得到
2)网站计数器
<%@ page language="java" contentType="text/html"
    pageEncoding="GBK"%>
    <%@ page import="java.io.*" %>
    <%@ page import="java.util.*" %>
    <%@ page import="java.math.*" %>
    <%!
    BigInteger count=null;
    %>
    <%!
    public BigInteger load(File file)throws FileNotFoundException{
        BigInteger count=null;
        if(file.exists()){
            Scanner scan=new Scanner(new FileInputStream(file));
            while(scan.hasNext()){
                count=new BigInteger(scan.next());
            }
                 scan.close();
        }
        else
        {
            count=new BigInteger("0");
            save(file,count);
            
        }
        return count;    
    }
    %>
    <%!
    public void save(File file,BigInteger count)throws FileNotFoundException{
        PrintStream ps=null;
        ps=new PrintStream(new FileOutputStream(file));
        ps.println(count);
    }
    %>
    <%
    String fileName=this.getServletContext().getRealPath("/")+"count.txt";
    File file=new File(fileName);
    if(session.isNew()){
        count=load(file);
        count=count.add(new BigInteger("1"));
        save(file,count);
        
        
    }
    %>
    <h1>您是第<%=count %>位访客</h1>
3)通过getRealPath("/")得到文件的绝对路径
便于文件的操作
<%@ page language="java" contentType="text/html"
    pageEncoding="GBK"%>
    <%@ page import="java.io.*" %>
    <%@ page import="java.util.*" %>
<%--该jsp是对文件进行操作的页面 --%>
<%
request.setCharacterEncoding("GBK");
%>
<%
String name=request.getParameter("fileName");
String content=request.getParameter("fileContent");
String fileName=this.getServletContext().getRealPath("/")+"note"+File.separator+name;

File file=new File(fileName);
if(!file.getParentFile().exists())
    file.getParentFile().mkdir();
PrintStream ps=null;
ps=new PrintStream(new FileOutputStream(file));
ps.println(content);
ps.close();
%>
<%
Scanner scan=new Scanner(new FileInputStream(file));;
scan.useDelimiter("/n");
StringBuffer buf=new StringBuffer();
while(scan.hasNext()){
    buf.append(scan.next()).append("<br>");
    
}
%>
4)getAttributeNames()得到所有属性的名字与值
<%@page import="org.eclipse.jdt.internal.compiler.ast.ThisReference"%>
<%@ page language="java" contentType="text/html"
    pageEncoding="GBK"%>
    <%@ page import="java.io.*" %>
    <%@ page import="java.util.*" %>
    <%
    Enumeration enu=this.getServletContext().getAttributeNames();
    while(enu.hasMoreElements()){
        String name=(String)enu.nextElement();
        
        %>
        <h1>属性的名字与值<%=name %>---><%=this.getServletContext().getAttribute(name) %></h1>
        <%
    }
    %>


Web安全性与config
将jsp放在web-inf文件夹下面,不能直接的访问
必须在web.xml文件中设置映射路径
<servlet>
    <servlet-name>he</servlet-name>
    <jsp-file>
     /WEB-INF/hello.jsp
    </jsp-file>
  </servlet>
  <servlet-mapping>
    <servlet-name>he</servlet-name>
    <url-pattern>/hello.xxx</url-pattern>
  </servlet-mapping>
</web-app>
可以在jsp-file下设置初始化的参数
<param-name> xxx</param-name>
<param-value>xxx</param-value>
在该jsp中通过config.getInitParameter()得到初始化参数的值




内置对象out的使用(JspWriter)
out.getBufferSize()  得到缓冲区的大小
out.getRemaining()   得到可用的缓冲区大小
两者消减得到正在使用的缓冲区大小


    

内置对象pageContext(PageContext)
通过pageContext可以得到
request response config session application
同时也能实现页面的包含与跳转



通过SimpleDateFormat接口获得当前日期与时间
<%@ page language="java" contentType="text/html"
    pageEncoding="GBK"%>
    <%@ page import="java.text.SimpleDateFormat" %>
    <%@ page import="java.util.Date" %>
    <%
    SimpleDateFormat simple=new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
    String time=simple.format(new Date());
    request.setAttribute("time", time);
    %>
    <h1>现在的时间为:${time}</h1>








 







0 0
原创粉丝点击