jsp学习笔记初级
- 格式:docx
- 大小:35.57 KB
- 文档页数:16
JSP基础教程学习笔记JSP基础教程学习笔记 (1)一、jsp简介 (2)二、jsp结构 (2)三、JSP生命周期 (3)四、jsp语法 (4)五、jsp指令 (7)六、jsp动作元素 (9)七、jsp隐含对象 (17)八、jsp客户端请求 (20)九、jsp服务器响应 (25)十、JSP HTTP状态码 (29)十一、JSP表单处理 (33)十二、JSP过滤器 (40)十三、JSP Cookies处理 (43)十四、JSP Session (46)十五、JSP文件上传 (51)十六、JSP日期处理 (56)十七、JSP页面重定向 (62)十八、JSP点击量统计 (63)十七、JSP自动刷新 (66)十八、JSP发送邮件 (68)一、jsp简介Java Server Pages,一种动态网页开发技术,使用jsp在html网页中插入java代码,标签通常以<%开头,以&>结尾。
二、jsp结构网络服务器需要一个JSP引擎,也就是一个容器来处理JSP页面。
容器负责截获对JSP页面的请求。
Jsp容器与web服务器协同合作,未jsp的正常运行提供必要的运行环境和其他服务,并且能够正确识别专属于jsp 网页的图书元素。
下图显示jsp容器和jsp文件在web应用中所处的位置:Jsp处理的步骤:1.同普通网页一样,浏览器发送http请求给服务器;2.Web服务器识别出这事一个对jsp网页的请求,并且将该请求传递给jsp引擎。
通过使用URL或者.jsp文件来完成;3.Jsp引擎从磁盘中载入jsp文件,然后将它们转化为servlet。
这种转化只是简单的将所有模板文本改用println()语句,并且将所有的jsp元素转化成java代码;4.Jsp引擎将servlet编译成可执行类,并且将原始请求传递给servlet引擎;5.Web拂去其的某组件将会调用servlet引擎,然后载入并执行servlet类。
JSP复习笔记一、内容汇总1. jsp简介: jsp是动态的页面语言,是以Java为主的跨平台web开发语言.一般jsp代码直接内嵌在html中,即jsp只是简单的将Java放到html网页中去而已,html可以直接改为jsp.jsp原理:jsp程序由JSP Engine先将它转换成Servlet代码,接着将它编译成类文件载入执行;只有当客户端第一次请求JSP时,才需要将其转换并编译.2. .jsp运行环境: jsp是动态的代码,必须有服务器来解析这些代码,于是用到了Tomcat这款免费服务器.3. .jsp基本语法: 1)标记:<%程序代码区%> 2)表达式:<%=...%> 3) 3)注释4)JSP声明:<%! ...%>4. Dircetive(指令)格式:<%@ 指令属性="属性值"%>指令的设定不能重复制定(除了import外)常用的指令有:import、contentType、errorpage、page、include常用指令的使用方法5. JSP编程的内置对象(也叫隐藏变量)jsp页面中隐含了一些变量,这些你可以直接使用,不需要关心这些变量是如何创建出来的.常用的隐含变量包括:request:请求作用域response:请求响应session:会话作用域application:应用作用域out:输出注意:隐含变量只能在<%%>标记内使用6. jsp内置作用域之间的区别作用域的作用:用来临时存储一个值作用域内可以通过setAttribute来存储一个值,也可以通过getAttribute来提取一个值.jsp中的四个作用域按范围从小到大排列为: pageContext<request<session<application pageContext:只在当前页面有效,可以使用这个对象来管理其他的隐含对象request:表示在一个请求的作用域里面有效的.pageContext保存的值,只在当前页面有效,超出本页面均无效, 在以下的两种情况是有效的<jsp:include>和<jsp:forward>session作用域:表示在一个会话范围内有效,有两种情况会话内容会自动失效1).页面关闭,session内值没有了2).超时(通过session-timeout可以设置)3).手工注销sessionsession.invalidate();application作用域:代表在服务器的范围内是有效的,如果服务器关闭,则作用域内存储的任何值都将失效7. 参数传递1)如果是超链接,可以用以下方式:<a href="P.jsp?username=zhangshan&pwd=123456&age=25"> 链接</a>2)如果是form表示a.可显示的控件<input type="text" name="username">b.不需要显示在页面上<input type="hidden" name="pwd" value="<%=pwd%>">3)如果是jsp的include和forward标签<jsp:include flush="true" page="*.jsp?username=zhangsan&pwd=123456"><jsp:param name="age" value="28"></jsp:include>4)如果是JavaScript方式<script type="text/javascript">function demo(){var v = document.all('username').value;location.replace("*.jsp?username="+v+"&age=22");}</script><input type="text" name="username"><br><input type="button" value="点击"onclick="location.href='*.jsp?pwd=123456'"><br><input type="button" value="replace点击"onclick="location.replace('V.jsp?pwd=123456789')"><br><input type="button" value="动态取值" onclick="demo()">8. 数据提交方法提交方式分为get和post两种区别:A.post提交方式相对而言,比较安全;B.get只是适合于小数据的传递,也就是说,只有post才能传递大数据,比如在文件上传时,就必须将method指定为post.9. 从request作用域提取所有的参数名称方法:Enumeration<String> e= request.getParameterNames();while(e.hasMoreElements()){String str = e.nextElement();out.println(str+"="+request.getParameter(str));}10. 从request作用域提取多个值使用request作用域内的getParameterValues方法,请注意:选择项的名字必须相同,否则无法同时得到多个值<form action="*.jsp">个人爱好:<br><input type="checkbox" name="love" value="sport">体育<BR><input type="checkbox" name="love" value="finance">财经<BR><input type="checkbox" name="love" value="news">新闻<BR><input type="radio" name="sex" value="male" checked>男<input type="radio" name="sex" value="female">女<input type="submit"></form>//得到多个值String[] loves = request.getParameterValues("love");for(String str:loves){out.println(str);}for(int i=0,i < loves.length(),i++){String item=items.get(i);}String strSex = request.getParameter("sex");out.println(strSex);11. 请求分发器RequestDispatcherRequestDispatcher类表示一个请求的分发器,其效果等同于jsp:forward标签方法: request.getRequestDispatcher("P.jsp").forward(request,response);和jsp:forward相同的是,该分发器转向后的request和源页面中的request为同一个.二、典型问题1. JSP如何处理HTML FORM中的数据?通过内置的request对象即可,如下:<%String item = request.getParameter("item");int howMany = new Integer(request.getParameter("units")).intValue();%>2. JSP能进行递归调用吗?当然可以,如对form的提交给本页3. 在JSP如何包含一个静态文件?静态包含如下:<%@ include file="copyright.html" %>动态包含如下:<jsp:include page="copyright.html" />在JSP中可以使用如下方式包含纯HTML:<!--#include file="data.inc"-->4. 能象调用子程序一样调用JSP吗?当然可以,用<jsp:include page="relativeURL" flush="true"/>5. 在JSP中如何使用注释?主要有四中方法:1。
JSP学习笔记之基础语法jsp页⾯元素构成jsp页⾯组成部分有:指令,注释,静态内容,表达式,⼩脚本,声明。
jsp指令page指令:通常位于jsp页⾯的顶端,同⼀个页⾯可以有多个page指令include指令:将⼀个外部⽂件嵌⼊到当前jsp⽂件中,同时解析这个页⾯中的jsp语句taglib指令:使⽤标签库定义新的⾃定义标签,在jsp页⾯中启动⾃定⾏为page指令语法<%@page属性1="属性值" 属性2="属性值1,属性值2" 属性n="属性值n"%>jsp注释在jsp页⾯的注释。
HTML的注释:<!--html注释--> //客户端可见jsp的注释:<%--html注释--%> //客户端不可见jsp脚本注释://单⾏注释/**/多⾏注释jsp脚本在jsp页⾯中执⾏的java代码语法:<%java代码%>jsp声明在jsp页⾯中定义变量或者⽅法语法:<%!java代码%>jsp表达式在jsp页⾯中执⾏的表达式语法:<%=表达式%> //注意:表达式不以分号结束jsp页⾯的⽣命周期JSP的⽣命周期分为四个主要阶段是⾮常相似的Servlet的⽣命周期,并有如下⼏要点:JSP 编译:当浏览器请求⼀个JSP,JSP引擎⾸先检查它是否需要编译页⾯。
如果页⾯从来没有被编译,或者如果JSP已经被修改,因为它是最后⼀个编译JSP引擎编译的页⾯。
编译过程包括三个步骤:•解析JSP。
•打开JSP成servlet。
•编译这个servlet。
JSP初始化:当⼀个容器加载⼀个JSP它的任何服务请求之前调⽤jspInit()⽅法。
如果您需要执⾏JSP特定的初始化JSP 执⾏:JSP的⽣命周期的这个阶段代表请求的所有交互,直到JSP被破坏。
当浏览器请求⼀个JSP与页⾯已经被加载并初始化时,JSP引擎调⽤JSP中的_jspService() ⽅法。
Jsp我们学完也有好长一段时间间了,过程中总结的一点点基础知识,拿来与初学者分享,直到最后做我们一个小小的项目,宠物医院,也是用我们最简单的工具Jcreater4.0来做的,呵,到了Ecliplse下才发现,开发速度如此之快,不过这样也打好了我们的基础....不多说了,把所学到的小小总结发来至此吧,愿给初学者带来便利,同时愿高人给以指点不足之处.....首先来说一下我们jsp的课程:第一部分为Servlet技术,包括Servelt入门,会话跟踪,JavaMal和Servlet.第二部分就是Jsp技术,包括:jsp简介,jsp脚本和指令的使用,jsp隐式对象,JavaBean与jsp中的标准动作,jsp表达式语言,自定义标签,jsp自定义表签库.第三部分就是过滤器的设计模式,包括过滤器和MVC设计模式.一.Servlet知识及常见错误和规律.1.桌面运行程序与WEB应用程序在过程实质是一样的---基于请求与响应的过程.2.http协议(超文本传输协议)1).无状态:多次请求信息之间无联系.2).用于internet发送请求和响应消息3).使用端口接收和发送消息,默认为80端口.端口:为内存缓冲区(多线程接收数据)windows: 0---65535端口0---4096为系统端口3.什么是Servlet?Server let服务器端小程序.用来处理客户端发送的请求,并由服务器响应给客户端的java编写的程序.Servlet只在服务器运行4.Servlet详解:import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.util.*;public class MyServlet extends HttpServlet{public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{response.setContentType("text/html;charset=gb2312");request.setCharacterEncoding("gb2312");response.sendRedirect("Login.jsp"); //重定向方法request.getParameter(""); //读取客户端数据/ /以下方法为转发,不同于重定向的是:转发时数据不丢失.ServletContext context=this.getServletContext();RequestDispatcherdispatcher=context.getRequestDispatcher("/welcome.jsp");dispatcher.forward(request,response);...//以下方法为包含(用得相对较少)dispatcher.include(request,response);}public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{doGet(request,response);}}(2).当需要向Servlet传递参数的时候,Src="Servlet?name=' ' ";5.执行servlet时,发生下载提示:(1).可能性一:text/html;charset=GBK中间分号写成逗号.(2).可能性二:XML中配置信息出错.(3).可能性三:如定义全局变量时,例:CONTENT_TYPED在以后所用中放在双引号之中.(4).可能性四:当上面的text/html,charset中写错字符的时候,也会提示下载.6执行servlet时,发生404错误:(1).多为xml中配置出错.(2).可能在servlet通信方法中url出错.(3).表单提交时:action路径.(4).比较弱智的错误就是标记写错,请仔细检查.7.执行servlet时,发生403错误:(1).tomcat下站点里发生错误.8.执行servlet时,发生405错误:(1).servlet中没有post提交方法时.95.执行servlet时,发生500错误:(1).多数为servlet程序代码中发生异常错误.10.执行时,取出的数据为null.就要根据实际情况对应错误提示去找.11.执行jsp页时,发生500错误提示....多数为jsp页面在转译过程中发生编译错误! 甚是严重错误,可以按提示回头去找...二.XML配置<!--config中的配置信息,当中配置需要在servlet中的xml中--><servlet><init-param><param-name>sess</param-name><param-class>com.serv<param-class></init-param><servlet-name>Myservlet</servlet-name><servlet-class>com.Myservetl</servlet-class></servlet><!--此为对Myservlet进行映射--><servlet-mapping><servlet-name>Myservlet</servlet-name><servlet-class>/url</servlet-class><servlet-mapping><!--context中配置信息--><context-param><param-name>ses</param-name><param-class>com.ser</param-class></context-param>注意:配置信息只能读取,并且config是在单个Servlet中能访问,context是全局访问三.========================会话跟踪技术总结========================用户授权.隐藏表单域URL重写Cookie使用--------------------------------------------------------------------------------------------1.会话:是同一客户端和服务器之间在同一段时间的多次请求和响应.2.Session使用(重点)HttpSession session=request.getSession();session.setAttribute("name",Object); //附值session.getAttribute(); //取值session.removeAttributer();3.Cookie(类)1).Cookie是什么?cookie是一段字符串,由HTTP支持,在客户端可以永久保存.写入(硬盘).每次请求,响应中都会为cookie留有空间.2).用法:Cookie cookie=new Cookie("name",cookie); //必须指定cookie的键与值,且必须为字符串.response.addcookie(cookie);cookie.setMaxAge(3600); //以秒为单位.//读取客户端发送过来的cookie,返回值类型为: cookie数组request.getCookies();//循环读取键与值.使用过程:(1).生成cookie, new cookie("","")(2).设置生存周期>0,SetMaxAge(秒).(3).发送到客户端:response.addCookie(cookie);小常识:(1).一个网站最多向一个客户端写20个cookie.(2).一个客户端最多接收300个cookie.4.Session与Cookie这间的关系:session的ID作为Cookie的值在客户端与服务器之间进行传递.--------------------------------------------------------------------------------------------四.构建实体Bean的原则:/** 1.bean类为公有* 2.类成员为私有* 3.必有一个无参构造* 4.有set()和get()方法* 5.方法命名为setXxx()或getXxx()方法*/五.MVC实现数据封装此数据封装标准按MVC总结.所需内容: 1.Servlet 2.JavaBean 3.OperBean(DBconnection) 4.Jsp由Servlet提取前台数据,然后将数据封装于JavaBean中,再实例化OperBean,调用OperBean 中方法,将JavaBean对象以参数的形式传过去,并进行一系列的操作后,返回数据存入ArrayList中或者其它集合内,并将集合对象封装Session对象中,便于在前台取值.Servlet控制:........Arraylist lis=new ArrayList();String name=request.getParameter("username");JavaBean bean=new JavaBean();bean.setName(name);OperBean oper=new OperBean();lis=oper.operMethod(bean);HttpSession session=request.getSession();session.setAttribute("list",lis);OperBean逻辑:...public ArrayList OperMethod(JavaBean bean){ArrayList lis=new ArrayList();String usr=bean.getName("name");String sql="select * from student where name='"+usr+"'";DBconnection db=new DBconnection();...//操作数据业务return lis;}前台业务:...ArrayList list=(ArrayList)session.getAttribute("lis");Iterator ite=list.iterator();while(ite.harNext()) //遍历输出{JavaBean bean=(JavaBean)ite.next();.//取bean中值}//由此可以进行"用户登陆","数据的增删改查","注销登陆"等操作.....以上所有jsp技术都是没有与struts等框架相关的,只是简单的MVC思想,只有懂得以上简单的思想,才可以进一步的对框架这些高层次的东西钻研,我感觉是如此,毕竟我也是个初学者,还有好多知识不懂,也在不停的学习之中,如果有哪个朋友有好的见意或者好的学习方法,请多多指教!(1) JSP是一种Java服务器端技术,它用于在网页上显示动态内容。
MVC:JSP + servlet + javabeanJava:复习java基础知识Jsp:JSP、PHP、 三门技术被称为Web 后端开发的3P 技术,其中JSP 依托J2EE 平台更是Web 开发领域的一枝独秀。
学好JSP,是进入J2EE 企业开发的第一步。
通过本阶段内容的学习,你将能够搭建JSP 的开发环境,了解JSP 的基本语法及内部对象的使用。
Servlet:Servlet 是Server Applet 的缩写,也称为服务端小程序。
Servlet 技术一直处于不断的发展及进步之中,现在已经成为很多框架的技术基础,比如Spring、Struts2 等。
通过本阶段课程的学习,你将了解Servlet的运行原理,Servlet 过滤器的知识并能编写出相对复杂的Java Web 程序。
Javabean:JavaBeans是一个可重复使用的软件组件JavaBeans是一种Java类,通过封装属性和方法成为具有某种功能或者处理某个业务的对象,简称beans。
JSP页面应当将数据的处理过程指派给一个或几个beans来完成,我们只需在JSP页面中调用这个beans即可,从而有效的分离的静态工作部分和动态工作部分JDBC:JDBC 是Java 对关系型数据库进行访问的最主要的API,是Java 数据库编程的技术基础。
通过本阶段内容的学习,你能够掌握数据库的基本知识及JDBC 技术的基本原理,并能够使用JDBC编写出对数据库进行增删改查的简单程序Spring:Spring 是一个开源框架,也是一个基于控制反转、依赖注入的轻量级容器,它的出现大大简化了传统的J2EE 开发模式。
Spring 的主要优势之一就是其分层架构,该架构允许使用者自主选择任意件,同时为J2EE 应用程序开发提供集成框架。
现在,Spring 已经成为J2EE 企业开发中的标准配置。
Struts2:Spring MVC是一种基于Java的轻量级Web框架,它使用了MVC架构模式的思想,将web 层进行职责解耦,用来简化日常开发。
什么是动态网页技术?当浏览器进程发出HTTP request时,服务器端的CGI程序((CGI 脚本,script)运行起来,生成一个html文件,再作为HTTP的响应报文传送回浏览器。
如何理解JSP技术?JSP就是一种动态网页技术,简单理解JSP=HTML+Java程序段,具体来说是这样的:在HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp),这个文件放在Web Server上。
当浏览器向Web Server发出HTTP request的时候,Java 程序段被Java Serlet Engine驱动执行,执行结果连同HTML一起返回给浏览器。
Java Servlet是JSP技术的基础技术,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。
那什么是Servlet呢?JSP最终也是被编译成Servlet执行,Serlet实际上就是一个个可以运行的Java类。
Servlet命名是取了Sever和Applet,这个名字取得很好,Servlet就是运行在Sever上的Applet。
Java与Javascript有关系吗?是两个不同的东西,JavaScript 是一种描述性语言,它可以被嵌入HTML 的文件之中。
通过JavaScript 可以做到响应用户的需求事件(如表单的输入),这样当一位使用者输入一项信息时,它不需要通过网络传送到服务器端进行处理再传回来的过程,而可以直接在客户端进行事件的处理,用户体验好!所以说,JavaScript仅仅是HTML的一种辅助脚本,很简单的,而Java则是一套很复杂的技术,可以是程序设计语言、Java的runtime (实际上就是JVM,用于运行软件)、Java类库(用于开发软件)。
JSP学习笔记Java相关课程系列笔记之十笔记内容说明JSP(程祖红老师主讲,占笔记内容100%);目录一、JSP基础 (1)1.1什么是JSP (1)1.2为什么要使用JSP (1)1.3 JSP与Servlet的关系 (1)1.4如何写一个JSP文件 (1)1.5 JSP是如何运行的 (1)1.6隐含对象 (2)1.7指令 (2)1.8 JSP注释 (3)1.9案例:创建emplist.jsp页面,将表示逻辑交给JSP处理 (3)二、JSP标签和EL表达式 (4)2.1什么是JSP标签 (4)2.2 JSTL及其使用 (4)2.3什么是EL表达式 (4)2.4 EL表达式的使用 (4)三、JSTL中的几个核心标签 (7)3.1 if (7)3.2 choose (7)3.3 forEach (7)3.4 url (8)3.5 set (8)3.6 remove (8)3.7 catch (8)3.8 import (8)3.9 redirect (8)3.10 out (8)3.11 JSP标签是如何运行的 (8)3.12案例:将员工列表中的Java代码改为JSP标签,并添加分页 (9)四、自定义标签 (10)4.1如何写一个自定义标签 (10)4.2 JavaEE5.0中,如何使用EL表达式和JSTL (10)4.3案例:自定义标签 (10)4.4案例:修改之前员工列表中的日期显示 (11)五、MVC (13)5.1什么是MVC (13)5.2使用MVC的目的 (13)5.3如何使用MVC来开发一个Web应用程序(JavaEE) (13)5.4 MVC的优缺点 (13)5.5案例:简易贷款(贷款数小于余额数*10) (13)5.6修改5.5案例,使用户无法直接访问view.jsp页面 (15)1一、JSP基础1.1什么是JSPJSP(Java Server Page)是Java服务器端动态页面技术。
JSP技术通过以上的案例发现Servlet做为一个动态网页开发技术太不靠谱。
尤其是需要编写一个页面的时候,需要指定页面的模板标签、还要处理很多的业务逻辑。
因此比较繁琐。
思考:Servlet为什么写一个页面那么吃力?主要的原因在于Servlet实在java中写标签。
鉴于以上的原因那么SUN提供了动态网页开发技术之JSP。
JSP即Java Server Page。
可见JSP本身是页面,那么在页面那种编写HTML标签应该非常轻松。
◆JSP体验<body>system date: <%=new java.util.Date() %></body>总结:1.servlet就是在java中写html比较烦,servlet是做获取参数并请求转发。
2.jsp就是html中写java比较烦,jsp主要是显示数据。
JSP运行原理JSP本质是一个Servlet只不过这个Servlet更加善于编写页面。
JSP语法学习JSP应该从以下几个方面学习:◆JSP模板元素JSP是在HTML中写java代码,那么JSP中最基本的是HTML元素。
我们将这些元素称之为JSP的模板元素。
◆JSP输出表达式JSP表达式主要用于输出变量以及输出表达式。
语法:<%= 表达式%>表达式后面不能有分号。
举例1:输出一个表达式。
2>1 = <%= 2>1 %><br/><%=page %><br/>运行结果2>1 = trueorg.apache.jsp.index_jsp@1135cd9总结:所有的JSP页面中的输出表达式会被翻译在java类中的_jspService()并使用out.write()方法进行了封装。
该输出表达式还可以输出变量,但是当前需要先定义一个变量。
JSP脚本JSP脚本主要用于定义局部变量和编写JAVA业务代码。
语法:<% JAVA代码%>举例1:使用JSP脚本定义变量。
JSP学习笔记(一)-----概述1.JSP是Java Server Pages的简写。
2.用JSP开发的Web应用是跨平台的.3.JSP技术是Servlet技术的扩展。
Servlet是平台无关的,100%纯Java的Java服务端组件。
4.下面就是一个简单的JSP页面:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><TITLE>欢迎访问网上商店</TITLE></HEAD><BODY><H1>欢迎</H1><SMALL>欢迎,<!-- 首次访问的用户名字为"New User" --><% out.println(Utils.getUserNameFromCookie(request)); %>要设置帐号信息,请点击<A HREF="Account-Settings.html">这里</A></SMALL><P>页面的其余内容。
.</BODY></HTML>5.下面是JSP 和其他类似或相关技术的一个简单比较:1).JSP和Active Server Pages(ASP)相比Microsoft的ASP是一种和JSP类似的技术。
JSP和ASP相比具有两方面的优点。
首先,动态部分用Java编写,而不是VB Script或其他Microsoft语言,不仅功能更强大而且更易于使用。
第二,JSP应用可以移植到其他操作系统和非Microsoft的Web服务器上。
2).JSP和纯Servlet相比JSP并没有增加任何本质上不能用Servlet实现的功能。
但是,在JSP中编写静态HTML更加方便,不必再用 println语句来输出每一行HTML代码。
更重要的是,借助内容和外观的分离,页面制作中不同性质的任务可以方便地分开:比如,由页面设计专家进行HTML设计,同时留出供Servlet程序员插入动态内容的空间。
Servlet笔记第一:web项目异常信息,问题详情200:表示正常。
404:表示找不到界面。
403:禁止你访问。
500:程序内部错误。
第二:javaEE问题javaEE:1:不提供jar包,只提供一些列的标准。
第三:Servlet 详情servlet:是可以在任何服务器端运行的小程序。
实现servlet三个类:GenericServlet(实现servlet,但还有方法未实现),HttpServlet(抽象类,继承了GenericServlet)。
HttpServlet类:doGet()方法:处理get请求。
(就是在url地址栏里,写地址)doPost()方法:处理post请求。
(就是在form提交,method=“post”)doHead()方法:只获取http的头信息,不获取内容。
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {}:request:参数,封装了客户端到服务器端的一系列的请求。
response:参数,封装了服务器端到客户端的一系列的反馈。
init();init(参数);含有两个init()方法。
init()方式只执行一次,第一次初始化的时候。
第四:Servlet生命周期servlet生命周期:JAVAEE的要求servlet就new一个,只要程序不停止,那么这个new的对象一直在内存中。
有的服务器很怪,new 了多个,利用池的方式对外提供服务。
destroy()://在webapp退出的时候Servlet的声明周期:加载:classLoader实例化:new初始化:init(servletConfig)//servletConfig:servlet配置处理请求:service doGet doPost退出服务:destroy()如果不是分布式,那么servlet只有一个servlet实例对象。
JSP1、使用<%,%>加入JA V A程序片。
JSP基于JA V A语言,名字区分大小写.2、运行原理【首次运行】JSP文件→译成java文件→生成字节码→响应请求【再次运行】直接运行字节码→响应请求——————————————————————————当多个客户请求一个jsp文件时,JSP引擎每一个客户启动一个线程而非进程,效率提升3、服务器搭配:1、先安装JDK2、解压缩tomcat文件夹3、增加环境变量:JA V A_HOME == JDK安装目录TOMCAT_HOME == TOMCA T安装目录PATH == JDK安装目录下的bin目录4、启动tomcat\bin\startup.bat脚本,启动tomcat服务器5、浏览http://localhost:8080,测试安装6、运行tomcat\bin\shutdown.bat来关闭tomcat目录4、服务器目录:tomcat\webapps\root为网站根目录tomcat\webapps\work为JSP编译的JA V A和字节码文件存放目录二.JSP的基本结构1、JSP元素:HTML、JSP标签、就是和方法、JA V A程序、JA V A表达式。
2、成员变量和成员方法的声明:在<%! 和%>标记符号之间声明成员变量时,成员变量和成员方法是类级别变量,多个客户共享这些成员变量。
——问题——当多个线程【多个客户】访问同一个共享变量时,并试图同时修改一个变量时,将会发生共享冲突,需要使用synchronized进行锁定在<%!和%>里声明的方法为成员方法时,成员方法里的局部变量当方法执行完成时就回收内存。
但在方法里使用成员变量里。
也需要使用synchronized进行锁定在<%!和%>标记符号之间声明的类,和上面在<%! 和%>之间声明的变量和方法一样。
是子类。
多个进程共享一个类对象3、程序片:在<% 和%>中插入JA V A程序。
Jsp学习笔记by icecold ----------------------------------------------------------------------------------------------------------------------1、管理cookiea)Cookie是小段的文本信息,通常使用cookie可以标识用户身份,记录用户名或密码、跟踪重复用户。
b)Cookie在服务器端生成并发送给浏览器,浏览器将cookie的key/value保存到某个指定的目录中,服务器的名称与值可以由服务器端定义。
c)通过cookie的getCookies()方法可以获取到所有的cookie对象集合,然后通过cookie对象的getName()方法获取到指定名称的cookie,再通过getValue()方法即可获取到cookie对象的值。
另外,讲一个cookie对象发送到客户端使用了response对象的addCookie()方法。
2、Response对象a)Response代表的是对客户端的响应。
主要是将JSP 容器处理过的对象传回到客户端,response对象也具有作用域,它只在JSP页面内有效。
b)重定向网页是通过使用sendRedirect()方法,将响应发送到另一个指定的位置进行处理。
重定向可以将地址重新定向到不同的主机上,在客户端浏览器上将会得到跳转的地址,并重新发送请求链接。
用户可以从浏览器的地址栏中看到跳转后的地址。
进行重定向操作后,request中的属性全部失效,并且进入一个新的response对象的作用域。
c)在JSP页面中使用sendRedirect()方法的时候前面不要有html代码,并且在重定向操作之后紧跟一个return,因为重定向之后下面的代码已经没有意义了,并且还可能产生错误。
3、设置HTTP文件头a)response.setHeader("refresh","5");//设置网页每5分钟自动刷新b)Response.setHeader("refresh","2,URL=welome.jsp");//设置2秒后自动转向欢迎页面c)response.setContentType("text/html");//设置相应类型4、设置输出缓冲a)一般情况下,服务器端要输出到客户端的内容不会直接写到客户端,而是先写到一个输出缓冲区;只有在下面的三种情况下,才会把缓冲区的内容写到客户端。
JSP学习笔记1.JSP基础语法 (2)1.1JSP的9种内置对象: (2)1.2四种属性范围 (2)1.3request主要用途 (2)1.4response操作 (3)1.5cookie的基本操作 (4)1.6Session内置对象 (4)1.7application对象 (5)1.8config和web (5)1.9分页实现 (6)2.J AVA B EAN的基本应用 (6)2.1javabean的编写要求 (6)3.EL表达式 (7)1.JSP基础语法1.1 JSP的9种内置对象:1.2四种属性范围Page:当前页:pageContext一个属性只能在一个页面中取得,跳转到其他页面无法取得。
Request:一次服务器请求范围:一个页面中设置的属性,只要经过了服务器跳转,则跳转之后的页面可以继续获得属性。
Session:一次会话:一个用户设置的内容,只要是与此用户相关的页面都可以访问。
Application:上下文中:在整个服务器上设置的属性,所有人都可以访问。
1.3 request主要用途1.request接受对象数据,reques.getParameter(“数据名称”);2.通过两种处理乱码方式。
2.1.2.2.通过setCharacterEncoding(“GBK”);3.Post和Get的区别。
Get提交·会在地址栏中显示提交的内容;·地址栏最大能存放4K~5K容量的内容,大量无法提交。
Post提交·不再地址栏中显示提交的内容;·本身不受地址栏长度限制,但如果上传内容过多会产生http超时。
4.隐藏域传递参数<Input type=”hidden” name = “name”,value=”value”/>隐藏域内容客户端不会直接显示,可以用来传递参数。
5.接收多个重名参数String[] getParameterValues(String name) 获得一个所有内容的对象数组Enumeration getParameterNames() 获取所有参数名称的一个Enumeration6.获取IP地址和端口客户端IP:String getRemoteAddr()客户端端口:int getRemotePort()服务器IP:String getLocalAddr()服务器端口:int getLocalPort()1.4 response操作1.Response的主要方法2.Request取得头信息String getHeader(String name) 根据名称取得头信息Enumeration getHeaders(String name) 取得全部头信息,返回Enumeration类型,可以通过Enumeration enu = request.getHeaders() 获取全部头信息。
第一、二、三课
jsp入门
jsp原理
jsp声明<%! %> 在这里面声明的变量是全局变量<% %>在这里面声明的变量是局部变量
注释:
<%-- -- % > <%// % > <%/* */ % > 表达式:
<%= %>
九大内置对象
jsp 语法
1.指令元素(编译指令)
①page指令
pl:<%@page language="java"import="java.util.*"pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
常用的属相有import,contentType,errorPage,isErrorPage
②include 指令
<%@include file="路径"%>
Ps:路径是相对路径。
由于该方法引来的页面会和当前页编写成一个serlet文件,所以被引页和当前页的页面编码得相同。
③taglib指令
(略)
2.脚本元素
<%=java表达式%>
<% java代码//int i = 10 局部变量%>
<%! int j = 20 // 全局变量%>
3.动作元素(运行指令)
ps:<jsp:include page=”” /> 上面的错了。
一. JSP工作原理:1.JSP存在的目的是为了能够让web页面的内容与形式分开,即把html编码和业务逻辑分离.通常JSP可以生成动态的html页面.业务逻辑交给Servlet和JavaBean或其他的程序来完成.JSP可以通过代码块来访问业务逻辑.2.JSP页面会生成servlet代码,服务器执行JSP程序过程如下查找JSP二. JSP页面的组成JSP中有两大类数据组成,一类是JSP标志;另一类是Html的代码.1.JSP标志有以下的几中:a)<%=expression>:计算表达式并输出结果.相当于到servlet类的service()方法中插入out.println(expression);b)<%!变量%>这时一个JSP变量的声明,可以在JSP的标志中使用.相当于向servlet类插入全局属性.声明的位置可以在JSP文件的任意位置.c)<%code%>;把这部分代码块插入到servlet类的service()方法中.d)<%@ page language="java" import="java.util.*" %>在page指令中,定义了JSP文件的全局属性.e)<%@ include file="relativeURL" %> relativeURL是本jsp所在的目录包含指令,向当前jsp页面中插入一个静态文件的内容.2.隐含的JSP对象变量:为了简化JSP表达式和Scriptlet的代码,JSP提供了8个预先定义的变量(或称为隐含对象)。
这些变量是request、response、out、session、application、config、pageContext和page。
和servlet一样,他们的生命周期是:Request , response , out , PageContext , page…………………>Application , config…………………………………………………………………>Session……………………………………………>1. application是一个ServletContext,也可以通过getServletConfig().getContext()获得。
MVC:JSP + +Java:复习java基础知识Jsp:JSP、PHP、 三门技术被称为Web 后端开发的3P 技术,其中JSP 依托J2EE 平台更是Web 开发领域的一枝独秀。
学好JSP,是进入J2EE 企业开发的第一步。
通过本阶段内容的学习,你将能够搭建JSP 的开发环境,了解JSP 的基本语法及内部对象的使用。
Servlet:Servlet 是Server Applet 的缩写,也称为服务端小程序。
Servlet 技术一直处于不断的发展及进步之中,现在已经成为很多框架的技术基础,比如Spring、Struts2 等。
通过本阶段课程的学习,你将了解Servlet的运行原理,Servlet 过滤器的知识并能编写出相对复杂的Java Web 程序。
Javabean:JavaBeans是一个可重复使用的软件组件JavaBeans是一种Java类,通过封装属性和方法成为具有某种功能或者处理某个业务的对象,简称beans。
JSP页面应当将数据的处理过程指派给一个或几个beans来完成,我们只需在JSP页面中调用这个beans即可,从而有效的分离的静态工作部分和动态工作部分JDBC:JDBC 是Java 对关系型数据库进行访问的最主要的API,是Java 数据库编程的技术基础。
通过本阶段内容的学习,你能够掌握数据库的基本知识及JDBC 技术的基本原理,并能够使用JDBC编写出对数据库进行增删改查的简单程序Spring:Spring 是一个开源框架,也是一个基于控制反转、依赖注入的轻量级容器,它的出现大大简化了传统的J2EE 开发模式。
Spring 的主要优势之一就是其分层架构,该架构允许使用者自主选择任意件,同时为J2EE 应用程序开发提供集成框架。
现在,Spring 已经成为J2EE 企业开发中的标准配置。
Struts2:Spring MVC是一种基于Java的轻量级Web框架,它使用了MVC架构模式的思想,将web 层进行职责解耦,用来简化日常开发。
Spring MVC 使用简单,学习成本低,很容易就写出性能优秀的程序。
目前越来越多的项目选择使用Spring MVC 作为其Web开发框架。
Hibernate:Hibernate 是一个开放源代码的对象关系映射框架,它对JDBC 进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
Hibernate 可以应用在任何使用JDBC 的场合,既可以在Java 的客户端程序使用,也可以在Servlet/JSP 的Web 应用中使用,最具革命意义的是,Hibernate 可以在应用EJB 的J2EE 架构中取代CMP,完成数据持久化的重任。
初级准备:JDK、Tomcat(Web服务器)、MySQL(数据库)、JDBC(连接数据库)、Eclipse(软件)、设置环境变量*Java:类,继承,实现,接口……Jsp内置对象:request 对象、response 对象、session对象**、application对象、outJDBC学习实例(先复习数据库):一:利用MySQL Workbench访问数据库,并且创建表。
1.新建一个数据库jsp_db,并且设为默认数据库(set as default schema)。
2.创建表代码:create table tbl_user(id int(11) unsigned not null auto_increment,name varchar(50) not null default'',password varchar(50) not null default'',email varchar(50) default'',primary key(id))engine=InnoDB default charset=utf8;create table tbl_address(id int(11) unsigned not null auto_increment,city varchar(50) not null default'',country varchar(50) not null default'',user_id int(11)unsigned not null, primary key(id))engine=InnoDB default charset=utf8;3.为表插入记录insert into tbl_user(id,name,password,email)values (1,'xiaoming','123456',''),(2,'xiaozhang','123456','');insert into tbl_address(city,country,user_id) values ('beijing','china','1');insert into tbl_address(city,country,user_id) values ('tianjin','china','2');二:利用JDBC对数据库进行查询的操作。
1.将mysql-connector-java-2.进入属性页面,选择Java Build Path,进入Libraries标签页。
选择Add Jars。
找到刚才拷贝进来的jar包,选择ok。
既成功添加了JDBC的驱动程序。
3.创建一个类,在jdbc包下,命名为JDBCTest。
import ;import ;import ;import ;public class JDBCTest {public static void main(String[] args) {String sql="SELECT*FROM tbl_user";Connection conn=null;Statement st=null;ResultSet rs=null;try {Class.forName("; [注册mysql的jdbc的驱动程序]conn=DriverManager.getConnection("jdbc:","root","1234"); 【获取mysql数据库链接,mysql数据库的url,用户名,密码】st=conn.createStatement();rs=st.executeQuery(sql);while(rs.next()){"id")+" ");"name")+" ");"password")+" ");"email")+" ");;}} 【遍历数据库内容】catch (Exception e) { e.printStackTrace();}finally{try {rs.close();} catch (Exception e2) {}try {rs.close();} catch (Exception e3) {}try {rs.close();} catch (Exception e4) {}}}} 【清理】三:利用JDBC对数据库进行插入更新以及删除工作1.插入:public class JDBCTest {public static Connection getConnection(){Connection conn=null;try{Class.forName("");conn=DriverManager.getConnection("jdbc:","root","1234");}catch(Exception e){e.printStackTrace();}return conn;} 【取得数据库连接】public static void insert(){Connection conn=getConnection();try {String sql="INSERT INTO tbl_user(name,password,email)"+"VALUES('Tom','123456','')";Statement st=conn.createStatement();int count=st.executeUpdate(sql); 【插入操作】"向用户表中插入了"+count+"条记录");conn.close();} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {insert();}2.更新:String sql="UPDATE tbl_user SET email='' WHERE name='Tom'"; 【将sql语句改成】3.删除:String sql="DELETE FROM tbl_user WHERE name='Tom'";4.事务处理:事务就是一个完整的数据库操作。
防止有的操作成功,有的操作失败而导致数据库数据出错误。
新建一个Java类,在jdbc包下。
输入代码:import ; import ;import ; import ;public class TransactionTest {public static Connection getConnection(){Connection conn=null;try {Class.forName("");conn=DriverManager.getConnection("jdbc:","root","1234");} catch (Exception e) { e.printStackTrace();} return conn; }public static void insertUserData(Connection conn) throws SQLException{String sql="INSERT INTO tbl_user(id,name,password,email)"+"VALUES('10','Tom','123456','')";Statement st=conn.createStatement();int count=st.executeUpdate(sql);"向用户表中插入了"+count+"条记录");}public static void insertAddressData(Connection conn) throws SQLException{String sql="INSERT INTO tbl_address(id,city,country,user_id)"+"VALUES('1','shanghai','china','10')";Statement st=conn.createStatement();int count=st.executeUpdate(sql);"向地址表中插入了"+count+"条记录");}public static void main(String[] args) {Connection conn=null;try { conn=getConnection();conn.setAutoCommit(false);insertUserData(conn);insertAddressData(conn);mit();}catch (Exception e) {"=======捕获到SQL异常=======");e.printStackTrace();try {conn.rollback();"=======事物回滚成功=======");}catch (Exception e2) {e2.printStackTrace();}finally{try {if(conn!=null){conn.close();}} catch (Exception e3) {e3.printStackTrace();} } } } }5.程序优化1.0,数据库链接工厂类(1)dbconfig.properties文件:driver=dburl=jdbc:user=rootpassword=1234(2)ConnectionFactory.java文件,在util包下。