您的位置:首页 > Web前端 > JavaScript

17.12.03,web学习第十七天,还有一年,努力吧青年JSP

2017-12-03 12:04 405 查看

动态页面技术JSP

1.jsp:java server page.它的根本就是简化servlet设计。在传统html页面嵌入java代码。

2.Tomcat内部维护着关于Servlet,request,HttpJspBase等的源码,所以关联以上源码时关联Tomcate源码即可。apache-tomcat-7.0.52-src.zip

3..jsp文件在tomcat中会被翻译成.servlet文件,它本质就是servlet。

它被放在work目录下。

被翻译过后的是这样的:

Index_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.....JspSourceDependent{  } 

4.Jsp脚本:主要学它翻译后的代码主要在哪!

1)<% java代码 %>--此java代码会被翻译到servlet的service方法内部

2)<%!=java 变量或表达式%>--会被翻译成service方法内部的out.print()直接输出。

3) <%! Java代码%>----会被翻译成servlet的成员位置

5.Jsp注释:不同的注释可见范围不同

1)html注释:<!--注释内容--> 可见范围:jsp源码-翻译后的servlet-页面显示的html源码

2)java 注释:单行和多行 可见范围:jsp源码-翻译后的servlet

3)jsp注释:<% 注释内容 %> 可见范围:只存在jsp源码中  最安全

6.jsp运行原理:本质是servlet

Jsp在第一次被访问时会被Web容器翻译成servlet

当访问xxx.jsp 时会匹配这个Url-pattern,

<url-pattern>*.jsp</url-pattern>

然后找到这个:<servlet-name>jsp</servlet-name>       <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>最终该servlet会去work找jsp翻译后的servlet文件,如果没有则创建一个。

7.JSP的指令 是指导jsp翻译和运行的命令

Page指令:-属性最多的指令(实际开发中page指令默认)

它是属性最多的一个指令,根据不同的属性,指导整个页面的特性;

格式:

常见属性:language:java   jsp脚本中可以嵌入的语言种类

pageEncoding:jsp文件的编码。可以认为pageEncoding内部维护着contentType所以开发中写一个即可!

contentType:text/html;charset=UTF-8;翻译后:response.setContentType(“text/html;chartSet=UTF-8”);

session:是否在jsp翻译时自动创建session,默认true。可在该页面直接使用session.setAttribute(“name”,”value”);

extends:servlet不能随便继承,所以这个属性一班不用。

Import:导包,两种写法,自己写和自动写。

errorPage:当前页面出现错误后跳转到指定页面。该指定页面可配置属性:isErrorPage=true 指该页面为错误页面;而这个方式不能处理404错误。

扩展:可在web.xml设置全局的错误页面:当jsp页面配置了error属性,将会采用就近原则!

<error-page>

  <error-code>404</error-code>

  <location>/error.jsp</location>

</error-page>

一个jsp页面可以有多个<%@page  属性:  %>

属性学完了,但是这些属性很少使用,相对而言使用多的是import属性,错误的页面跳转也很少使用!

Include指令:

页面包含(静态包含)指令,jsp的嵌套

<%@include file=”jsp地址“ %>

Taglib指令:在jsp中引入标签库(jstl标签库、struts2标签库)

<%@ taglib uri=”标签库地址” prefix=”前缀” %>

一般第一个指令很少用,默认就ok,只要使用第二三个指令。

8.九大内置/隐士对象

主要理解out对象:类型jspWriter 它就是用来给客户端写数据的

现有这么几种向客户端输入内荣方式:

aaa

out.writer(‘”bbb”)

response.getWriter().writer(“ccc”);

<%=ddd%>   要知道jsp默认buffer=”8kb”这个属性,除了第三个方法其他都是向out缓冲区写入数据后被刷新至response缓冲区,tomcat会从response拿数据,所以顺序为:c-abd ,如果设置缓冲区buffer=”0“代表关闭out缓冲区,直接写入response缓存区。输出:abcd。

PageContext对象(域):页面的上下文对象、Page对象指当前页面对象于此不同。

pageContext域除了基本的方法外,还有向其他域存取数据的功能

PageContext.setAttribute(name,value,xxx);

xxx-----PageContext.RWQUEST_SCORE或PageContext.SESSION_SCORE或APPLICATION_SCORE

pageContext.findAttribute(“name”);只要找到了就不找了!会从小到大域的范围搜索name。

域的大小:page域<request域<session域<application域

setAttribute(name,value);同名会覆盖前面的!

pageContext对象作用其二:可以获得其他八大对象。它内部维护者其他八大对象的索引。写框架用开发很少用(了解)。例:getRequest()

getContext();.........

Out(Jspwriter),request(HttpServletRequest),response(HttpServletResponse),application(ServletContext),page(this),exception,pagecontext页面容器,config(ServletConfig),ssession(HttpSession)

9.四大作用域总结:pageContext,request,session,servletContext(整个web应用)

10.jsp标签(动作)

动态包含:

静态包含和动态包含的区别:<%@ include file=””%>     <jsp:include page=””/> 。静态包含是两个jsp文件被翻译成一个java文件。动态包含是包含文件先被翻译成java文件-再编译-后运行,运行时发现有一个方法:include(request,response,......);执行这个方法,就把被包含的页面翻译-编译-运行。。。。。。

请求转发:<jsp:forward page=”相对路径“/>      

11.案例:完成商品的列表的展示,总结:

1)访问servlet,通过此查询数据库拿到数据(图片地址)

2)将数据封装到JB对象中,拿到JB对象的List集合,使用转发技术转发list到jsp页面。

3)Js页面拿数据时需要强转List<JB>

4)遍历集合将应拿的数据拿出来

5)注意:out()内部代码的拼接!!!!

Js代码:
<%@page import="java.util.List" %>
<%@page import="jsp.JB" %>
<%
List<JB> list =(List<JB>)request.getAttribute("name");
if(list!=null){
for(JB l:list){
out.write("<div class='col-md-2'>");
out.write("<a href='product_info.htm'> <img src="+l.getPimage()+" ");
//out.write("<img src='"+l.getPimage()+"' width='170' height='170' style='display: inline-block;'>");
out.write("width='170' height='170' style='display: inline-block;''>");
out.write("</a>");
out.write("<p>");
out.write("<a href='product_info.html' style='color: green'>"+l.getPname()+"</a>");
out.write("</p>");
out.write("<p>");
out.write("<font color='#FF0000'>商城价:¥"+l.getMarket_price()+"</font>");
out.write("</p>");
out.write("</div>");
}
}
%>
Servlet代码:
DataSource cpds = new ComboPooledDataSource();
QueryRunner qr=new QueryRunner(cpds);
String sql="select * from product";
try {
List<JB> list = qr.query(sql, new BeanListHandler<JB>(JB.class));
System.out.println(list);
request.setAttribute("name", list);
RequestDispatcher rd = request.getRequestDispatcher("product_list.jsp");
rd.forward(request,
a1d8
response);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JB对象:
private String pid;
private String pname;
private String market_price;
private String shop_price;
private String pimage;
private String pdate;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐