jsp快速入门
来源:互联网 发布:ezzy付强 知乎 编辑:程序博客网 时间:2024/06/03 19:34
简单的登录演示
下面是login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body> <!--servlet的作用:获取表单数据,处理业务逻辑,分发转向 jsp就是servlet,访问服务器时,jsp被翻译成.java文件,也就是Servlet 代码,然后编译成.class文件 --> <!-- 表单发送到dologin这个Servlet处--> <form action="/JSP/doLogin" method="post"> 用户名:<input type="text" name="username"/><br/> 密码:<input type="password" name="password"/><br/> <input type="submit" value="登录"/><br/> </form></body></html>
/** * 服务器端的相对路径 、绝对路径相对*.do,绝对/*.do;DD(web.xml)文件中的url-pattern只能绝对路径,即/*.do,根地址为应用目录。<form action=”" >中的路径一般写相对,即为DD文件中定义的servlet-mapping的url-pattern。例如DD中<url-pattern>/proName</url-pattern>,action=”proName”。若action要写绝对地址,则必须从服务器根写起,因为container是从server开始分析的。例如action=”/webapp/proName”。HttpServletResponse.sendRedirect(String)参数可以指定为相对路径、绝对路径或其它WebURL。假设通过http://localhost/myApp/cool/bar.do请求到达该方法所属的Servlet。相对路径:response.sendRedirect(“foo/stuff.do”)。容器相对于原来请求URL的目录加参数来生成完整的URL—http://localhost/myApp/cool/foo/stuff.do。绝对路径:response.sendRedirect(“/foo/stuff.do”)。容器相对于Web应用本身加参数建立完整的URL—http://localhost/foo/stuff.do。其它Web应用:response.sendRedirect(“http://niye.name)。容器直接定向到该URL。HttpServletRequest.getRequestDispatcher(String)参数可以指定为相对路径或绝对路径。相对路径情况下生成的完整URL与sendRedirect方法相同。绝对路径与重定向不同,容器将相对于Web应用的根目录加参数生成完整的URL,即:request.getRequestDispatcher(“/foo/stuff.do”)生成的URL是http://localhost/myApp/foo/stuff.do。 二:/表示根路径,但是jsp的根路径和servlet的根路径不一样jsp的根路径:http:/ /localhost:8080 而servlet的根路径 http:localhost:8080/weapp */@WebServlet("/doLogin")public class doLogin extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取表单数据 String username=request.getParameter("username"); String password=request.getParameter("password"); //处理业务逻辑 if("tom".equals(username)&&"123".equals(password)){ request.getRequestDispatcher("/success.jsp").forward(request, response); //response.sendRedirect(request.getContextPath()+"/success.jsp");//这样重定向是获取不到数据的 }else{ response.sendRedirect(request.getContextPath()+"/login.jsp"); } //分发转向 } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}
jsp的API
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body> <!-- 小脚本:1. <%%>中写Java代码 2. <%= 2+3 %> 等价于out.print(2+3) 底层代码就是反义成out.print(); <% int i=10; //打印13 out.print(i+3); %> <%=i+3%> //打印13 3.在类中定义全局成员,静态块 <%! int num1=10; //可以声明方法 %> <% int num2=10; num1++; num2++; //这里不可以声明方法,不然翻译后就是方法里声明方法, %> <%=num1%> <%=num2 %> //第一次刷新两个11,第二次是12 11 , 第三次是 13 11因为num1是全局成员 <%--这是jsp注释,和html注释不同,这个算Java注释,不会在浏览器端被看见,是安全的,不耗流量 --%> --><%-- 三个指令:六个动作用不到,九个内置对象必须掌握,四大域对象用到三个 1、page:作用:用于定义JSP页面的各种属性属性:1.1、 import 和java代码中的import是一样的<%@ page import="java.util.Date,java.util.List"%>或者:<%@ page import="java.util.Date"%><%@ page import="java.util.List"%>JSP会自动导入以下的包:import java.lang.*;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.jsp.*;1.2、 session: 是否会自动创建session对象。默认值是true;1.3、 buffer: JSP中有javax.servlet.jsp.JspWriter输出字符流。设置。输出数据的缓存大小,默认是8kb.1.4 errorPage: 如果页面中有错误,则跳转到指定的资源。errorPage="/uri" 如果写“/”则代表当前应用的目录下,绝对路径。如果不写“/”则代表相对路径。 1.5、 isErrorPage: 是否创建throwable对象。默认是false;1.6、 contextType: 等同于response.setContextType("text/html;charset=utf-8");1.7、 pageEncoding: 告诉JSP引擎要翻译的文件使用的编码。1.8、 isELIgnored: 是否支持EL表达式。 默认是false<%@ page pageEncoding="gbk" %>2、include:静态包含:把其它资源包含到当前页面中。<%@ include file="/include/header.jsp" %>动态包含:<jsp:include page="/include/header.jsp"></jsp:include>两者的区别:翻译的时间段不同前者:在翻译时就把两个文件合并后者:不会合并文件,当代码执行到include时,才包含另一个文件的内容。原则:能用静的就不用动的。3、taglib作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段。<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> --%><%--九大内置对象:标*是重要的 指在JSP的<%=%> 和<% %>中可以直接使用的对象对象名 类型 说明request * javax.servlet.http.HttpServletRequest response javax.servlet.http.HttpServletResponse session * javax.servlet.http.HttpSession 由session="true"开关application* javax.servlet.ServletContext exception java.lang.Throwable 由isErrorPage="false"开关page java.lang.Object 当前对象this 当前servlet实例config javax.servlet.ServletConfig out javax.servlet.jsp.JspWriter 字符输出流,相当于 printWriter对象pageContext* javax.servlet.jsp.PageContext 可以创建其他八个对象,做自定义标签时用---------------------------------------------------------------------------------------- pageContext(重要) 当前页面有效,出了页面就没人认识了1、本身也是一个域对象:它可以操作其它三个域对象(request session application)的数据(重点)void setAttribute(String name,Object o);Object getAttribute(String name);void removeAttribute(String name);操作其它域对象的方法void setAttribute(String name,Object o,int Scope);Object getAttribute(String name,int Scope);void removeAttribute(String name,int Scope);scpoe的值:PageContext.PAGE_SCOPE PageContext.REQUEST_SCOPE PageContext.SESSION_SCOPE PageContext.APPLICATION_SCOPEfindAttribute(String name); 自动从page request session application依次查找,找到了就取值,结束查找。2、它可以创建其它的8个隐式对象在普通类中可以通过PageContext获取其他JSP隐式对象。自定义标签时就使用。3、提供了的简易方法pageContext.forward("2.jsp"); pageContext.include("2.jsp"); --%> <% pageContext.setAttribute("key", "pageContext"); //pageContext.setAttribute("key", "value", PageContext.PAGE_SCOPE);和上面的等价 request.setAttribute("key", "request"); //pageContext.setAttribute("key", "value", PageContext.REQUEST_SCOPE);和上面等价 session.setAttribute("key", "session"); //pageContext.setAttribute("key", "value", PageContext.SESSION_SCOPE);和上面等价 application.setAttribute("key", "app"); //pageContext.setAttribute("key", "app");和上面等价 //所以以上四个等价的pageContext方法毫无卵用。-----findAttribute(String name)这才是有用的方法------ //此方法自动从 page request session application依次查找,找到就取值 pageContext.findAttribute("key"); request.getRequestDispatcher("2.jsp").forward(request, response); //2.jsp中getAttribute(“key")是取不到value的,因为pageContext只是当前页面有效 %><%-- 四大域对象: PageContext:存放的数据只有在当前页面有效,开发用的少 ServletContext:存放的数据在整个应用,范围太大,尽量不用。统计一下在线人数吧。 ServletRequest:存放的数据只有在一次请求(转发)中有效,用的非常!!!多。 HttpSession:存放的数据在一次会话中有效,用的多。 --%></body></html>
<%@page import="com.hero.show.Student"%><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body> <% Student s=new Student(); s.setStuName("tom"); request.setAttribute("stu", s); request.getRequestDispatcher("/show5.jsp").forward(request, response); %></body></html>
show5.jsp
<%@page import="java.util.HashMap"%><%@page import="java.util.Map"%><%@page import="java.util.ArrayList"%><%@page import="java.util.List"%><%@page import="com.hero.show.Student"%><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body> <% Student student=(Student)request.getAttribute("stu"); out.print(student); %> <%-- ${stu}==pageContext.findAttibute("stu");+out.print(student); --%> ${stu } ${stu.StuName } <%--这是通过反射StuName的get方法 --%> <%--如果Student student=(Student)request.getAttribute("empty"); 这个会是空指针但是${empty.StuName}不会报错,自动转换成空字符串 --%> ${stu.city.address } <%--属性导航 --%> <%-- [] 运算符:点能做的它都行,点不能的它也行 --%> ${stu.city["address"] } <% List list=new ArrayList(); list.add("aaa"); list.add("bbb"); list.add("ccc"); request.setAttribute("list", list); %> ${list } <%--输出list:[aaa,bbb,ccc] --%> ${list[1] } <%--输出bbb ,这个不像map.b,没法写成list.1--%> <% Map map=new HashMap(); map.put("a", "aa"); map.put("b", "bb"); map.put("c", "cc"); request.setAttribute("map", map); %> ${map["b"] } <%--等于${map.b} --%> ${map.b} <%----------------------------------------------------------------------- --%> <%--空字符串和没有元素的集合都是看做null,即使集合不是null,都返回true --%> ${empty str1 } ${empty list1 } <%--支持三元运算符 --%> ${empty list3 ? "你没有买东西" : "你有东西在购物车"}</body></html>
EL表达式
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body> <%------------------------------EL表达式隐式对象------------------------- EL隐式对象引用名称 类型 JSP内置对象名称 说明pageContext * javax.servlet.jsp.PageContext pageContext 一样的pageScope * java.util.Map<String,Object> 没有对应的 pageContext范围中存放的数据,页面范围requestScope * java.util.Map<String,Object> 没有对应的 请求范围数据sessionScope * java.util.Map<String,Object> 没有对应的 会话范围数据applicationScope* java.util.Map<String,Object> 没有对应的 应用范围数据param java.util.Map<String,String> 没有对应的 一个请求参数paramValues java.util.Map<String,String[]> 没有对应的 重名请求参数header java.util.Map<String,String> 没有对应的 一个请求消息头headerValues java.util.Map<String,String[]> 没有对应的 重名请求消息头initParam java.util.Map<String,String> 没有对应的 web.xml中全局参数cookie * java.util.Map<String,Cookie> 没有对应的 key:cookie对象的name值 --%> <% //pageContext.setAttribute("p", "pp"); pageContext.setAttribute("p", "pp", PageContext.PAGE_SCOPE); //pageContext.setAttribute("p", "pp", PageContext.REQUEST_SCOPE); request.setAttribute("p", "request"); //pageContext.setAttribute("p", "pp", PageContext.SESSION_SCOPE); session.setAttribute("p", "session"); //pageContext.setAttribute("p", "pp", PageContext.APPLICATION_SCOPE); application.setAttribute("p", "application"); %> ${requestScope.p } <%--不指定那个是,只会按照顺序,这样直接指定了范围 ,其实开发用不到--%> ${sessionScope.p }<%--直接用${stu},只有智障会取一样名字,然后指定范围查找--%> <%--如果表单里 用户名:<input type="text" name="username" --%> <%--${username}底层是getAttribute,是没用的,我们获取username 底层是 request.getParameter("username") --%> ${param.username } ${paramValues.hobby } ${paramValues.hobby[0] } <%--取得数组,集合 --%> ${header["User-agent"] } <%--了解:requet.getHeader() --%></body></html>
JSTL
<%@page import="java.util.ArrayList"%><%@page import="java.util.List"%><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body> <%--JSTL(JavaServerPages Standard Tag Library)JSP标准标签库 --%> <%--通用标签:set out remove ,-----------这三个开发根本不用 --%> <%--声明一个变量num ,scope是作用域--%> <c:set var="num" value="10" scope="session"></c:set> <%--这里用$比较好 --%> ${num } <c:out value="${num }" default="aaa"></c:out> <c:remove var="num" scope="session"></c:remove> <%-------------------------------------------------------- --%> <%--条件标签,重点了 --%> <c:if test="${5>4 }"> aaaaaa </c:if> <%--没有否则这个属性 --%> <c:choose > <c:when test="${num==1 }">aaa</c:when> <c:when test="${num==2 }">bbb</c:when> <c:otherwise> cccc </c:otherwise> </c:choose> <%------循环------------- --%> <c:forEach var="i" begin="1" end="10" step="1"> ${i }</br> </c:forEach> <% List list=new ArrayList(); list.add("aaa"); list.add("bbb"); list.add("ccc"); request.setAttribute("list", list); %> <c:forEach items="${list }" var="k"> ${k } 遍历集合所有元素 </c:forEach> -------------------------------------迭代器------------------------------------- varStatus指向一个字符串,该字符串引用一个对象,map.put("myvs",一个对象) 这个对象记录着当前遍历元素的一些信息 getIndex()返回索引,从0开始 getCount()返回计数,从1开始 islast()是否是最后一个元素 isfirst()是否是第一个元素 <table border="1"> <tr> <td>数据</td> <td>索引</td> <td>计数</td> <td>第一个</td> <td>最后一个</td> </tr> <c:forEach items="${list }" var="k" varStatus="myvs"> myvs是随便取的名字vs <tr> <td>${k }</td> <td>${myvs.index }</td> <td>${myvs.count }</td> <td>${myvs.first }</td> 返回布尔值 <td>${myvs.last }</td> </tr> </c:forEach> </table></body></html>
阅读全文
0 0
- jsp快速入门(读书笔记)
- JSP、EL快速入门
- java JSP快速入门
- jsp快速入门
- 快速入门JSP实例分析
- 使用 NetBeans IDE 5.0开发JSP快速入门
- Jsp EL的知识点整理,带你快速入门
- JSP快速入门阶段项目训练-图书管理信息系统
- jsp入门
- JSP入门
- JSP入门
- jsp入门
- JSP入门
- JSP入门
- JSP入门
- Jsp入门
- jsp 入门
- JSP入门
- Sublime Text mac下常用快捷键
- LeetCode 21. Merge Two Sorted Lists
- 彻底理解Python中的yield
- Python的I/O(一本正经瞎忽悠系列)
- git stash用法
- jsp快速入门
- jQuery的常用动画效果
- POJ 1170 0-1背包变形
- ISBN编号的国家地区语言代码,出版社代码规则,中国出版社ISBN代码
- Ubuntu16.04 安装 TensorFlow GPU--cuda,cudnn
- 动态规划经典入门级题目*2及详解
- nodejs 后台server中的 sql server 分页 sql
- OSGI配置子系统的方式——feature配置子系统
- 正则表达式常用操作符