首页 > 编程 > JSP > 正文

jsp和编码

2019-11-08 18:46:00
字体:
来源:转载
供稿:网友

jsp生成页面

 访问xxxx/xxx/hello.jsp?name=tom。

1.查找jsp对应的servlet存在,就直接访问。

2.不存在,就解析jsp,翻译成servlet源文件,编译成servlet类,初始化运行。

只有第一次访问,或者修改jsp或者编译后的servlet文件删除了才会重新解析编译。

Jsp语法

Jsp指令

     Jsp使用<%@  指令名  属性=“值”%>一般常用page,include,taglib。

1.Page指令

page指令用来指定使用的编程语言,导入的软件包等等。

<%@ page 属性1=“值1” 属性2=“值2”%>

2.include指令

       用来包含其他文件内容,可以是jsp或html文件。静态包含。

<%@ include file="xxx.jsp"%>

Jsp声明

<%! int a=10;int b=20;%>java程序片段

<% int a=10;if(a==10){%>a is 10.<%}else{%>a is not 10<%}%>Java表达式

<%=request.getParameter("name");%>
<%--   注释   --%>隐含对象

          jsp可以使用固定的变量来访问隐含对象。

请求转发跟servlet一样

<jsp:forward page="转发的url">          在这句话前后的显示代码都没用(比如<p>hello world</p>)。跟servlet一样,当前的响应结果是没有用的,只有转发到一个地址后的响应结果有用。

         转发后的jsp里面可以使用request和response。因为转发共用HttpServletRequest和HttpServletResponse。

<jsp:forwars page=""> <jsp:param name="" value=""/>//添加参数在<jsp:include>中也可以使用<jsp:param name="" value=""/></jsp:forward>

包含

<jsp:include page="">//跟include指令一样都可以包含文件,但是指令是静态包含,这个是动态包含静态包含:就是解析的时候把代码和jsp文件一起解析,然后编译,加载。

非首次访问,没更新就不重新解析。静态包含更新了,有些容器(tomcat)会监测更新然后重新解析编译。有些不会,只能删除jsp生成的servlet文件和类文件,然容器重新解析。jsp更新了,应该重新解析。

动态包含:运行jsp时解析包含的文件。

flush属性:true指在包含之前jsp就把响应结果发给客户。默认为false。

一般不会变的内容用静态包含,会变的内容用动态包含。

使用servlet或jsp要在web.xml中配置

     <servlet>       <!-- 声明Servlet对象 -->       <servlet-name>FirstServlet</servlet-name>       <!-- 上面一句指定Servlet对象的名称 -->       <servlet-class>com.ningmeng.FirstServlet</servlet-class>或者使用<jsp-file>/xxx.jsp</jsp-file>用jsp来当servlet       <!-- 上面一句指定Servlet对象的完整位置,包含包名和类名 -->   </servlet>   <servlet-mapping>       <!-- 映射Servlet -->       <servlet-name>FirstServlet</servlet-name>      <!--<servlet-name>与上面<Servlet>标签的<servlet-name>元素相对应,不可以随便起名  -->      <url-pattern>/FirsetServlet</url-pattern>       <!-- 上面一句话用于映射访问URL -->   </servlet-mapping>Jsp预编译

        第一次访问可能会等待很长一段时间,所以可以进行预编译。

..../hello.jsp?jsp_PRecompile=true就会生成class文件,删除hello.jsp,在web.xml中配置路径为生成的class文件。

作用:

1.提高了响应速度。2.应用发布后,可以防止他人修改jsp文件或者查看。因为jsp文件删除了。

PageContext

使用场合:jsp文件java程序片段中;jsp文件自定义标签的处理类。

用法:

1.向各种范围存取属性。

2.得到其他对象的引用方法。

3.用于请求转发和包含的方法。

1.存取属性值。

getAttribute(String name);getAttribute(string name , int scope);在scope中取值setAttribute(String name , Object value, int scope);在scope中设置值removeAttribute(string name , int scope);移除scope中的值findAttribute(String name);依次从小到大的范围查找,找到马上返回。否则为null。int getAttributeScope(String name);返回属性范围,没有返回0
PageContext.PAGE_SCOPE取值为1,页面范围//scope属性PageContext.REQUEST_SCOPE取值为2,请求范围PageContext.session_SCOPE取值为3,会话范围PageContext.application_SCOPE取值为4,应用范围2.得到其他对象的引用

getPage();getSession();getRequest();getResponse();getServletConfig();getServletContext();getOut()自定义标签处理类中不能使用servletContext,request,response,可以使用pageContext来得到。

3.请求转发和包含

forward(String url),include(String url);

因为自定义标签中无法使用<jsp:forward>和<jsp:include>.所以使用pageContext来实现。

编码

                request.setCharacterEncoding("utf-8");//对post有用,因为post数据在request域中.对get没用,因为数据在header中		String a = request.getParameter("name");				String b= request.getParameter("value");//post和get都可以用。		String c = new String(b.getBytes("ISO-8859-1"),"UTF-8");//一般浏览器请求的都是iso-8859-1编码。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表