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>
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>