jsp是一种基于文本的程序,全名java server page,其特点是html和java程序共存。
实行时jsp会被运行容器编译,编译后的jsp跟servlet一样,因此jsp是另一种形式的servlet。

二、jsp页面组成

jsp 页面包括以下内容:

sevlet获取jsp中乱码java jsp 详解 Python

静态内容指令表达式小脚本声明注释

1.指令:

page指令: 常日位于jsp页面的顶端,同一个页面可以有多个page指令。
include指令:将一个外部文件嵌入到jsp文件中。
taglib指令 :利用标签定义新的自定义标签。

1.1个中page指令语法:

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

属性 | 默认值

——— | ——— language | java import | “”

1.2 include 指令

<%@ include file=\"大众url\公众 %>

1.3 动作

include动作

<jsp:include page=\公众url\"大众 flush=\公众true\"大众/>

include 动作和include指令差异

描述include指令include 动作语法< % @ include file=””/>< jsp:include page=”url” flush=”true”/>发生韶光页面转换期间要求期间包含内容文件实际内容页面的输出转化servlet一个servlet2个servlet编译韶光较慢较快实行韶光稍快较慢–每次资源必须被编译

forward动作

<jsp:forward page=\"大众url\"大众/> == request.getRequestDispatcher(\"大众/url\"大众).forward(res,resp);

param动作

<jsp:param name=\公众参数名\"大众 value=\"大众参数值\"大众/> 常常与<jsp:forward>一起利用

例子:

<jsp:forward page=\"大众user.jsp\"大众> <jsp:param name=\"大众email\公众 value=\公众1233@154.com\"大众/> </jsp:forward>

2.jsp注释

html注释

<!-- html注释 -->//客户端可见jsp 注释

<%-- jsp注释 --%>//客户端不可见jsp 脚本注释 //客户端不可见

//单行注射 / 多行注释/

3.jsp脚本

在jsp页面中实行的java代码,语法:

<% java 代码 %>

4.jsp声明 在jsp页面定义变量或者方法,语法

<%! java 代码 %>

举例:

<%!

String s=\公众adele\"大众;

int add(int x,int y){

return x+y;

}

%>

5.jsp表达式 在jsp页面实行的表达式,语法:

<% =表达式 %>// 表达式不以分号结尾

举例:

<%!

String s=\"大众adele\公众;

%>

<h2> hello,<%=s %> </h2>

三、jsp生命周期

jspService()是用来处理客户端要求的,对付每一个要求,做事器会创建一个新的线程来处理该要求。
以多线程办法实行大大降落对系统的资源需求,提高系统的并发量和缩短了相应韶光,servlet是常驻在做事器内存中。

它同servlet 一样,jsp 实例初始化和销毁也会调用sevlet的init() 和destroy(); 其余jsp还有自己的初始化方法_jspInit();_jspDestroy();

<%@ page language=\"大众java\"大众 contentType=\公众text/html\"大众;charset=\"大众utf-8\"大众><%! public void _jspInit(){}public void _jspDestroy(){}%>

四、javaben的利用

动作元素: 动作元素为要求处理阶段供应信息。

在jsp页面利用javaben

像普通的java类一样,创建javabean;在jsp利用动作标签来利用 javaben

干系标签如下:

<jsp:useBwan id=\公众\"大众 class=\"大众\"大众 scope=\"大众\"大众 /><jsp:setProperty name=\"大众javabean 是例\"大众 property=\"大众\公众/>(跟表单关联)<jsp:setProperty name=\"大众javabean 是例\公众 property=\"大众javaben 属性名\"大众/>(跟表单关联)<jsp:setProperty name=\"大众javabean 是例\"大众 property=\"大众javaben 属性名\"大众 value=\"大众\"大众/>(手动设置)<jsp:setProperty name=\"大众javabean 是例\"大众 property=\"大众javaben 属性名\"大众 param=\公众request工具参数\"大众/>(跟request参数关联)<jsp:getProperty name=\"大众\"大众 property=\"大众\"大众/>

举个例子: 首先用户 在login.jsp提交表单,然后用户在dologin.jsp 根据动作标签获取参数。

login.jsp

<form name=\"大众loginForm\"大众 action=\"大众dologin.jsp?mypass=999999\公众 method=\公众post\"大众> <table> <tr> <td>用户名:</td> <td><input type=\"大众text\"大众 name=\公众username\公众 value=\"大众\"大众/></td> </tr> <tr> <td>密码:</td> <td><input type=\"大众password\公众 name=\"大众password\"大众 value=\"大众\"大众/></td> </tr> <tr> <td colspan=\"大众2\公众 align=\公众center\"大众><input type=\公众submit\"大众 value=\"大众登录\"大众/></td> </tr> </table> </form>

dologin.jsp

<body> <jsp:useBean id=\公众myUsers\"大众 class=\公众com.po.Users\公众 scope=\"大众page\公众/> <h1>setProperty动作元素</h1> <hr> <!--根据表单自动匹配所有的属性 --> <%-- <jsp:setProperty name=\"大众myUsers\公众 property=\"大众\"大众/> --%> <!--根据表单匹配所有部分的属性 --> <%-- <jsp:setProperty name=\公众myUsers\公众 property=\"大众username\"大众/> --%> <!--根表单无关,通过手工赋值给属性 --> <%-- <jsp:setProperty name=\"大众myUsers\公众 property=\"大众username\"大众 value=\公众lisi\"大众/> <jsp:setProperty name=\公众myUsers\"大众 property=\"大众password\"大众 value=\公众888888\公众/> --%> <!--通过URL传参数给属性赋值 --> <jsp:setProperty name=\公众myUsers\"大众 property=\公众username\"大众/> <jsp:setProperty name=\"大众myUsers\公众 property=\"大众password\"大众 param=\公众mypass\"大众/> <!-- 利用传统的表达式办法来获取用户名和密码 --> <%-- 用户名:<%=myUsers.getUsername() %><br> 密码:<%=myUsers.getPassword() %><br> --%> <!-- 利用getProperty办法来获取用户名和密码 --> 用户名:<jsp:getProperty name=\"大众myUsers\公众 property=\公众username\公众/> <br> 密码:<jsp:getProperty name=\"大众myUsers\"大众 property=\"大众password\"大众/><br> <br> <br> <a href=\"大众testScope.jsp\"大众>测试javabean的四个浸染域范围</a> <% request.getRequestDispatcher(\"大众testScope.jsp\公众).forward(request, response); %> </body>

javaben 四大浸染域

page ,仅当前页面有效request ,通过httpRequest.getAttribute()获取jvabean工具session ,通过httpSession.getAttribute() 获取javabean工具application,通过application.getAttribute方法获取javabean 工具。

五、cookie

1.概述:

由于http协议的无状态,无法保存用户的状态,以是须要用session和cookie.

cookie 是web做事器保存在客户真个一系列文本信息。
它的浸染时记录一些用户的行为,简化上岸,但是随意马虎透露用户信息。

2.jsp创建和利用cookie

创建cookie

Cookie cookie=new Cookie(String ,Object);写入cookie

response.addCookie(cookie);读取 cookie

Cookie[] cookies=request.getCookies();

3.cookie的常用方法

setMaxAge();setValue();getName();getValue();getMaxAge();

举个列子: 利用cookie记住用户上岸的账号密码;

上岸界面:

<body> <h1>用户登录</h1> <hr> <% request.setCharacterEncoding(\"大众utf-8\"大众); String username=\公众\公众; String password = \"大众\"大众; Cookie[] cookies = request.getCookies(); if(cookies!=null&&cookies.length>0) { for(Cookie c:cookies) { if(c.getName().equals(\"大众username\"大众)) { username = URLDecoder.decode(c.getValue(),\公众utf-8\公众); } if(c.getName().equals(\公众password\公众)) { password = URLDecoder.decode(c.getValue(),\"大众utf-8\"大众); } } } %> <form name=\"大众loginForm\"大众 action=\"大众dologin.jsp\"大众 method=\"大众post\"大众> <table> <tr> <td>用户名:</td> <td><input type=\公众text\"大众 name=\"大众username\"大众 value=\"大众<%=username %>\"大众/></td> </tr> <tr> <td>密码:</td> <td><input type=\公众password\"大众 name=\公众password\公众 value=\"大众<%=password %>\"大众 /></td> </tr> <tr> <td colspan=\"大众2\"大众><input type=\"大众checkbox\"大众 name=\公众isUseCookie\"大众 checked=\"大众checked\"大众/>十天内记住我的登录状态</td> </tr> <tr> <td colspan=\"大众2\公众 align=\公众center\"大众><input type=\公众submit\"大众 value=\公众登录\"大众/><input type=\"大众reset\"大众 value=\公众取消\"大众/></td> </tr> </table> </form> </body>

处理上岸逻辑的jsp

<body>

<h1>登录成功</h1>

<hr>

<br>

<br>

<br>

<%

request.setCharacterEncoding(\"大众utf-8\公众);

//首先判断用户是否选择了记住登录状态

String[] isUseCookies = request.getParameterValues(\公众isUseCookie\"大众);

if(isUseCookies!=null&&isUseCookies.length>0)

{

//把用户名和密码保存在Cookie工具里面

String username = URLEncoder.encode(request.getParameter(\"大众username\"大众),\公众utf-8\公众);

//利用URLEncoder办理无法在Cookie当中保存中笔墨符串问题

String password = URLEncoder.encode(request.getParameter(\"大众password\"大众),\"大众utf-8\"大众);

Cookie usernameCookie = new Cookie(\"大众username\"大众,username);

Cookie passwordCookie = new Cookie(\公众password\公众,password);

usernameCookie.setMaxAge(864000);

passwordCookie.setMaxAge(864000);//设置最大生存期限为10天

response.addCookie(usernameCookie);

response.addCookie(passwordCookie);

}

else

{

Cookie[] cookies = request.getCookies();

if(cookies!=null&&cookies.length>0)

{

for(Cookie c:cookies)

{

if(c.getName().equals(\"大众username\"大众)||c.getName().equals(\公众password\"大众))

{

c.setMaxAge(0); //设置Cookie失落效

response.addCookie(c); //重新保存。

}

}

}

}

%>

<a href=\"大众users.jsp\公众 target=\"大众_blank\"大众>查看用户信息</a>

</body>

利用cookie获取用户信息:

<body> <h1>用户信息</h1> <hr> <% request.setCharacterEncoding(\公众utf-8\"大众); String username=\"大众\"大众; String password = \"大众\公众; Cookie[] cookies = request.getCookies(); if(cookies!=null&&cookies.length>0) { for(Cookie c:cookies) { if(c.getName().equals(\公众username\公众)) { username = URLDecoder.decode(c.getValue(),\"大众utf-8\公众); } if(c.getName().equals(\"大众password\公众)) { password = URLDecoder.decode(c.getValue(),\"大众utf-8\"大众); } } } %> <BR> <BR> <BR> 用户名:<%=username %><br> 密码:<%=password %><br> </body>

3.cookie和 session的差异

sessioncookie在做事端保存信息在客户端保存信息保存的 object类型保存的是 string 类型随会话结束,销毁数据可以长期保存在客户端中主要信息不主要信息