20210712_jsp01
jsp
今天的任务
1.响应
2.jsp
3.EL标签是
4.jstl标签
一、servlet响应数据给浏览器
1.普通字符串
public void response1(HttpServletResponse resp) throws IOException{//设置了响应的编码格式,转为字节流式,字符占的字节个数resp.setCharacterEncoding("utf-8");//告诉了浏览器,解析服务响应的信息时按照哪种个数解析resp.setHeader("Content-Type", "text/html;charset=utf-8");PrintWriter out=resp.getWriter();String str="hello";out.write(str);out.close();}
2.html标签的字符串
public void response1(HttpServletResponse resp) throws IOException{//响应信息给浏览器PrintWriter out=resp.getWriter();String str="<html><head></head>"+ "<body><hr/></body>"+ "</html>";out.write(str);out.close();}
3.响应一个文件(.html)给浏览器
public void response2(HttpServletResponse resp) throws IOException{PrintWriter out=resp.getWriter();File f=new File("D:/Program Files/tomcat/apache-tomcat-7.0.105/webapps/web02/01.html");BufferedReader br=new BufferedReader(new FileReader(f));String str=null;while( (str=br.readLine())!=null ){out.write(str);}out.flush();out.close();System.out.println(f.getAbsolutePath());}
4.通过调用request对象的方法响应指定html文件
public void response3(HttpServletRequest req,HttpServletResponse resp) throws IOException{//try {req.getRequestDispatcher("01.html").forward(req, resp);//提交响应后无法转发,只能响应一次,已经响应了,找不到当前的客户端了//req.getRequestDispatcher("02.html").forward(req, resp);} catch (ServletException e) {e.printStackTrace();}}
如果不同登录的人,在主页面上显示的登录账号是不同的
1.AJAX(前端技术),单独把数据传输给前端
2.jsp页面的方式的进行完成:可以html标签+java代码的
二、jsp
1.简介
JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。
JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。
2.jsp执行的过程
1.jsp,通过tomcat翻译.java,java文件中会向浏览器写一些信息出去,代码, 将该文件编译器为.class的文件,jvm运行这个字节码文件,将信息输出给了浏览器;
2.jsp页面最终tomcat生成一个是servlet,这个Servlet只是一个Html的模板;
3.当调用时才进行1的操作

1.tomcat将.jsp的文件翻译为.java的文件,而发生翻译的这个文件类似我们自己编写Servlet
2.开发环境中中编译器,编译为字节码文件,.class
- 运行环境中jvm,将字节文件运行起来,生成静态资源,响应给了客户端浏览器

3.面试题
1).jsp和Servlet的区别
1.都属于javaWeb动态资源
2.本质jsp还是一个Servlet,编写时是jsp文件罢了,但用jsp时,tomcat对jsp翻译为.java文件,jdk编译为.class,jvm运行的class文件
3.jsp页面比较擅长操作标签的操作,而servlet擅长是业务逻辑的处理;
2).jsp的执行过程
三、EL表达式
注解是简化取值 例如:request.getAttribute(“users”); 使用EL ${users}
语法:
${key.xxx }
xxx:可以是属性,也可以是方法
在jsp中嵌入java代码<%! String str="你好"; %><!-- 输出一个变量 --><h2><%List<User> list=(List<User>)request.getAttribute("users"); %></h2><hr/>`<br /> ${users.length}<br />在jsp页面中嵌入java代码的缺陷:<br />JavaBean在JSP中的局限<br />在JSP页面中嵌入大量的JAVA代码<br />获取JavaBean属性必须实例化<br />强制类型转化<br />而El表达式可以解决以上问题<br />el:Expression Language(表达式语言)<br />使用的语法结构是: ${作用域.属性名}<br /><br />EL表达式可以是算术运算符,比较运算符和逻辑运算符<br />//servlet类中的代码<br />req.setAttribute(“num”, 10);<br />//jsp中的代码<br />
算术运行:${num+10}
<br />比较运算:${num>=10}
<br />逻辑运行:${num>=10 && num<=10 }
`四、jstl
1.使用步骤
1)在工程中引用JSTL的jar包
2)在JSP页面中添加taglib指令
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
3)使用JSTL标签
2.分支结构标签的使用
if标签
//servlet中的代码User u=new User();u.setLname("trump");u.setName("川建国");u.setUid(2);req.setAttribute("map1", u);//req.getRequestDispatcher("SecondJsp.jsp").forward(req, resp);req.getRequestDispatcher("ThirdJsp.jsp").forward(req, resp);//jsp中代码<!-- 单分支 --><ly:if test="${!empty map1 }"><form action=""><input type="hidden" value="${map1.uid}"/>账号:<input value="${map1.lname}"/><br/>姓名:<input value="${map1.name}"/><input type="submit"></form></ly:if>
choose标签,多分支
//servlet代码List<String> list=new ArrayList<>();list.add("lucy");// list.add("川建国");// list.add("拜登");// list.add("奥巴马");// list.add("不舍");req.setAttribute("list", list);req.getRequestDispatcher("FourJsp.jsp").forward(req, resp);//jsp代码<!-- 可以分多种情况 --><c:choose><c:when test="${!empty map1 }"><form action=""><input type="hidden" value="${map1.uid}"/>账号:<input value="${map1.lname}"/><br/>姓名:<input value="${map1.name}"/><input type="submit"></form></c:when><c:otherwise ><h1>没有数据</h1></c:otherwise></c:choose><hr/><!-- 多分支 --><c:choose><c:when test="${list.size()>=4}">至少有4个数据</c:when><c:when test="${list.size()>=2}">至少有两个数据</c:when><c:otherwise>数据比较少</c:otherwise></c:choose>
foreach标签
items是要遍历的对象,var是其中一个元素//servlet代码List<User> list=new ArrayList<>();list.add(new User(1, "lucy1", "露西1", "123"));list.add(new User(2, "lucy2", "露西2", "123"));list.add(new User(3, "lucy3", "露西3", "123"));list.add(new User(4, "lucy4", "露西4", "123"));req.setAttribute("list", list);req.getRequestDispatcher("FiveJsp.jsp").forward(req, resp);//jsp页面代码<c:forEach items="${list}" var="u"><h1>${u.uid },${u.lname },${u.name },${u.psw }</h1></c:forEach><hr/><table class="table table-striped table-hover"><tr><th>编号</th><th>账号</th><th>姓名</th><th>密码</th></tr><c:forEach items="${list }" var="u"><tr><td>${u.uid }</td><td>${u.lname }</td><td>${u.name }</td><td>${u.psw }</td></tr></c:forEach></table>

