java复习之 JSP

B/S结构:浏览器端与服务器端采用请求/响应模式进行交互。

URL:Uniform Resource  Locator,统一资源定位符 ,URL是唯一能识别Internet上集体的计算机、目录或文件夹位置的命名约定。

URL的组成

第一部分:协议

第二部分:主机IP地址

第三部分:项目资源地址,如目录和文件名


通过配置文件修改Tomcat端口号(默认是8080),打开Tomcat安装目录下的conf文件下的 server.xml文件修改端口号<Connector port="8080"


jsp页面元素包括:静态元素(HTML静态文件),指令(<%@ include file="Filename"%>),表达式(<%=java表达式%>),小脚本(<%java代码%>),声明(<%!方法%>),注释(<!---注释1,客户端可以看到-->,<%---注释2,客户端看不到-->)


page指令,通过设置内部多个属性来定义整个页面的属性,语法:<%@ page属性1=“属性值”>,常见的有language 默认java,import通过该属性来引用脚本语言中使用到的文件, contentType,用来指定JSP页面采用的编码方式,默认是ISO-8859-1,html/text


JSP常用的内置对象:内置对象不能在申明<%!方法%>中使用,request,response, pageContext,session,application,out,page,config.


作用范围

(1)page范围(pageContext):一页中有效,跳转即无效。

(2)request范围:服务器跳转有效,客户端跳转无效。

(3)session范围:跳转有效,新开浏览器无效。

(4)application范围:所有用户有效,重启服务器无效。

这四个对象有3个方法

(1) void setAttribute(String key,Object o);    //设置属性

(2) Object getAttribute(String key);      //取得后要向下转型。

(3) void removeAttribute(String key);   //删除属性

注意:在getAttribute之后一定要转型!

举例:

pageContext.setAttribute("name","xiazdong");    //只能在单个页面中进行保存

String name = (String)pageContext.getAttribute("name");      //换了一个页面后就无法取得

注意:尽可能在满足功能的前提下,将属性设置的保存范围尽可能的小。这样能够提高性能;


request对象

注意,request.getSession()可以获得session对象。

request对象是接收客户端发来的信息,而客户端发来了头信息、内容、传递方式、cookie。

常用方法:

1、request.getParameter(String name):取得name元素的值。  取得来源:(1)地址重写(2)表单提交

2、Enumeration enu = request.getParemeterNames(),取得全部的参数的名称,通过迭代器遍历。补充:Enumeration的用法:enu.hasMoreElements();enu.nextElement();

3、String[ ] str = request.getParameterValues(String name);用于取得比如checkbox的多项选择。

4、Enumeration enu = request.getHeadersNames(); 获得全部头信息的名字。

5、String str = request.getHeadersNames(String name);获得名字为name的头信息的内容

6、String str = request.getMethod();获得的是get或者是post

7、request.setCharacterEncoding(String ):统一request的编码。 比如服务器的JSP页面设置为GBK,而浏览器为UTF-8,则会出现编码不匹配问题。

8、request.isUserInRole(String name);用于用户验证角色

9、Cookie[] c = request.getCookies():获得全部的cookie。


response对象

一、常用的方法:

1、addcookie(cookie),添加cookie

2、setHeader(String name,String value)设置头信息

3、sendRedirect();重定向,类似于客户端跳转

4、getOutputStream();输出流

eg:

1、定时刷新:response.setHeader("refesh","2");2秒刷新

2、定时跳转:response.setHeader("refesh","2;URL = hello.jsp");2秒后跳转到hello.jsp。住:此为客户端跳转

3、客户端跳转:response.sendRedirect("hello.jsp");

注意:以上(2)用法可能会失败,原因是用户在2秒内刷新了页面,导致refresh失效;

应用:

实现用户登录后的“3秒后跳转,如果没有跳转请点击 这里”;


服务器跳转和客户端跳转的区别

服务器端跳转是立刻跳转,即页面执行到跳转语句后就不执行后面的语句;

客户端跳转是执行完整个页面后才跳转。


二、操作cookie:

将用户的信息保存为一个cookie,存储在客户端,每次request时,都会把cookie发送到服务器端。

常用方法:

1、Cookie c = new Cookie("name","value");创建一个新cookie。

2、c.setMaxAge(int seconds);设置cookie最长寿命,因为原本cookie保存在浏览器中,如果浏览器关闭,cookie丢失。

3、c.getName();获得名字

4、c.getValue(0;获得值

Cookie[] c = requset.getCookies();获得cookie


session对象

session常见用法:

1、getsession().getId() 与 getRequestSessionId()的区别

2、session.setAttribute("",""):设置属性。

3、session.getCreationTime():获得创建时间。

4、session.getLastAccessedTime():获得最后访问时间。

5、session.isNew():这个session是否是新的,即判断session id。

6、session.invalidate():把session的属性设置全部清空。

登录-注销页面:

(1)使用session.setAttribute()注册。

(2)使用session.getAttribute()判断是否已经注册。

(3)使用session.invalidate(); 注销;

如果想要保存session id,则需要进行持久化操作,具体请见:http://blog.csdn.net/xiazdong/article/details/6894945



application对象

常用方法:

(1)getRealPath(path):获得真实路径。

(2)getContextPath():获得虚拟路径。

(3)getInitParameter(String );我们可以在web.xml中添加初始化参数:


  1. <context-param>  
  2.     <param-name></param-name>  
  3.     <param-value></param-value>  
  4. </context-param>
application==this.getServletContext()


config对象

先从配置文件谈起,在每个web应用中,都有一个WEB-INF文件夹,这个文件夹是很安全的,不会被其他人看到,因为不能直接访问,除非通过映射关系访问;

如果将一个hello.jsp文件放到WEB-INF中,如果能够让其能够被访问。

答案就是在WEB-INF/web.xml设置即可,内容如下:

<servlet>

    <servlet-name>he</servlet-name>

    <jsp-file>/WEB-INF/hello.jsp</jsp-file>

</servlet>

<servlet-mapping>

    <servlet-name>he</servlet-name>

    <url-pattern>hello</url-pattern>

</sevlet-mapping>

重启服务器后,则在地址栏输入http://localhost:8080/test/hello即可。

config常用方法:

(1)getInitParameterNames();

(2)getInitParameter(String name);

什么是初始化参数呢?

初始化参数在web.xml中进行配置,形式如下:

<servlet>

<init-param>

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

    <param-value>value</param-value>

</init-param>

</servlet>


pageContext对象

表示JSP上下文,可以通过这个实例,取得request\response\session\<jsp:forward>等。

(1)pageContext.forward(String);

(2)pageContext.include(String);

(3)pageContext.getServletConfig();

(4)pageContext.getServletContext();

(5)pageContext.getRequest();

(6)pageContext.geResponse();

(7)pageContext.getSession();

也就是说,只要有了pageContext对象,就能完成一切内置对象的功能;

补充:pageConext设置任意范围的属性(很少使用)


使用函数:pageConext.setAttribute("name","value",int SCOPE);

1.设置page范围

pageConext.setAttribute("name","xiazdong",PageConext.PAGE_SCOPE);

2.设置request范围

pageConext.setAttribute("name","xiazdong",PageConext.REQUEST_SCOPE);

3.设置session范围

pageConext.setAttribute("name","xiazdong",PageConext.SESSION_SCOPE);

4.设置application范围

pageConext.setAttribute("name","xiazdong",PageConext.APPLICATION_SCOPE);


因此,只需要PageContext就能完成全部内置对象的操作;



十、exception对象


只有当isErrorPage="true"时才能使用。
常用方法:
(1)getMessage();


十一、out对象


javax.servlet.jsp.JspWriter

一般用于输出字符流,即文本流,但是如果需要传递图片等信息,则需要通过response传递;

[java]  view plain  copy
  1. public void _jspService(final HttpServletRequest request, final HttpServletResponse response)//创建request、response  
  2.         throws java.io.IOException, ServletException {  
  3.   
  4.     final PageContext pageContext;  
  5.     HttpSession session = null;  
  6.     final ServletContext application;  
  7.     final ServletConfig config;  
  8.     JspWriter out = null;  
  9.     final Object page = this;  
  10.     JspWriter _jspx_out = null;  
  11.     PageContext _jspx_page_context = null;  
  12.   
  13.   
  14.     try {  
  15.       response.setContentType("text/html;charset=utf-8");  
  16.       pageContext = _jspxFactory.getPageContext(this, request, response,    //创建pageContext  
  17.                 nulltrue8192true);  
  18.       _jspx_page_context = pageContext;  
  19.       application = pageContext.getServletContext();     //创建application 即ServletContext  
  20.       config = pageContext.getServletConfig();         //创建config  
  21.       session = pageContext.getSession();                //创建session  
  22.       out = pageContext.getOut();                       //创建out  
  23.       _jspx_out = out;  


总结:在JSP页面中如果想要输出,则使用out.println();进行输出!



 

补充:禁用脚本和禁用EL

 

1.禁用脚本

 

在web.xml中配置如下模板:

[html]  view plain  copy
  1. <jsp-config>  
  2.     <jsp-property-group>  
  3.         <url-pattern>*.jsp</url-pattern>  
  4.         <scripting-invalid>true</scripting-invalid>       
  5.     </jsp-property-group>  
  6.  </jsp-config>  


就能够对所有的JSP禁用脚本。

 

效果:如果禁用Scriptlet,则出现:“org.apache.jasper.JasperException”;

 

2.禁用EL

在web.xml中配置如下模板:

[html]  view plain  copy
  1. <jsp-config>  
  2.     <jsp-property-group>  
  3.         <url-pattern>*.jsp</url-pattern>  
  4.         <el-ignored>true</el-ignored>  
  5.           
  6.     </jsp-property-group>  
  7.  </jsp-config>  


 

或者在jsp的page指令中isELIgnored="true";

如果两个配置相互矛盾,则JSP的page指令优先;

 

效果:如果禁用EL后,继续使用EL,则会当做普通文本,即如果${requestScope.aaa}则输出:“${requestScope.aaa}”



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值