JSP笔记

JSP笔记 JSP指令: <%@ page contentType="text/html; charset=GBK" %> //声明页面格式 <%@ page import=“java.util.*” language=“java” session=“true” %>//import类,设置session可用 <%@ include file = “relativeURL” %> //包含其他页面 JSP动作(Action) 1. jsp:include //JSP动作包含其他页面,类似JSP指令 2. jsp:useBean //装使并使用一个JavaBean(初始化一个Bean对象,命名为id指定的值) //如果系统有已经存在具有相同”id”和”scope”属性的Bean对象,则使用存在的Bean对象 //参数: id:Bean对象标识 class: Bean类全名 scope:Bean可访问范围,如想保存状态用session 3. jsp:setProperty 独立使用语法格式: //无论Bean对象是否初次使用, 都会被执行 嵌套语法格式: // 只会在Bean对象初始化时执行 //参数:name:Bean对象名必须在 之后 //property:Bean的属性名,当该属性为”*”值时,”request”对象中的所有与Bean属性同名的参数将赋值 //value:Bean的属性值 param:指定某一参数以设置Bean属性,如果”request”没有参数.则不运行 //例: 4. jsp:getProperty 语法格式: //用于获取Bean的属性值,显示在页面中 //JavaBean格式 public class JspBean1{ private String sample = “Start value”; public String getSample(){ //读属性sample return sample; } public void setSample(String newValue){ //写属性sample if(newValue != null) sample = newValue; } } 5: jsp:forward 语法格式: 或 //用于将用户请求传递到下一个页面 6. jsp:plugin 语法格式: //常用入插入Applet小程序 JSP内置对象 1. request Servlet中的”HttpServletRequest” 常用方法: getParameter(String name): //获得客户端传来的参数值 getCookies()://获得客户端Cookie数组 getHeader(String name): //获得HTTP协议定义消息的首部信息 getAttbute(String name): //返回name指定属性的值 2. response Servlet中的”HttpServletResponse” addCookie(Cookie cookie): //添加一个Cookie对象 addHeader(String name,String value): //添加HTTP文件头 containsHeader(String name): //判定指定名字的HTTP消息是否存在 sendError(int sc): //向客户端正发送错误信息,例如:505 ,404 setHeader(String name,String value): //设定指定名字的HTTP消息首部值 3. out Servlet中的”PrintWrite” println(String strMessage): //输出 newLine()://将输入一个换行符号 flush()://输出缓冲区里的数据 close()://关闭输出流 clearBuffer()://清除缓冲区的数据,并把数据写到客户端 clear()://清除缓冲区数据,但不把数据写到客户端去 getBufferSize()://获得缓冲区的大小,由<%@ page buffer=”size”%>设置 getRemaing()://获得缓冲区没有使用空间大小 isAutoFlush();//返回boolean 由<%@ page AutoFlush=”size”%>设置 4. session session对象是HttpSession对象 getAttribute(String name): //获得名为name的属性值 getAttributeNames()://返回对象中存储每一个属性对象 getCreationTime()://返回session对象创建时间,以毫秒计算 getId()://session的ID getLastAccessedTime()://返回当前session对象最后一次访问时间 getMaxInactiveInterval()://获取session对象生存时间 removeAttribute(String name): //删除指定属性 setAttribute(String name,value): //设定指定属性的属性值,存储在seesion中 5. application getAttribute(String name): //返回由name指定名字的Application对象属性的值 getAttributeNames()://返回所有Application对象属性的名字 getInitParameter(String name): //返回某个属性的初始值 getAttibute(String name,Object object): //获取Application对象属性名为name的值 getServetContext().setAttrubute(“item”,itemObject): //设置Application对象属性名的为item的值 6. exception getMessage()://返回错误信息 printStackTrace()://以标准错误的形式输出错误和错误的堆栈 toString()://以字符串形式返回 使用JSP大约有下列三种跳转方式: 1. response.sendRedirect(); 2. response.setHeader("Location",""); 3. 经过试验得到下面的一些规则: 一. response.sendRedirect() 此语句前不允许有out.flush(),如果有,会有异常: java.lang.IllegalStateException: Can't sendRedirect() after data has committed to the client. at com.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpResponse.java:558) ... 跳转后浏览器地址栏变化 如果要跳到不同主机下,跳转后,此语句后面的语句会继续执行,如同新开了线程,但是对response的操作已经无意义了; 如果要跳到相同主机下,此语句后面的语句执行完成后才会跳转; 二. response.setHeader("Location","") 此语句前不允许有out.flush(),如果有,页面不会跳转。 跳转后浏览器地址栏变化 此语句后面的语句执行完成后才会跳转 三. 此语句前不允许有out.flush(),如果有,会有异常: java.lang.IllegalStateException: forward() not allowed after buffer has committed. at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:134) at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:101) at com.caucho.jsp.PageContextImpl.forward(PageContextImpl.java:836) ... 跳转后浏览器地址栏不变,但是只能跳到当前主机下 此语句后面的语句执行完成后才会跳转 JSP中文乱码问题 第一篇文章: 1、我们要保证JSP向客户端输出时是采用中文编码方式输出的,即无论如何我们首先在我们的JSP源代编中加入以下一行: <%@page contentType="text/html; charset=gb2312"%> 2、为了让JSP能正确获得传入的参数,我们在JSP源文件头加入下面一句: <%request.setCharacterEncoding("GB2312");%> 3、为了让JSP编译器能正确地解码我们的含有中文字符的JSP文件,我们需要在JSP源文件中指定我们的JSP源文件的编码格式,具体来说,我们在JSP源文件头上加入下面的一句即可: <%@page pageEncoding="GB2312"%> 或 <%@page pageEncoding="GBK"%> servlet接受表单数据的中文问题: String name = request.getParameter("name"); name = new String(name.getBytes("iso8859_1")); //或 name = new String(name.getBytes("gb2312"),"ISO-8859-1"); 第二篇: 在使用JSP的过程中,最使人头疼的一个问题就是中文乱码问题,以下是我在软件开发中遇到的乱码问题以及解决方法。 1、JSP页面乱码   这种乱码的原因是应为没有在页面里指定使用的字符集编码,解决方法:只要在页面开始地方用下面代码指定字符集编码即可, 2、数据库乱码   这种乱码会使你插入数据库的中文变成乱码,或者读出显示时也是乱码,解决方法如下:   在数据库连接字符串中加入编码字符集 String Url="jdbc:sql&ct=0' target=_blank>mysql://localhost/digitgulf?user=root& password=root&useUnicode=true&characterEncoding=GB2312";   并在页面中使用如下代码:   response.setContentType("text/html;charset=gb2312");   request.setCharacterEncoding("gb2312"); 3、中文作为参数传递乱码   当我们把一段中文字符作为参数传递个另一页面时,也会出现乱码情况,解决方法如下:   在参数传递时对参数编码,比如   RearshRes.jsp?keywords=" + java.net.URLEncoder.encode(keywords)   然后在接收参数页面使用如下语句接收   keywords=new String(request.getParameter("keywords").getBytes("8859_1")); 4、JSP页面乱码加这句 <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="err.jsp" %> 笔记: POST 接收页面 <%@page contentType="text/html; charset=gb2312"%> <%@page pageEncoding="GB2312"%> <%request.setCharacterEncoding("GB2312");%> POST发送页面 <%@page contentType="text/html; charset=gb2312"%> <%@page pageEncoding="GB2312"%> GET和sendRedirect方法 GET接收页面 msg = URLDecoder.decode(request.getParameter("msg")); sendRedirect页面 response.sendRedirect("error.jsp?msg="+java.net.URLEncoder.encode("提交不成功,请检查条件","utf-8")); 成功测试的一种方法: <%@page contentType="text/html; charset=GBK"%> <%@page pageEncoding="GBK"%> <% String msg = request.getParameter("msg"); if( msg == null) response.sendRedirect("member.jsp?msg="+java.net.URLEncoder.encode("提交不成功,请检查条件"," GBK ")); %> <%= msg%> Struts中文乱码 在学习struts中,遇到了中文乱码问题,网上搜索了一些资料,解决了问题 使用get方法时:需要修改 $TOMCAT/conf/server.xml部署文件,在Connector属性中添加URIEncoding="GBK"即可 使用post方法时,有2种方法可选 1) 覆写ActionServlet的process方法,添加request.setEncoding("GBK"); 2) 添加一个过滤器SetCharacterEncodingFilter类,此类可以在 $TOMCAT/webapps/servlets-examples/WEB-INF/classes/filters找到,不过方便起见,自己加了点东西,源码如下: public class SetCharacterEncodingFilter implements Filter { private FilterConfig filterConfig; public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { // TODO Auto-generated method stub try{ request.setCharacterEncoding("GB2312"); HttpServletResponse res = (HttpServletResponse)response; res.setHeader("Pragma", "No-cache"); res.setHeader("Cache-Control", "no-cache"); res.setHeader("Pragram", "no-cache"); filterChain.doFilter(request, response); }catch(ServletException e) { filterConfig.getServletContext().log(e.getMessage()); }catch(IOException e) { filterConfig.getServletContext().log(e.getMessage()); } } public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub this.filterConfig = filterConfig; } } 在web.xml中部署这个过滤器 servfilter com.yourcompany.struts.SetCharacterEncodingFilter servfilter /*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值