小白的jsp学习笔记一

来源:互联网 发布:天眼通网络加速器 编辑:程序博客网 时间:2024/06/13 05:02

参考网站:http://www.runoob.com/jsp/jsp-tutorial.html

如果大家觉得哪里不对,欢迎指出.......

一、生命周期

jspInit():jsp初始化

jspDestroy():jsp销毁

_jspService(HttpServletRequest request,

HttpServletResponse response)执行jsp

 

二、语法

1.脚本语言:

<%  代码片段    %>

<jsp:scriptlet>   代码片段   </jsp:scriptlet>

2.声明:

<%!   declaration; [ declaration; ]   %>

3.表达式:

<%= 表达式 %>

4.注解:

<%--   这是注解   --%>

<!-- 注释 -->

5.指令(http://www.runoob.com/jsp/jsp-directives.html):

<%@ page ... %>   页面的依赖属性

<%@ include ... %>   包含其他文件

<%@ taglib ... %>    引入标签库

6. JSP行为(http://www.runoob.com/jsp/jsp-actions.html):

jsp:include    用于在当前页面中包含静态或动态资源

jsp:useBean    寻找和初始化一个JavaBean组件

jsp:setProperty   设置JavaBean组件的值

jsp:getProperty   JavaBean组件的值插入到output中

7. JSP隐含对象(http://www.runoob.com/jsp/jsp-implicit-objects.html):

Request    HttpServletRequest类的实例

Response   HttpServletResponse类的实例

Out       PrintWriter类的实例,用于把结果输出至网页上

Session   HttpSession类的实例

Application   ServletContext类的实例,与应用上下文有关

Config     ServletConfig类的实例

pageContext  PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问

Page        类似于Java类中的this关键字

Exception   Exception类的对象,代表发生错误的JSP页面中对应的异常对象

8. 控制流语句:

If else /  for  / switch case / while /

 

三、设置状态码

public void sendError(int code, String message)

 

四、JSP表单处理

Get() :显示获取

Post()方法  :隐式获取

1.getParameter(): 使用 request.getParameter() 方法来获取表单参数的值。

2.getParameterValues(): 获得如checkbox类(名字相同,但值有多个)的数据。 接收数组变量 ,如checkbox类型

3.getParameterNames():该方法可以取得所有变量的名称,该方法返回一个Emumeration。

eg:

Enumeration paramNames = request.getParameterNames();

   while(paramNames.hasMoreElements()) {

      String paramName = (String)paramNames.nextElement();

      out.print(paramName + "\n");

      String paramValue = request.getParameter(paramName);

      out.println(paramValue + "\n");

   }

4.getInputStream():调用此方法来读取来自客户端的二进制数据流。

 

五、JSP过滤器

目的:

1.在客户端的请求访问后端资源之前,拦截这些请求。

2.在服务器的响应发送回客户端之前,处理这些响应。

过滤器:

· 身份验证过滤器(Authentication Filters)。

· 数据压缩过滤器(Data compression Filters)。

· 加密过滤器(Encryption Filters)。

· 触发资源访问事件过滤器。

· 图像转换过滤器(Image Conversion Filters)。

· 日志记录和审核过滤器(Logging and Auditing Filters)。

· MIME-TYPE 链过滤器(MIME-TYPE Chain Filters)。

· 标记化过滤器(Tokenizing Filters)。

· XSL/T 过滤器(XSL/T Filters),转换XML内容。

方法:

//完成实际过滤操作

public void doFilter (ServletRequest, ServletResponse, FilterChain)

//完成初始化操作(只执行一次)

public void init(FilterConfig filterConfig)

//Servlet在销毁过滤器实例时调用该方法

public void destroy()

FilterConfig使用:

eg:

<web.xml中>

<filter>

    <filter-name>LoginFilter</filter-name>

    <filter-class>com.first.test.LogFilter</filter-class>

    <init-param>

        <param-name>Site</param-name>

        <param-value>百度一下</param-value>

    </init-param>

    </filter>

<init初始化方法中>

public void  init(FilterConfig config) throws ServletException {

    // 获取初始化参数

    String site = config.getInitParameter("Site");

    // 输出初始化参数

    System.out.println("网站名称: " + site); }

web.xml配置各节点说明:

1. <filter>指定一个过滤器。

· <filter-name>用于为过滤器指定一个名字,该元素的内容不能为空。

· <filter-class>元素用于指定过滤器的完整的限定类名。

· <init-param>元素用于为过滤器指定初始化参数,它的子元素<param-name>指定参数的名字,<param-value>指定参数的值。

· 在过滤器中,可以使用FilterConfig接口对象来访问初始化参数。

2.  <filter-mapping>元素用于设置一个 Filter 所负责拦截的资源。一个Filter拦截的资源可通过两种方式来指定:Servlet名称和资源访问的请求路径

<filter-name>子元素用于设置filter的注册名称。该值必须是在<filter>元素中声明过的过滤器的名字

    <url-pattern>设置 filter所拦截的请求路径(过滤器关联的URL样式)

六、Cookie处理

Cookie需对中文进行编码和解码:

String str = java.net.URLEncoder.encode("中文","UTF-8"); //编码

String str =java.net.URLDecoder.decode("编码后的字符","UTF-8");// 解码

常用方法:

1.public void setDomain(String pattern) //设置cookie的域名

2.public String getDomain()  //获取cookie的域名

3.public void setMaxAge(int expiry)  //设置cookie的有效期

4.public int getMaxAge()  //获取cookie的有效期

5.public String getName() //返回cookie的名称

6.public void setValue(String newValue)  //设置cookie的值

7.public String getValue()  //返回cookie的值

8.public void setPath(String uri)  //设置cookie路径

9.public String getPath()   //获取cookie路径

10.public void setSecure(boolean flag)   //指明cookie是否要加密传输

11.public void setComment(String purpose) //设置注释描述cookie的目的

12.public String getComment()    //返回描述cookie目的的注释

 

使用jsp设置cookie实例:

1.创建cookie对象:Cookie cookie = new Cookie("key","value");

(名称和值中不能包含([ ] ( ) = , " / ? @ : ; )任意一个字符)

2.设置有效期:cookie.setMaxAge(60*60*24);

3.将cookie发送至http响应头中:response.addCookie(cookie);

 

Jsp获取cookie:

Cookie cookie = null;

    Cookie[] cookies = null;

   // 获取cookies的数据,是一个数组

   cookies = request.getCookies();

   if( cookies != null ){

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

         cookie = cookies[i];

         out.print("参数名 : " + cookie.getName());

         out.print("<br>");

         out.print("参数值: " + URLDecoder.decode(cookie.getValue(), "utf-8") +" <br>");

 

使用JSP删除cookie:

1.获取一个已经存在的cookie然后存储在Cookie对象中。

2.将cookie的有效期设置为0。   //cookie.setMaxAge(0);

3.将这个cookie重新添加进响应头中。   //response.addCookie(cookie);

 

七、JSP Session

禁止会话跟踪:<%@ page session="false" %>

常用的方法:

1.public Object getAttribute(String name)//返回session对象中与指定名称绑定的对象

2.public Enumeration getAttributeNames() //返回session对象中所有的对象名称

3.public long getCreationTime() //返回session对象被创建的时间毫秒

4.public String getId()  //返回session对象的ID

5.public long getLastAccessedTime() //返回客户端最后访问的时间毫秒

6.public int getMaxInactiveInterval() //返回最大时间间隔

7.public void invalidate()  //解绑任何与该session绑定的对象

8.public  boolean isNew()  //返回是否为一个新的客户端,或者客户端是否拒绝加入session

9.public void removeAttribute(String name) //移除session中指定名称的对象

10.public void setAttribute(String name, Object value) //使用指定的名称和值来产生一个对象并绑定到session中

11.public void setMaxInactiveInterval(int interval)  //用来指定时间),servlet容器将会在这段时间内保持会话有效

 删除session数据:

1. 移除一个特定的属性:

调用public void removeAttribute(String name)  方法来移除指定的属性。

2. 删除整个会话:

调用public void invalidate() 方法来使整个session无效。

3. 设置会话有效期:

调用 public void setMaxInactiveInterval(int interval)  方法来设置session超时。

4. 登出用户:

支持servlet2.4版本的服务器,可以调用 logout()方法来登出用户,并且使所有相关的session无效。

5. 配置web.xml文件:

如果使用的是Tomcat,可以向下面这样配置web.xml文件:

<session-config>

    <session-timeout>15</session-timeout>

  </session-config>  (默认30分钟)

 

八、JSP文件上传

  HTML 代码创建了一个文件上传表单。以下几点需要注意:

· 表单 method 属性应该设置为POST 方法,不能使用 GET方法。

· 表单 enctype 属性应该设置为multipart/form-data.

· 表单 action 属性应该设置为在后端服务器上处理文件上传的 Servlet文件。下面的实例使用了UploadServlet Servlet来上传文件。

· 上传单个文件,您应该使用单个带有属性 type="file" <input .../> 标签。为了允许多个文件上传,请包含多个name属性值不同的input标签。输入标签具有不同的名称属性的值。浏览器会为每个input标签关联一个浏览按钮。

jsp文件上传实例:http://blog.csdn.net/alan_tw/article/details/78391462

九、JSP日期处理

使用java API中的Date类。两个构造函数:Date(),Date(long millisec)

1.boolean after(Date date)  //如果比给定的日期晚,则返回true,否则返回false

2.boolean before(Date date) //如果比给定的日期早,则返回true,否则返回false

3.Object clone( )  //获取当前对象的一个副本

4.int compareTo(Date date)  //如果与给定日期相等,则返回0,如果比给定日期早,则返回一个负数,如果比给定日期晚,则返回一个正数

5.int compareTo(Object obj)  // compareTo(Date) 方法相同,如果 obj 不是Date类或其子类的对象,抛出ClassCastException异常

6.boolean equals(Object date)  //如果与给定日期相同,则返回true,否则返回false

7.long getTime( ) //返回从1970年1月1日凌晨至此对象所表示时间的毫秒数

8.int hashCode( ) //返回此对象的哈希码

9.void setTime(long time)  //使用给定参数设置时间和日期,参数time表示从1970年1月1日凌晨至time所经过的毫秒数

10.String toString( )  //将此对象转换为字符串并返回这个字符串

使用SimpleDateFormat格式化Date

Date dNow = new Date( );

SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");

out.print( "ft.format(dNow) ");

 

十、JSP页面重定向

String site = "http://www.baidu.com" ;

response.setStatus(response.SC_MOVED_TEMPORARILY);

response.setHeader("Location", site);

或者

response.sendRedirect("http://www.baidu.com");

 

十一、JSP点击量统计

实现计数器,通过application对象的setAttribute()和getAttribute()。

application.setAttribute(String Key, Object Value);

application.getAttribute(String Key);

缺点就是当jsp实现jspDestroy()的时候就被销毁了,得重新计数。

解决方法:

1.在数据库中定义一个用于统计网页访问量的数据表 count,字段为 hitcount,hitcount 默认值为0,将统计数据写入到数据表中

2.在每次访问时我们读取表中 hitcount 字段。

 

十二、JSP实现自动刷新

Response.setIntHeader("Refresh", 5)setRefreshHeader()   //自动刷新