java web 与 JSP_Jsp与java web

本文详细介绍了Java Web与JSP的基础知识,包括jsp指令、内置对象、动作语法,以及session和cookie的使用。还讨论了过滤器和监听器在Java Web开发中的应用,并提供了war文件部署及路径处理的指导。通过实例展示了如何实现session管理、过滤器编码转换以及伪静态页面的Java实现。
摘要由CSDN通过智能技术生成

Jsp与java web

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 session和cookie

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

3 过滤器与监听器

10 Filter与Listener

10.1 Filter

过滤器配置

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

实例:实现编码过滤器

相关知识:

pageEncoding是jsp文件本身的编码

contentType的charset是指服务器发送给客户端时的内容编码

JSP要经过两次的“编码”,第一阶段会用pageEncoding,第二阶段会用utf-8至utf-8,第三阶段就是由Tomcat出来的网页,用的是contentType。

html响应编码

web.xml配置

encodingFilterfilter.EncodingFilterencodingutf-8encodingFilter/*

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.OnlineListenerorg.springframework.web.context.ContextLoaderListener

OnlineListener.jsp

packagelistener;importjavax.servlet.http.HttpSessionAttributeListener;importjavax.servlet.http.HttpSessionBindingEvent;importjavax.servlet.http.HttpSessionEvent;importjavax.servlet.http.HttpSessionListener;publicclassOnlineListenerimplementsHttpSessionListener,HttpSessionAttributeListener{intonlineNo=0;publicvoidsessionCreated(HttpSessionEvent event) {}publicvoidsessionDestroyed(HttpSessionEvent event) {}publicvoidattributeAdded(HttpSessionBindingEvent event) {System.out.print("a");event.getSession().getServletContext().setAttribute("online",newInteger((++onlineNo)/2));}publicvoidattributeRemoved(HttpSessionBindingEvent event) {System.out.print("b");event.getSession().getServletContext().setAttribute("online",newInteger((--onlineNo)/2));}publicvoidattributeReplaced(HttpSessionBindingEvent arg0) {// TODO Auto-generated method stub}}

4 jsp空间部署war文件

打开myeclipse选中要打包的项目,点击file-export-(输入war)选择war-选择输出文件目录-完成

直接部署war文件到ROOT根目录即可

也可以先上传war,再解压到ROOT根目录下

(注意:src中java文件必须已经编译,其class文件在WebRoot/WEB-INF/classes,这个文件在myeclipse界面看不到,需要打开文件夹)

5 路径问题

在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解析的类库在读取文件的时候是根据转义后的格式进行读取的,遇到"&"就认为是一个转义字符串,开始找结束符";",找不到自然就报错了。【&有自己的特殊含义,所以要寻找替代品】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值