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中添加初始化参数:
- <context-param>
- <param-name></param-name>
- <param-value></param-value>
- </context-param>
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>
</servlet></init-param>
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);
pageConext.setAttribute("name","xiazdong",PageConext.APPLICATION_SCOPE);
因此,只需要PageContext就能完成全部内置对象的操作;
十、exception对象
十一、out对象
总结:在JSP页面中如果想要输出,则使用out.println();进行输出!
补充:禁用脚本和禁用EL
1.禁用脚本
在web.xml中配置如下模板:
就能够对所有的JSP禁用脚本。
效果:如果禁用Scriptlet,则出现:“org.apache.jasper.JasperException”;
2.禁用EL
在web.xml中配置如下模板:
或者在jsp的page指令中isELIgnored="true";
如果两个配置相互矛盾,则JSP的page指令优先;
效果:如果禁用EL后,继续使用EL,则会当做普通文本,即如果${requestScope.aaa}则输出:“${requestScope.aaa}”