JSP六大组成部分:
标志 | 名称 | 作用 |
---|---|---|
1、html | 静态页面 | 页面显示和展示数据 |
2、<%%> | 小脚本 | 编辑Java代码 |
3、<%@%> | 指令 | 指定JSP的内容、格式、字符集编码或者导包 |
4、< %=%> | 表达式 | 展示数据/输出数据 |
5、< !-- --> | HTML注释 | 注释(后台可见) |
< %-- --%> | JSP注释 | 注释 |
6、< %!%> | 声明 | 声明仅能在当前页使用的数据 |
九大内置对象
- 请求对象:request
- 输出对象:out
- 响应对象:response
- 应用程序对象:application
- 会话对象:session
- 页面上下文对象:pageContext
- 页面对象:page
- 配置对象:config
- 异常对象:exception
请求对象:request
- public String getParameter(String name)
示例
- HTML代码:
<input type ="text" name ="userName"> - JSP代码:
String userName=request.getParameter("userName");
request常用方法
方法名称 | 说名 |
---|---|
String getParameter(String name) | 根据表单组件名称获取提交数据 |
String[] getParameterValues(String name) | 获取表单组件对应多个应用值时的请求数据 |
void serCharacterEncoding(String charset) | 指定每个请求的编码 |
RequestDispatcher getRequestDispatcher(String path) | 返回一个RequestDispatcher对象,该对象的forward()方法用于转发请求 |
获取同名的多个参数(复选框)
<h1>这是处理注册的页面,注册提交的数据将发送至这里</h1>
<%
//乱码处理(post)
request.setCharacterEncoding("utf-8");//post中文乱码
response.setCharacterEncoding("utf-8");
//接收用户
String userName = request.getParameter("userName");
//get乱码处理
/* byte[] userNames = userName.getBytes("ISO-8859-1");
userName = new String(userNames,"utf-8"); */
// userName = new String(userName.getBytes("ISO-8859-1"),"utf-8");
//接收密码
String userPass = request.getParameter("userPass");
//接收兴趣爱好-----数组形式----多个值
String[] hobbys = request.getParameterValues("hobby");//复选框获取值
//out.println("注册成功!注册的用户名是:"+userName+"密码是:"+userPass);
%>
用户名:<%
if(userName != null && !userName.equals("")){
%>
<%=userName %>
<%
}else{
out.println("用户未填写!");
}
%>
密码:<%=userPass %>
爱好:<br/>
<%
if(hobbys !=null){
for(String hobby : hobbys){
out.println(hobby+"<br/>");
}
}else{
out.println("你没有任何选择!");
}
%>
get与post区别:
中文乱码处理
表单post方式提交,中文乱码
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");(可以不加)
表单get方式提交,中文乱码
/* byte[] userNames = userName.getBytes("ISO-8859-1");
userName = new String(userNames,"utf-8"); */
userName = new String(userName.getBytes("ISO-8859-1"),"utf-8");(治标不治本)
-
治本的方法:
配置Tomcat\conf\server.xml文件
在请求中保存属性
- public void setAttribute(String name,Object o)
- request.setAttribute("mess","注册失败")(键值对的形式)
在请求中获取属性
- public Object getAttriebute(String name)
1、在使用属性值的时候要做非空判断,否则会出现空指针异常
2、它的返回值类型是Object类型,需要最数据类型转换
转发与重定向
转发
- RequestDispatcher
- forward()方法
1、request.getRequestDispatcher("url").forward(request,response)
2、<jsp:forward page = "url"/>
重定向
- 将用户请求重新定位到一个新的URL
response.sendRedirect("url")
用户名:<%
if(userName != null && !userName.equals("")){
if(userName.equals("admin")){
//如果userName等于admin注册失败,返回注册页面
request.setAttribute("mess", "注册失败,用户名已存在!");
//转发
request.getRequestDispatcher("register.jsp").forward(request, response);
}else{
//注册成功跳转到主页面
request.setAttribute("mess", "注册成功");
//重定向
response.sendRedirect(basePath+"/pages/newsDetail.jsp");
}
跳转页面代码在请求中获取属性
- 它的返回值类型是Object类型,需要最数据类型转换
<%
Object omess = request.getAttribute("mess");
if(omess != null){
out.println(omess.toString());
}
%>
转发:服务器内部自动完成了跳转,服务器行为无形中延长了request作用域
session存取数据
page:作用域仅限于当前页面
session(服务器端使用的记录同一客户状态的机制):setAttribute()作用域是一次会话
会话:一个会话就是浏览器和服务器之间的一次通话,会话可以在多次请求中保存和使用数据
session.getId()方法可以以获得sessionId
session是单一用户、多页面可共享的。session保存在服务器端
会话的清除和过期时间
若没有清理机制,会导致性能问题或服务器崩溃
- 程序主动清除session数据
- 服务器主动清除长时间没有再次发出请求的session
程序主动清除session数据
- 设置会话失效:session.invalidate();
- 一处会话的一个属性
public void removeAttrilbute(String name);
用法:(跳转后的页面)
<a href="<%=basePath %>jsp/register.jsp">
注销</a>
<%
//设置session过期方法一
session.setMaxInactiveInterval(10);
}
%>
<%
session.invalidate();//常用
//session.removeAttribute("userName");
response.sendRedirect(basePath+"/pages/loginOut.jsp");
%>
session.removeAttribute("userName");