Jsp与java web

Jsp与java web

1 jsp基础知识 1

2 sessioncookie 3

1.1 Session部分 3

1.2 Cookie部分 4

过滤器与监听器 5

4 jsp空间部署war文件 8

路径问题 9

6在Java中实现伪静态页面 9

 

1 jsp基础知识

jsp指令:描述jsp文本转换成可执行代码的控制信息

1.include指令:包含一个静态的文件,同时解析这个文件中的jsp语句,有助于实现jsp页面的模块化

 

 

2.page指令:用于定义jsp文件中的全局属性,它描述了与页面相关的一些信息,其作用域为它所在的jsp文件页面和其包含的文件

 

3.taglib指令:用于定义一个标签库以及自定义标签的前缀。

 

 

jsp主要内置对象:(不需要事先声明就可以在脚本中随意使用)

1.PageContext

setAttribute

CustomContext myContext=new CustomContext("p1"); 

PageContext.setAttribute("abc",PageContext.SESSION_SCOPE);

getAttribute

findAttribute(???用法)

removeAttribute

2.request(用于获取和设置客户端数据:下面获取的是表单数据)

String username=request.getParameter("username");

3.session

String ii=(String)session.getAttribute("user");

4.application

String info=application.getServerInfo();

5.Config

6.reponse(用于获取和设置服务器端数据)

response.setHeader("refresh","3");

7.out(输出信息)

out.print("");

out.println("");输出后自动换行

8.Exception()

 

jsp常用动作语法(局部动作):

 />在页面被请求时引入一个文件

 />寻求或实例化一个javaBean

 />设置javaBean的属性

 />输出某个javaBean的属性

 />把请求转到一个新的页面

 

 

 id="bean" class="t.class" />

 

 

 

 />

 

jsp+servlet+javabean  mvc 

javabean充当通信工具  servlet设置javabean属性   jsp读取javabean属性并显示出来

显示与逻辑得到了很好的分离,使得代码更容易管理。

web.xml

servlet类(class)  servlet实例化对象(name) 访问url

 

JSP本质上就是把Java代码嵌套到HTML中,然后经过JSP容器(Tomcat、Resin、Weblogic等)的编译执行(jsp-servlet-class),再根据这些动态代码的运行结果生成对应的HTML代码,从而可以在客户端的浏览器中正常显示。servlet在服务器端编译执行,是服务器端程序。jsp本质是servlet的进化版本,因此也是服务器端程序。

html由浏览器解释执行,是客户端程序。输入url,请求-响应(返回服务器保存的html文件)-浏览器解释执行html代码

 

JavaBean是从jsp页面中分离出来的Java代码,是jsp的动态部分。

jsp中调用javabean需要jsp动作标签

先引入(import)后使用bean(实例化)

JavaBean是java的特殊类,必须具备一些特点:

JavaBean类是一个public类、有一个无参构造函数(当没有构造函数时默认无参)、属性通过set和get方法进行操作

 

2 sessioncookie

1.1 Session部分

知识要点:

设置session

设置session默认有效时间和本session有效时间(session一定时间不使用会被摧毁)

 

特别注意:

session只能被对应会话使用,浏览器关闭,session虽然存在但不能被直接调用
需要依托cookie中JSESSIONID,其解决办法是:重写cookie中JSESSIONID,设置cookie有效时间。

 

session测试代码:

 

设置默认session有效时间:

在web.xml中加入以下代码(秒为单位)

    
    1800
    

session处理在action中的代码:

        ActionContext.getContext().getSession().put("username",username); 
        ActionContext.getContext().getSession().put("rank",rank); 
        String JSESSIONID=ServletActionContext.getRequest().getSession().getId(); 
        Cookie sessionId=new Cookie("JSESSIONID",JSESSIONID); 
        sessionId.setPath("/"); 
        sessionId.setMaxAge(60*30); 
        ServletActionContext.getResponse().addCookie(sessionId); 

 

1.2 Cookie部分

知识要点:

利用构造方法建立cookie对象

设置Cookie有效时间(默认是-1,即一次会话有效)

指定Cookie适用的路径

用response发送cookie

用request接受cookie对象数组(硬盘上所有cookie)

判断cookie数组是否为null

cookie存在,再用遍历数组获取对应名称的cookie

使用获取的cookie的属性

 

jsp中使用实例:

设置cookie

 

检测cookie

 

 

过滤器与监听器

10 FilterListener

10.1 Filter

过滤器配置

特变主意:filter改变的是响应的编码

实例:实现编码过滤器

相关知识:

pageEncoding是jsp文件本身的编码
contentType的charset是指服务器发送给客户端时的内容编码
JSP要经过两次的“编码”,第一阶段会用pageEncoding,第二阶段会用utf-8至utf-8,第三阶段就是由Tomcat出来的网页,用的是contentType。

html响应编码

 

详细参考资料:http://www.cnblogs.com/kevin-yuan/archive/2011/12/31/2308479.html

 

web.xml配置

  
    encodingFilter
    filter.EncodingFilter
  
    encoding
    utf-8
  
   
  
    encodingFilter
    /*
  

 

EncodingFilter.jsp

package filter; 

import java.io.*; 
import javax.servlet.*; 

public class EncodingFilter implements Filter{ 
  String encoding=null; 
  FilterConfig filterConfig=null; 
  public void init(FilterConfig filterConfig) throws ServletException { 
    this.filterConfig=filterConfig; 
    this.encoding=filterConfig.getInitParameter("encoding"); 
  } 
  public void doFilter(ServletRequest request, ServletResponse response, 
      FilterChain chain) throws IOException, ServletException { 
    if(encoding!=null){ 
      request.setCharacterEncoding(encoding); 
    } 
    chain.doFilter(request, response); 
  } 
  public void destroy() { 
    this.encoding=null; 
    this.filterConfig=null; 
  } 

 

10.2 Listener

*********可以监听session、request、application相应对象的生命周期变化以及对象中属性的变化情况,并可以同时产生反应。在定义*********时只需要实现相应的*********接口就行了。例如:通过对会话的监听可以实现在线人数统计,具体实现看下面的代码。

web.xml配置

   
    listener.OnlineListener
   
 
     
   org.springframework.web.context.ContextLoaderListener
  
  

 

OnlineListener.jsp

package listener; 

import javax.servlet.http.HttpSessionAttributeListener; 
import javax.servlet.http.HttpSessionBindingEvent; 
import javax.servlet.http.HttpSessionEvent; 
import javax.servlet.http.HttpSessionListener; 

public class OnlineListener implements HttpSessionListener,HttpSessionAttributeListener{ 
  int onlineNo=0; 
  public void sessionCreated(HttpSessionEvent event) { 
     
  } 

  public void sessionDestroyed(HttpSessionEvent event) { 

  } 

  public void attributeAdded(HttpSessionBindingEvent event) { 
    System.out.print("a"); 
    event.getSession().getServletContext().setAttribute("online"new Integer((++onlineNo)/2)); 
  } 

  public void attributeRemoved(HttpSessionBindingEvent event) { 
    System.out.print("b"); 
    event.getSession().getServletContext().setAttribute("online"new Integer((--onlineNo)/2)); 
     
  } 

  public void attributeReplaced(HttpSessionBindingEvent arg0) { 
    // TODO Auto-generated method stub 
     
  } 

 

 

 

4 jsp空间部署war文件

打开myeclipse选中要打包的项目,点击file-export-(输入war)选择war-选择输出文件目录-完成
直接部署war文件到ROOT根目录即可
也可以先上传war,再解压到ROOT根目录下
(注意:srcjava文件必须已经编译,其class文件在WebRoot/WEB-INF/classes,这个文件在myeclipse界面看不到,需要打开文件夹) 

 

 

路径问题

在servlet中获取web项目的全路String path = getServletContext().getRealPath("/");  

在java类中获取web全路径 String path  = new File("").getAbsolutePath()+"\\"; 

 

6在Java中实现伪静态页面

Java中做这个事情好像有很多中方案,比较简单的方法是使用URLRewrite的方法,把静态地址翻译成动态地址内部使用,对客户端是透明的。

我们可以使用URLRewrite,官方网站:http://tuckey.org/urlrewrite/ 。官网有很简单的示例资料。

1)先下载urlrewritefilter.jar并导入。

2)然后配置过滤器:

UrlRewriteFilter

org.tuckey.web.filters.urlrewrite.UrlRewriteFilter

UrlRewriteFilter

/*

REQUEST

FORWARD

3)最后还需要在web-inf下新建一个urlrewrite.xml文件,并配置伪静态规则(静态转动态页面的规则)

        "http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">

/article/showBySort.jsp/([0-9]+)/([0-9]+).html

/article/showBySort.jsp?fid=$1&id=$2

注意点:此xml&需要使用&替换。这是sax解析造成的问题,原因是sax解析的类库在读取文件的时候是根据转义后的格式进行读取的,遇到"&"就认为是一个转义字符串,开始找结束符";",找不到自然就报错了。【&有自己的特殊含义,所以要寻找替代品】

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值