一、jsp第一行pageEncoding改为utf-8
<% %>中间放置Java脚本
jsp声明<%! JAVA代码 %>
jsp表达式<%=表达式或变量%>
jsp文件的头部使用样式为
<%@ page language="java" %>
<%@ page contentType="text/html; charset=GB2312"%>
JSP三种命令指令分别是page、include、taglib
(1)page指令
功能:设定整个JSP网页的静态属性。
(2)include指令
功能:include指令用来向当前页面插入一个静态文件的内容。这个文件可以是JSP、HTML、文本或是Java程序。
(3)taglib指令
功能:使用标签库定义新的自定义标签,在JSP页面中启用定制行为。
1.tomcat服务器的安装及使用
http://127.0.0.1:8080/ssss/index.html
http://localhost:8080/ssss/index.html两者等价
webapps 发布路径(tomcat7.0-conf-server.xml)
myeclipse设置
1.tomcat属性
2.发布路径(一般情况下不用设置)
3.servers窗口
4.自定义运行参数 (在工程上右击-run as-run configurations-myeclipse server application双击-选择服务器等)
2.jsp页面/web.xml设置
@page @include @taglib
jsp:include 包含 jsp:forward 转向
jsp内置对象(和servlet中对象的对应关系)
1.request 浏览器请求(地址/参数/头部/客户机信息)(req)
2.response 回应(指定编码,内容类型,内容)到浏览器 (resp)
3.out 插入当前输出 write("");(resp.getWriter)
4.congfig 获取web.xml里,当前页的初始参数(getServletConfig().getInitParameter(name)//获取当前的配置文件 getServletContext().getInitParameter(name))//获取全局的配置文件
5.session 服务器会话变量map集合(request.getSession)
6.application 服务器全局变量map集合,获取web.xml里,当前程序的初始参数。而不是当前页的初始参数(getServletContext().setAttribute)
7.pagecontext 页上下文 包含和该页相关所有内容(getServletContext())
8.page (this)
9.exception 编译指令page 的isErrorPage 属性为true时,该对象才可以使用
el表达式 不能放到动态脚本中使用
1.便捷取值(el对象的值/jsp对象的值)
2.不能执行方法
3.在jsp页面都有效
4.${erer.er}
用户值 (常用 request param session) scope指的是范围
1.页变量pageScope <%=val%>
jstl set标签 ${pageScope.val}
2.请求参数 连接url参数/form标签 录入控件的name和value属性
两种方式 1.request.getParameter(name)
2.${param.name}
3.request值栈 有效范围:目标界面
request.setAttribute("key","val") 值栈设置
request.getAttribute("key") 值栈获取
4.session值栈 有效范围:当前连接会话
session.setAttribute(name,value);
或HttpSession sessions=request.getSession();
sessions.setAttribute("key","val");
sessions.getAttribute("key");
5.application值栈 有效范围:当前web应用/全局
application.setAttribute(name,object);
application.getAttribute(name,object);
6.cookit客户端值 存放在客户端
Cookie[] cs= request.getCookies();//cookie的获取
response.addCookie(cookie);//cookie的设置
3.jsp标签库 jstl标签库/el表达式
JSTL标签库(java通用标签库 替换掉所有动态脚本) prefix(别名 随便起)
核心库 逻辑语句/赋值/输出
<c:if test="${name==null}"></c:if>
<c:set var="name" value="${param.name}"></c:set>
<c:out value='${name}'></c:out>
循环语句
<c:forEach var="row" items="${sessionScope.rs.rows }" varStatus="s">
<c:out value="${s.count}"></c:out><c:out value="${row.name}"></c:out><br>
</c:forEach>
sql库
sql:setDataSource
sql: query
例子
index.jsp 文件中的问题
1.jsp嵌入式 循环显示前端脚本
<td><%=rs.getInt(1)%></td>
out.write("<td>"+rs.getInt(1)+"</td>");
2.url拼接
<a href="a.jsp?cmd=page&page=<%=pro%>">
3.分页显示
定义页号变量,在翻页时都能访问 通过页号计算 first行 max行
1.通过session
2.通过url param
3.sql limit 分页查询
4.使用sqlHelper类
edit.jsp
1.新增修改使用同一个jsp页(修改时有id)
2.使用<input type="hidden" name="cmd" value="add"> //cmd id
3.使用<from action="a.jsp" method="post"> //post/get区别
a.jsp实际应写成 room.jsp(表是room表)
1.将单个表的数据管理放置在一起
2.加入cmd标识参数,区别各类操作
3.中文转码 name=new String(name.getBytes("ISO-8859-1"),"utf-8");
4.重定向 response.sendRedirect("index.jsp");
5.前端数据到后端只有提交服务器
后端数据到前端,动态脚本/el嵌入 (后端数据可以轻易插入到前端,而前端数据必须经过提交、换页、回来才能把数据插入到后端)
4.servlet (实质上和*.jsp文件是一样的)
servlet
1. 创建 class 继承 HttpServlet
2. 实现 doget dopost 把super.doget() 移除
3. 注册到 web.xml
重定向
1.response.sendRedirect("index.jsp?name=11");//url重定向(地址栏中的路径会改变) 不携带数据
2.携带全部数据转发指定页
RequestDispatcher r=req.getRequestDispatcher("index.jsp");)//定义
r.include(req,resp);//转向方法一 包含指定页输出 (地址栏中的路径不会改变)
r.forward(req,resp);// 方法二 只显示指定页输出
session 存放在服务器
sessionID
session跟踪
1.url跟踪 index.jsp:jsessionid=1234
2.cookie跟踪
属性:
setMaxInactiveInterval 设置会话周期
setAttribute
getAttribute
removeAttribute
cookie 存放在客户端浏览器缓存里
resp.addCookie(new Cookie("name",name));
1.可设置路径范围
2.Cookie c= new Cookie("name",name) //自创建开始计时秒数,自动删除
c.setMaxAge(10);
3.获取req.getCookies() 只能通过循环遍历查询
4.可在前端直接调用
前端发向后端 提交
1.url重定向 url拼装 只支持get
(1)<a href> html重定向
换页,不需额外处理立即换页
list,jsp?pageno=<%=page%>拼装
(2)location href="",reload() js重定向
经onclick事件,执行js方法,处理之后换页
location.href="list.jsp?pageno="+page;
2.form标签提交 表单提交(新增/修改,对用户录入的数据提交)
支持post,支持文件,url安全,数据量大
hidden,可加入非显示的父带数据(id,cmd)
3.ajax提交 json串提交/返回
(1)提交校验信息(密码,用户名存在)
(2)非换页的得到数据,使用js填充数据
(3)js富客户端框架(ext js/jQueryUI)
后端发向前端
1.使用HttpServletResponse getWriter() 直接输出html(不推荐)
2.将输出数据的值加入值栈,重定向到jsp页面作为模板,使用el嵌入数据
3.ajax,json获取,使用HttpServletResponse getWriter()直接输出 json 字符串
过程
1.前端脚本发出请求(url,form,ajax)发给web服务器
2.web服务查询web,xml,查找 class
没找到:1.找jsp页面,编译成servlet 类
2.404错误
找到:执行servlet类 输入请求信息
3.类(class)解析获取请求内的信息
4.根据请求信息查询数据库/其他的处理
5.返回查询/处理的结果
1.数据集 将数据集转为list<对象>,放入值栈,采用req.getRequestDispatcher,指定模板页转向 2.标志 将数据直接放入值栈
3.图像/文件 使用getoutputstream写入流
4.json 使用getWriter写入字符
5.html 使用getWriter写入字符
6.后端数据的显示
1.数据集 使用jstl,el嵌入html
2.标志 使用el嵌入html标签中
3.图像 <img src="pic"/>
4.json $.getJSON $.ajax
5.html 什么也不做
7.将执行的结果(是静态页面),发送到客户端浏览器(浏览器不能执行动态脚本)
8.浏览器解析html,显示页面信息
jsp:1.jstl 逻辑语句
2.el 取值
3.servlet/jsp 后端页面 servlet必须注册到web.xml
4.filter (拦截请求)引用接口 必须注册到web.xml
5.listener (服务启动状态监听)引用接口 必须注册到web.xml
mvc是开发模式 来完成 jsp页面
m:model模型 v:view视图 c:controller控制器
引申:mvp p:presente
数据管理3层 bll dao >>model
model view controller(biz,service,bll)
5.listener/filter
乱码问题:1.当前页面编码方式
2.请求的编码(1.url请求的编码 2.tomcat内部接收数据的编码 3.数据库编码(my.ini编码、建表编码))
3.返回请求时的restore编码