html不能写java代码
JSP看起来是HTML,本质是servlet
java代码写在<%%>中称为脚本片段,最终在service方法里运行,❗但不要在JSP里写java代码
jsp声明:<%! %>里面可以写方法
jsp注释:<%– –%>
输出到浏览器<%= >
JSP九大内置对象
不需要声明可以直接用的对象
request
httpservletRequest对象,代表客户端请求
域范围:同一个请求
1 | String name = request.getParameter("name"); |
response(不常用)
httpservletResponse对象,代表服务器响应
session
域范围:同一会话
代表一次会话
1 | System.out.println("sessionid="+session.getId()); |
application
ServletContext对象,代表当前web应用
域范围:同一web应用
1 | System.out.print(application.getInitParameter("name")); |
out(不常用)
JSPWrite对象,把结果输出到浏览器
config(不常用)
ServletConfig对象,代表当前servlet
1 | System.out.print("servlet注册名:"+config.getServletName()); |
page(不常用)
指的是jsp对应的servlet对象,也就是代表页面
1 | System.out.println("page:"+page); |
pageContext
页面上下文,可以获取其他八个内置对象,域范围:当前页面
1 | System.out.println(pageContext.getRequest()==request);//true |
exception(不常用)
异常对象
剩下四个常用的是jsp的四大域对象
路径写绝对路径
EL表达式
从域对象里取值
el表达式没有遍历功能
表单回显:点击提交后用户名输入框依旧显示输入内容
1 | <!-- 麻烦--> |
1 | <% out.print(request.getAttribute("name")); %> |
从某一个范围中根据域对象名name去取值,如果没有指定从那个域对象里取,默认从小到大取,也就是先从pageContext里取,如果想从指定的域中取,name前面加上、pageScope、requestScope、sessionScope、applicationScope
${sessionScope.name }
如果域名叫user.name :
不加括号:会在request域中找user对象,在user对象中找name对象,在name对象中找name属性
使用括号:[“user.name”].name
${pageContext.request.contextPath }
获取当前web应用根目录
el表达式可以自动类型转换
JSTL标签
导入jstl标签库
1 | <%"c" uri="http://java.sun.com/jsp/jstl/core" %> prefix= |
c:out
value=${}:值 default=” “默认值 把结果输出到浏览器,可以解析特殊字符
c:set
scope=“ ”:指定域对象,var=“ ”:名字value=“ ”:值
c:remove
: var=” “ value=” “
c:if
:不能实现else
1 | <c:if test="${param.age<20 }"> |
c:choose
判断,相当于if elseif else
1 | <c:choose> |
c:foreach
遍历
属性 | 描述 |
---|---|
items | 要被循环的信息 |
begin | 开始的元素(0=第一个元素,1=第二个元素) |
end | 最后一个元素(0=第一个元素,1=第二个元素) |
step | 每一次迭代的步长 |
var | 代表当前条目的变量名称 |
varStatus | 代表循环状态的变量名称 .count 表示迭代计数 |
MVC设计模式
model:应用程序核心,数据库记录列表,bean,封装书库 service和dao
view:显示数据,jsp/html
controller:servlet
view和controller加起来是三层架构的view