重点项目建设网站,电子商务公司属于什么行业类别,广东省建筑网站,肇庆seo推广公司一、引言 现有问题 在之前学习Servlet时#xff0c;服务端通过Servlet响应客户端页面#xff0c;有什么不足之处#xff1f; 开发方式麻烦#xff1a;继承父类、覆盖方法、配置Web.xml或注解。 代码修改麻烦#xff1a;重新编译、部署、重启服务。 显示方式麻烦#x… 一、引言 现有问题 在之前学习Servlet时服务端通过Servlet响应客户端页面有什么不足之处 开发方式麻烦继承父类、覆盖方法、配置Web.xml或注解。 代码修改麻烦重新编译、部署、重启服务。 显示方式麻烦获取流、使用println();逐行打印。 协同开发麻烦UI负责美化页面程序员负责编写代码。UI不懂Java程序员又不能将所有前端页面的内容通过流输出。 二、JSP 2.1 概念 简化的Servlet设计在HTML标签中嵌套Java代码用以高效开发Web应用的动态网页。 Java Server Pages。 2.2 作用 替换显示页面部分的Servlet(使用*.jsp文件替换XxxJSP.java)。 三、JSP开发 3.1 创建JSP 在web目录下新建*.jsp文件与WEB-INF平级。 3.1.1 编写代码 % page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitleThis is my first page/title
/head
body%new java.util.Date() %
/body
/html 使用% %标签编写Java代码在页面中打印当前系统时间。 3.1.2 访问JSP 在浏览器输入http://ip:port/项目路径/资源名称。 3.2 JSP与Servlet 关系 JSP文件在容器中会转换成Servlet执行。 JSP是对Servlet的一种高级封装。本质还是Servlet。 区别 与 Servlet 相比JSP可以很方便的编写或者修改HTML网页而不用去面对大量的println语句。 3.3 JSP实现原理 Tomcat会将xxx.jsp转换成Java代码进而编译成.class文件运行最终将运行结果通过response响应给客户端。 四、集成开发 4.1 脚本 脚本可以编写Java语句、变量、方法或表达式。 4.1.1 普通脚本 语法% Java代码 % html
headtitleHello World/title/head
body
Hello World!br/
%//jsp中使用小脚本嵌入java代码out.println(hi);//打印内容在客户端页面System.out.println(hi);//打印内容在控制台
%
/body
/html 经验普通脚本可以使用所有Java语法除了定义函数。 注意脚本与脚本之间不可嵌套脚本与HTML标签不可嵌套。 4.1.2 声明脚本 语法%! 定义变量、函数 % %! int i 0; %
%! int a, b, c; %
%! Object object new Object(); %
%!//定义方法public void m1(){System.out.println(你好);}
% 注意声明脚本声明的变量是全局变量。 声明脚本的内容必须在普通脚本% %中调用。 如果声明脚本中的函数具有返回值可以使用输出脚本调用% %。 4.1.3 输出脚本 语法%Java表达式 % % page languagejava contentTypetext/html; charsetUTF-8 pageEncodingUTF-8%
!DOCTYPE html
html
head
meta charsetutf-8
titlejsp基本使用/title
/head
body
p今天的日期是: % new java.util.Date() %
/p
/body
/html 经验输出脚本可以输出带有返回值的函数。 注意输出脚本中不能加。 4.2 JSP注释 JSP注释主要有两个作用为脚本代码作注释以及HTML内容注释。 4.2.1 语法 4.2.2 注释 % page languagejava contentTypetext/html; charsetUTF-8pageEncodingUTF-8%
!DOCTYPE html
html
head
meta charsetutf-8
titlejsp基础教程/title
/head
body
%-- JSP注释在网页中不会被显示--%
!-- HTML注释在网页源代码中会显示 --
p今天的日期是: % new java.util.Date() %
/p
/body
/html 4.3 JSP指令 JSP指令用来设置与整个JSP页面相关的属性。 4.3.1 page指令 语法% page attribute1value1 attribute2value2 % Page指令为容器提供当前页面的使用说明。一个JSP页面可以包含多个page指令。 4.3.2 include指令 语法% include file 被包含的JSP路径% 通过include指令来包含其他文件。 被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是当前JSP文件的一部分会被同时编译执行静态包含。 % include fileheader.jsp%
...
...
% include filefooter.jsp % 注意可能会有重名的冲突问题不建议使用。 4.3.3 taglib指令 语法% taglib uri外部标签库路径 prefix前缀 % 引入JSP的标准标签库。 % taglib urihttp://java.sun.com/jsp/jstl/core prefixc% 4.4 动作标签 语法jsp:action_name attributevalue / 动作标签指的是JSP页面在运行期间的命令。 4.4.1 include 语法jsp:include page相对 URL 地址 / jsp:include 动作元素会将外部文件输出结果包含在JSP中动态包含。 jsp:include pageindex.jsp/ 注意前面已经介绍过include指令它是将外部文件的输出代码复制到了当前JSP文件中。而这里的jsp:include动作不同是将外部文件的输出结果引入到了当前JSP文件中。 4.4.2 useBean 语法jsp:useBean idname classpackage.className / jsp:useBean 动作用来加载一个将在JSP页面中使用的JavaBean。 jsp:useBean iduser classcom.liuy.entity.User/ 在类载入后我们可以通过 jsp:setProperty 和 jsp:getProperty 动作来修改和获取bean的属性。 4.4.3 setProperty 可以在jsp:useBean元素之后使用jsp:setProperty进行属性的赋值。 jsp:useBean iduser classcom.liuy.entity.User /
jsp:setProperty nameuser propertyname valuegavin / 4.4.4 getProperty jsp:getProperty动作提取指定Bean属性的值转换成字符串然后输出。 jsp:useBean iduser classcom.liuy.entity.User /
jsp:setProperty nameuser propertyname valuegavin /
jsp:getProperty nameuser propertyname / 4.4.5 forward 语法jsp:forward page相对 URL 地址 / jsp:forward动作把请求转到另外的页面。 jsp:forward pageindex.jsp / 4.4.6 param 语法jsp:param name value/ 在转发动作内部使用做参数传递。 jsp:forward pageindex.jsp!-- http请求参数传递--jsp:param namesex valuenan /
/jsp:forward 4.5 内置对象 由JSP自动创建的对象可以直接使用。 4.5.1 四大域对象 JSP有四大作用域对象存储数据和获取数据的方式一样不同的是取值的范围有差别。 pageContext (javax.servlet.jsp.PageContext) 当前JSP页面范围。 request (javax.servlet.http.HttpServletRequest) 一次请求有效。 session (javax.servlet.http.HttpSession) 一次会话有效(关闭浏览器失效)。 application (javax.servlet.ServletContext) 整个Web应用有效(服务器重启或关闭失效)。 4.5.2 pageContext pageContext对象是javax.servlet.jsp.PageContext 类的实例拥有作用域用来代表整个JSP页面。 当前页面的作用域对象一旦跳转则失效。 通过setAttribute(name,value);存储值。 通过getAttribute(name);获取值。 用于获取其他8个内置对象或者操作其他对象的作用域。 %pageContext.setAttribute(name,value);//当前页面作用域有效
% 4.5.3 获取内置对象 %pageContext.getRequest();//返回request内置对象pageContext.getResponse();//返回response内置对象pageContext.getServletConfig();//返回config内置对象pageContext.getException();//返回exception内置对象pageContext.getPage();//返回page内置对象pageContext.getOut();//返回out内置对象pageContext.getServletContext();//返回application内置对象pageContext.getSession();//返回session内置对象
% 4.5.4 作用域 pageContext对象可以操作其他作用域存储和获取。 %//操作其他作用域存储pageContext.setAttribute(name,value);//当前页面有效pageContext.setAttribute(name,value,PageContext.REQUEST_SCOPE);//request作用域pageContext.setAttribute(name,value,PageContext.SESSION_SCOPE);//session作用域pageContext.setAttribute(name,value,PageContext.APPLICATION_SCOPE);//application作用域
%%//操作其他作用域获取pageContext.getAttribute(name);//当前页面作用域pageContext.getAttribute(name,PageContext.REQUEST_SCOPE);//request作用域pageContext.getAttribute(name,PageContext.SESSION_SCOPE);//session作用域pageContext.getAttribute(name,PageContext.APPLICATION_SCOPE);//application作用域pageContext.findAttribute(name);//从pageContext ,request ,session ,application依次查找
% 4.6 整合 将EmpProject项目所有显示页面JSP的Servlet替换为JSP页面使用脚本进行显示。 五、EL表达式 5.1 概念 EL使JSP写起来更简单、简洁。主要用于获取作用域中的数据。 Expression Language 5.2 作用 用于替换作用域对象.getAttribute(name); 5.3 EL的应用 ${scope.name} 获取具体某个作用域中的数据。 ${name} 获取作用域中的数据逐级查找(pageContext、request、session、application)。 5.3.1 案例 %//存储在request作用域request.setAttribute(name,tom);request.setAttribute(age,18);
%
${requestScope.name} %--获取request作用域中name对应的值找到就返回,没找到返回 --%
${name}%--从最小作用域逐级查找name对应的值,找到就返回,没找到返回 --% 5.3.2 区别 %request.getAttribute() % 没有找到返回null。 ${requestScope.name} 没找到返回。 5.4 获取引用类型 使用EL获取作用域中的对象调用属性时只能访问对象的get方法必须遵守命名规范定义。 %Emp e new Emp();e.setName(gavin);e.setAge(19);request.setAttribute(e,e);
%
${requestScope.e.name}%-- 调用getName()方法 --% 5.5 获取集合元素 EL可以获取Array、List、Map中的元素Set由于没下标无法直接访问元素后续可遍历。 %int[] array new int[]{1,2,3,4,5};request.setAttribute(array,array);ListEmp emps new ArrayList();emps.add(new Emp(1,gavin,2000,19));emps.add(new Emp(2,marry,3000,29));emps.add(new Emp(3,jack,4000,39));request.setAttribute(emps,emps);MapString,String maps new HashMap();maps.put(CN,中国);maps.put(FK,法国);maps.put(US,美国);request.setAttribute(maps,maps);
%
${requestScope.array[0]}
${requestScope.emps[0]} %-- 也可以用 ${requestScope.emps.get(0)} --%
${requestScope.maps.CN} %-- 也可以用 ${requestScope.maps[US]} -- 5.6 运算符 5.6.1 执行运算 % page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitle运算符/title
/head
body%request.setAttribute(num,1234);String ss 123;request.setAttribute(ss,ss);%h1算术运算/h1${num 1}br/${num - 1}br/${num * 2}br/${num div 2}br/${num mod 2}br/hr/h1关系运算/h1${num 1234}br/${num ! 1234}br/${num 1200}br/${num 1200}br/${num 1234}br/${num 1234}br/hr/h1逻辑运算/h1${num %20 || num /2 1}br/${num % 20 num % 40}br/${!(num 1234)}br/hr/h1empty运算符/h1${ss null}br/${empty ss}br/
/body
/html 5.6.2 empty %String s1;pageContext.setAttribute(s1, s1);String s2null;pageContext.setAttribute(s2, s2);String s3122222;pageContext.setAttribute(s3, s3);List list1 new ArrayList();pageContext.setAttribute(list1, list1);
%
!-- empty关键只要内容是空true --
${empty s1}br
${empty s2}br
${empty s3}br
${empty list1}br 5.7 隐式对象 EL 表达式语言定义了11个隐式对象。 5.7.1 上下文 %request.getContextPath() %
${pageContext.request.contextPath} 5.7.2 获取Cookie ${cookie.username}//获取名为username的cookie对象
${cookie.password}//获取名为password的cookie对象
${cookie.password.value}//获取password的cookie的value值 六、JSTL 6.1 问题 EL主要是用于作用域获取数据虽然可以做运算判断但是得到的都是一个结果做展示。 EL不存在流程控制。比如判断。 EL对于集合只能做单点访问不能实现遍历操作。比如循环。 6.2 概念 JSTL全称Java Server Pages Standard Tag Library JSP标准标签库JSTL是一个JSP标签集合。 Core 核心库 标签库的URIhttp://java.sun.com/jsp/jstl/core 常用前缀c I18N国际化 标签库的URIhttp://java.sun.com/jsp/jstl/fmt 常用前缀fmt SQL 标签库的URIhttp://java.sun.com/jsp/jstl/sql 常用前缀sql XML 标签库的URIhttp://java.sun.com/jsp/jstl/xml 常用前缀x Functions 标签库的URIhttp://java.sun.com/jsp/jstl/functions 常用前缀fn 6.3 作用 可对EL获取到的数据进行逻辑操作。 与EL合作完成数据的展示。 6.4 使用 导入两个 jar 文件standard.jar 和 jstl.jar 文件拷贝到 /WEB-INF/lib/ 下。 在JSP页面引入标签库% taglib urihttp://java.sun.com/jsp/jstl/core prefixc 6.5 核心标签 6.5.1 条件标签 语法c:if test 条件 /c:if !-- test属性中是条件但是条件需要使用EL表达式来书写 --
h3条件标签if/h3
c:if test${82 }8大于2是成立的
/c:if
c:if test${82 }8小于2是成立的
/c:if 6.5.2 choose 语法c:choose c:when test条件1结果1 /c:when
c:when test条件2结果2 /c:when
c:when test条件3结果3 /c:when
c:otherwise 结果4 /c:otherwise /c:choose h3条件标签choose(等价于java中多重if)/h3
%-- 测试成绩等级 90 优秀 80 良好 70 中等 60及格--%
c:set varscore value80/c:set
c:choosec:when test${score90 }优秀/c:whenc:when test${score80 }良好/c:whenc:when test${score70 }中等/c:whenc:when test${score60 }及格/c:whenc:otherwise不及格/c:otherwise
/c:choose 6.5.3 foreach 语法 c:foreachvar变量名items集合begin起始下标end结束下标step间隔长度varstatus遍历状态/c:foreach h3测试list集合遍历获取学生列表/h3table border1 width80% bordercolorred cellspacing0aligncentertrth学号/thth姓名/thth成绩/thth班级/thth是否是第一个/thth是否是最后一个/thth计数count/thth索引index/th/tr
!-- varStatus:变量状态遍历出的每一项内容的状态first 是否是第一行last 是否是最后一行count 当前行数index 当前元素的下标--!-- var :遍历出的每一项使用变量先存储items集合(使用El表达式)--c:forEach varstu items${students} varStatusvstrtd${stu.id}/tdtd${stu.name}/tdtd${stu.score}/tdtd${stu.classes}/tdtd${vs.first}/tdtd${vs.last}/tdtd${vs.count}/tdtd${vs.index}/td/tr/c:forEach
/table 6.5.4 url 在Cookie禁用的情况下通过重写URL拼接JSESSIONID来传递ID值。便于下一次访问时仍可查找到上一次的Session对象。 c:url context${pageContext.request.contextPath} value/xxxController /
//在form表单的action中嵌套动态路径
form actionc:url context${pageContext.request.contextPath}
value/xxxController /
/form 经验所有涉及到页面跳转或者重定向跳转时都应该使用URL重写。 6.6 fmt c:set varnow value%new java.util.Date()% /p日期格式化 (1): fmt:formatDate typetimevalue${now} //p
p日期格式化 (2): fmt:formatDate typedatevalue${now} //p
p日期格式化 (3): fmt:formatDate typebothvalue${now} //p
p日期格式化 (4): fmt:formatDate typebothdateStyleshort timeStyleshortvalue${now} //p
p日期格式化 (5): fmt:formatDate typebothdateStylemedium timeStylemediumvalue${now} //p
p日期格式化 (6): fmt:formatDate typebothdateStylelong timeStylelongvalue${now} //p
p日期格式化 (7): fmt:formatDate patternyyyy-MM-ddvalue${now} //p日期格式化 (1): 11:19:43
日期格式化 (2): 2016-6-26
日期格式化 (3): 2016-6-26 11:19:43
日期格式化 (4): 16-6-26 上午11:19
日期格式化 (5): 2016-6-26 11:19:43
日期格式化 (6): 2016年6月26日 上午11时19分43秒
日期格式化 (7): 2016-06-26 c:set varbalance value120000.2309 /p格式化数字 (1): fmt:formatNumber value${balance}typecurrency//p
p格式化数字 (2): fmt:formatNumber typenumbermaxIntegerDigits3 value${balance} //p
p格式化数字 (3): fmt:formatNumber typenumbermaxFractionDigits3 value${balance} //p
p格式化数字 (4): fmt:formatNumber typenumbergroupingUsedfalse value${balance} //p
p格式化数字 (5): fmt:formatNumber typepercentmaxIntegerDigits3 value${balance} //p
p格式化数字 (6): fmt:formatNumber typepercentminFractionDigits10 value${balance} //p
p格式化数字 (7): fmt:formatNumber typepercentmaxIntegerDigits3 value${balance} //p
p格式化数字 (8): fmt:formatNumber typenumberpattern###.###E0 value${balance} //p
p美元 :
fmt:setLocale valueen_US/
fmt:formatNumber value${balance} typecurrency//p格式化数字 (1): 120,000.23
格式化数字 (2): 000.231
格式化数字 (3): 120,000.231
格式化数字 (4): 120000.231
格式化数字 (5): 023%
格式化数字 (6): 12,000,023.0900000000%
格式化数字 (7): 023%
格式化数字 (8): 120E3
美元 : $120,000.23 6.7 整合 将现有的EmpProject项目进行整合使用ELJSTL替换脚本代码。 七、MVC框架 7.1 MVC概念 Model-View-Controller MVC又称为编程模式是一种软件设计思想将数据操作、页面展示、业务逻辑分为三个层级模块独立完成相互调用。 模型层Model 视图View 控制器Controller 7.2 详解 MVC并不是Java独有的现在几乎所有的B/S的架构都采用了MVC模式。 视图View视图即是用户看到并与之交互的界面比如HTML静态资源JSP动态资源等等。 控制器Controller控制器即是控制请求的处理逻辑对请求进行处理负责流程跳转(转发和重定向)。 模型Model对客观世界的一种代表和模拟(业务模拟、对象模拟)。 7.3 优点 低耦合性模块与模块之间的关联性不强不与某一种具体实现产生密不可分的关联性。 高维护性基于低耦合性可做到不同层级的功能模块灵活更换、插拔。 高重用性相同的数据库操作可以服务于不同的业务处理。将数据作为独立模块提高重用性。 7.4 应用 MVC模式被广泛用于Java的各种框架中比如Struts2、SpringMVC等等都用到了这种思想。 7.5 三层架构与MVC 7.5.1 三层架构 View层表示|界面层、Service层业务逻辑层、DAO层(数据访问层)。 7.5.2 区别 MVC强调的是视图和业务代码的分离。严格的说MVC其实关注的是Web层。View就是单独的页面如JSP、HTML等不负责业务处理只负责数据的展示。而数据封装到Model里由Controller负责在V和M之间传递。MVC强调业务和视图分离。 三层架构是“数据访问层”、“业务逻辑层”、“表示层”指的是代码之间的解耦方便维护和复用。
文章转载自: http://www.morning.swkzk.cn.gov.cn.swkzk.cn http://www.morning.htpjl.cn.gov.cn.htpjl.cn http://www.morning.jrbyz.cn.gov.cn.jrbyz.cn http://www.morning.kpfds.cn.gov.cn.kpfds.cn http://www.morning.gccrn.cn.gov.cn.gccrn.cn http://www.morning.wqsjx.cn.gov.cn.wqsjx.cn http://www.morning.mjyrg.cn.gov.cn.mjyrg.cn http://www.morning.wkmrl.cn.gov.cn.wkmrl.cn http://www.morning.kvzvoew.cn.gov.cn.kvzvoew.cn http://www.morning.c7617.cn.gov.cn.c7617.cn http://www.morning.fzqfb.cn.gov.cn.fzqfb.cn http://www.morning.tmcmj.cn.gov.cn.tmcmj.cn http://www.morning.xhxsr.cn.gov.cn.xhxsr.cn http://www.morning.nbqwt.cn.gov.cn.nbqwt.cn http://www.morning.rwls.cn.gov.cn.rwls.cn http://www.morning.xgjhy.cn.gov.cn.xgjhy.cn http://www.morning.lftpl.cn.gov.cn.lftpl.cn http://www.morning.sfrw.cn.gov.cn.sfrw.cn http://www.morning.ghgck.cn.gov.cn.ghgck.cn http://www.morning.qwdlj.cn.gov.cn.qwdlj.cn http://www.morning.kpgms.cn.gov.cn.kpgms.cn http://www.morning.tktcr.cn.gov.cn.tktcr.cn http://www.morning.hsklc.cn.gov.cn.hsklc.cn http://www.morning.kwnnx.cn.gov.cn.kwnnx.cn http://www.morning.kuaijili.cn.gov.cn.kuaijili.cn http://www.morning.beijingzy.com.cn.gov.cn.beijingzy.com.cn http://www.morning.gnwpg.cn.gov.cn.gnwpg.cn http://www.morning.xmrmk.cn.gov.cn.xmrmk.cn http://www.morning.rhkgz.cn.gov.cn.rhkgz.cn http://www.morning.sfqtf.cn.gov.cn.sfqtf.cn http://www.morning.gwkjg.cn.gov.cn.gwkjg.cn http://www.morning.qpmmg.cn.gov.cn.qpmmg.cn http://www.morning.hnkkf.cn.gov.cn.hnkkf.cn http://www.morning.sjgsh.cn.gov.cn.sjgsh.cn http://www.morning.jkftn.cn.gov.cn.jkftn.cn http://www.morning.dbddm.cn.gov.cn.dbddm.cn http://www.morning.rrqgf.cn.gov.cn.rrqgf.cn http://www.morning.dfffm.cn.gov.cn.dfffm.cn http://www.morning.kxsnp.cn.gov.cn.kxsnp.cn http://www.morning.ykrkq.cn.gov.cn.ykrkq.cn http://www.morning.gcftl.cn.gov.cn.gcftl.cn http://www.morning.mlckd.cn.gov.cn.mlckd.cn http://www.morning.wnjrf.cn.gov.cn.wnjrf.cn http://www.morning.kncrc.cn.gov.cn.kncrc.cn http://www.morning.rhchr.cn.gov.cn.rhchr.cn http://www.morning.tkxyx.cn.gov.cn.tkxyx.cn http://www.morning.brqjs.cn.gov.cn.brqjs.cn http://www.morning.jyyw.cn.gov.cn.jyyw.cn http://www.morning.lfmwt.cn.gov.cn.lfmwt.cn http://www.morning.lfsmf.cn.gov.cn.lfsmf.cn http://www.morning.zdmlt.cn.gov.cn.zdmlt.cn http://www.morning.ykrkb.cn.gov.cn.ykrkb.cn http://www.morning.txmlg.cn.gov.cn.txmlg.cn http://www.morning.qszyd.cn.gov.cn.qszyd.cn http://www.morning.zkdbx.cn.gov.cn.zkdbx.cn http://www.morning.gyxwh.cn.gov.cn.gyxwh.cn http://www.morning.tmsxn.cn.gov.cn.tmsxn.cn http://www.morning.zfhwm.cn.gov.cn.zfhwm.cn http://www.morning.mrnnb.cn.gov.cn.mrnnb.cn http://www.morning.rkfh.cn.gov.cn.rkfh.cn http://www.morning.pbbzn.cn.gov.cn.pbbzn.cn http://www.morning.lrmts.cn.gov.cn.lrmts.cn http://www.morning.rmfw.cn.gov.cn.rmfw.cn http://www.morning.nzkkh.cn.gov.cn.nzkkh.cn http://www.morning.khfk.cn.gov.cn.khfk.cn http://www.morning.rnxw.cn.gov.cn.rnxw.cn http://www.morning.grynb.cn.gov.cn.grynb.cn http://www.morning.rjnrf.cn.gov.cn.rjnrf.cn http://www.morning.lctrz.cn.gov.cn.lctrz.cn http://www.morning.rszwc.cn.gov.cn.rszwc.cn http://www.morning.bncrx.cn.gov.cn.bncrx.cn http://www.morning.qmsbr.cn.gov.cn.qmsbr.cn http://www.morning.rfqkx.cn.gov.cn.rfqkx.cn http://www.morning.tcfhs.cn.gov.cn.tcfhs.cn http://www.morning.tmrjb.cn.gov.cn.tmrjb.cn http://www.morning.qpqwd.cn.gov.cn.qpqwd.cn http://www.morning.tdfyj.cn.gov.cn.tdfyj.cn http://www.morning.jtrqn.cn.gov.cn.jtrqn.cn http://www.morning.yuminfo.com.gov.cn.yuminfo.com http://www.morning.kpxnz.cn.gov.cn.kpxnz.cn