韩顺平_细说servlet_笔记__完整版
9.Servlet学习笔记
Servlet学习笔记Java相关课程系列笔记之九目录一、Servlet概述 (1)1.1 B/S架构(了解) (1)1.2什么是Servlet (1)1.3什么是Tomcat (2)1.4如何写一个Servlet(不使用开发工具) (3)1.5使用MyEclipse开发Servlet (5)1.6 Servlet是如何运行的 (6)1.7常见错误及解决方式 (6)1.8案例:根据请求次数显示结果和显示当前时间 (7)二、HTTP协议 (8)2.1什么是HTTP协议 (8)2.2通讯的过程 (8)2.3数据格式 (8)2.4 TCP/IP Monitor的使用 (9)2.5 get请求与post请求 (9)2.6如何读取请求参数 (9)2.7访问数据库(MySql) (10)2.8案例:添加员工(访问MySql数据库) (10)2.9异常:IllegalStateException (11)三、编码问题 (12)3.1 Java语言在内存当中默认使用的字符集 (12)3.2编码 (12)3.3解码 (12)3.4 Servlet如何输出中文 (12)3.5如果表单有中文参数值,也需要注意编码问题 (12)3.6案例:根据请求正确显示中文 (12)3.7将中文数据插入到数据库 (13)四、重定向 (14)4.1什么是重定向 (14)4.2如何重定向 (14)4.3注意两个问题 (14)4.4两个特点 (14)4.5重定向原理图:以2.8案例为例 (14)五、DAO (15)5.1什么是DAO (15)5.2如何写一个DAO (15)5.3工厂类 (15)六、工厂设计模式 (16)6.1什么是工厂 (16)6.2使用工厂设计模式的好处 (16)6.3如何使用工厂模式 (16)6.4案例:为2.8案例添加新功能,并使用DAO和工厂模式 (16)1七、Servlet容器处理细节 (19)7.1 Servlet容器如何处理请求资源路径以及匹配 (19)7.2一个Servlet如何处理多种请求 (19)八、Servlet的生命周期 (20)8.1 Servlet的生命周期的含义 (20)8.2 Servlet生命周期的四个阶段 (20)8.3实例化 (20)8.4初始化 (20)8.5就绪 (20)8.6销毁 (21)8.7 Servlet生命周期图 (21)8.8 Servlet生命周期相关的几个接口与类 (21)九、JSP(简要介绍,详细内容见JSP笔记) (23)9.1什么是JSP (23)9.2为什么要使用JSP (23)9.3 JSP与Servlet的关系 (23)9.4如何写一个JSP文件 (23)9.5 JSP是如何运行的 (23)9.6指令 (24)9.7案例:创建emplist.jsp页面,将表示逻辑交给JSP处理 (24)十、请求转发 (26)10.1什么是转发 (26)10.2如何转发 (26)10.3编程需要注意的两个问题 (26)10.4转发原理图 (26)10.5转发的特点 (27)10.6转发和重定向的区别 (27)10.7何时用重定向 (27)10.8何时用转发 (27)10.9案例:修改6.4案例中step7中的ListEmpServlet.java (28)十一、异常的处理 (30)11.1用输出流out (30)11.2用转发的方式 (30)11.3让容器处理系统异常 (30)11.4案例:将10.9案例中的step3中的所有catch块修改 (30)十二、路径问题 (31)12.1什么是相对路径 (31)12.2什么是绝对路径 (31)12.3如何写绝对路径 (31)12.4如何防止硬编码 (31)12.5案例:相对、绝对路径对比 (31)12.6四种情况下,正确的绝对路径写法 (32)十三、状态管理 (33)13.1什么是状态管理 (33)213.3 cookie (33)13.4如何创建一个cookie (33)13.5查询cookie (33)13.6编码问题 (34)13.7 cookie的生存时间 (34)13.8 cookie的路径问题 (34)13.9 cookie的限制 (35)13.10案例:写一个CookieUtil (35)13.11 session(会话) (36)13.12如何创建一个session对象 (36)13.13 HttpSession接口中提供的常用方法 (36)13.14 session的超时 (37)13.15用户禁止cookie以后,如何继续使用session (37)13.16 url重写 (37)13.17 session的优点 (37)13.18 session的缺点 (38)13.19案例:session验证和访问次数 (38)13.20案例:验证码 (39)13.21案例:购物车 (41)十四、过滤器 (45)14.1什么是过滤器 (45)14.2如何写一个过滤器 (45)14.3案例:敏感字过滤器 (45)14.4过滤器的优先级 (46)14.5初始化参数 (47)14.6优点 (47)十五、监听器 (48)15.1什么是监听器 (48)15.2容器会产生两大类事件 (48)15.3如何写一个监听器 (48)15.4 ServletContext(Servlet上下文) (48)15.5如何获得Servlet上下文 (48)15.6 Servlet上下文的作用 (48)15.7案例:统计在线人数 (49)十六、上传文件 (51)16.1如何上传文件 (51)16.2案例:上传文件 (51)十七、Servlet线程安全问题 (53)17.1为何Servlet会有线程安全问题 (53)17.2如何处理线程安全问题 (53)十八、Servlet小结 (54)18.1 Servlet基础 (54)18.2 Servlet核心 (54)318.4数据库访问 (54)18.5过滤器和监听器 (54)18.6典型案例和扩展 (54)十九、其他注意事项 (55)19.1连接数据库的工具 (55)19.2知名网站 (55)19.3 C/S架构:Client/Server (55)19.4 B/S架构:Browser/Server (56)4一、Servlet概述1.1 B/S架构(了解)1)什么是B/S架构客户端使用浏览器,服务端使用web浏览器,客户端跟服务器之间使用HTTP协议进行通讯。
[原创精品] Servlet 课堂笔记 (六)
38.Servlet(一)如何在servlet中显示图片(二)分页技术详解(三)用户登录系统功能改进39.在servlet中显示图片在你的webApps(即你的目录下,建立一个文件夹,比如imgs),然后将图片拷贝到文件夹下,在servlet中添加:<img src=”/imgs/图片名”> 即可40. 在servlet中显示图片实例// 欢迎界面 Welcome.javapackage com.ltl;import javax.servlet.http.*;import java.io.*;public class Welcome extends HttpServlet{// 处理get请求// req 用于获得客户端(浏览器)的信息// res 用于向客户端(浏览器)返回信息public void doGet(HttpServletRequest req,HttpServletResponse res){Connection ct=null;Statement sm=null;ResultSet rs=null;// 业务逻辑try{// 得到sessionHttpSession hs=req.getSession(true);String val=(String)hs.getAttribute(“pass”);// 判断if(val==null){// 非法登录res.sendRedirect(“login?info=error1”);return;}res.stcharacterEncoding(“gbk”);PrintWriter pw=res.getWriter();// 在servlet中显示图片pw.println(“<img src=imags/1.GIF><br>”);pw.println("welcome hello<br>");pw.println(“你的用户名是:”+val);// 做过超链接Pw.println(“<br><a href=login>返回重新登录</a>”);}catch(Exception e){e.printStackTrace();}}// 处理post请求// req 用于获得客户端(浏览器)的信息// res 用于向客户端(浏览器)返回信息public void doPost(HttpServletRequest req,HttpServletResponse res){this.doGet(req,res);}}41.分页技术分页技术是任何一个网站(BBS,网上商城,blog)都会使用的技术,因此学习b/s开发就一定要掌握该技术42.分页算法——分页方法(一)四个变量int pageSize: 每页显示多少条记录int pageNow: 希望显示第几页int pageCount: 一共有多少页int rowCount: 一共有多少条记录说明:pageSize 是指定的pageNow用户选择的rowCount 是从表中查询得到的pageCount 是计算出来的该计算式为:if(rowCount%pageSize==0){pageCount==rowCount / pageSIZE}else{pageCount=rowCount / pageSize+1;}43.分页算法——分页方法(二)select 字段名列表from 表名where id between ? and ?以users表为例,显示第三页,该查询语句就是:select * from users where userId between 7 and 9这个SQL语句确实比较快,但是有个问题,就是若表的id被删除了,则某页可能就少一条记录解决方法如下:select top pageSize 字段名列表from 表名where id not in(select top pageSize*(pageNow-1)id from 表名)以users表为例,显示第三页,该查询语句就是:Select top 3 from users where userId not in(select top 6 userId from users) 以users表为例,显示第二页,该查询语句就是:Select top 3 from users where userId not in(select top 3 userId from users) 44.分页技术应用实例分页是非常有趣的,我们可以在welcome页面增加显示用户信息,并进行分页显示当登录用户的级别是管理员(也就是级别为1),就在welcome页面显示所有用户信息// 欢迎界面 Welcome.javapackage com.ltl;import javax.servlet.http.*;import java.io.*;public class Welcome extends HttpServlet{// 处理get请求// req 用于获得客户端(浏览器)的信息// res 用于向客户端(浏览器)返回信息public void doGet(HttpServletRequest req,HttpServletResponse res){Connection ct=null;Statement sm=null;ResultSet rs=null;// 业务逻辑try{// 得到sessionHttpSession hs=req.getSession(true);String val=(String)hs.getAttribute(“pass”);// 判断if(val==null){// 非法登录res.sendRedirect(“login?info=error1”);return;}res.stcharacterEncoding(“gbk”);pw.println(“<img src=imags/1.GIF><br>”);pw.println("welcome hello<br>");pw.println(“你的用户名是:”+val);// 做过超链接pw.println(“<br><a href=login>返回重新登录</a>”);//===========分页的功能==============int pageSize=3; //一页显示几条记录int pageNow=1; //希望显示第几页int rowCount=0; //共有几条记录(查表)int pageCout=0; //共有几页(计算)// 动态地接受pageNowString sPageNow=req.getParameter(“pageNowok”);if(sPageNow!=null){pageNow=Integer.parseInt(sPageNow);}//得到rowCount// 连接数据库(加载驱动)Class.forname(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);// 得到连接ct=Dri verManager.getConnection(“jdbc:microsoft.jdbc.sqlserver://127.0.0.1:1433;datebaseName=spdb”,”sa”, ps=ct.prepareStatement(“select count(*) from users”);rs=ps.executeQuery();if(rs.next()){rowCount=rs.getInt(1);}// 计算pageCountif(rowCount%pageSize==0){pageCount=rowCount/pageSize;}else{pageCount=rowCount/pageSize+1;}ps=ct.prepareStatement(“Select top “+pageSize+” * from userswhere userId not in(select top “+pageSize*(pageNow-1)+” userId fromusers)”);// 给?赋值//ps.setInt(1,pageSize); //给第一个问号赋值//ps.setInt(2,pageSize*(pageNow-1)); //给第二个问号赋值rs.ps.executeQuery();// 表头pw.println(“<table border=1>”);pw.println(“<tr><th>id</th><th>name</th><th>password</th><th>mail</th><th>grade</th></tr>”);while(rs.next()) //显示rs 结果集{pw.println(“<tr>”);pw.println(“<td>”+rs.getInt(1)+”</td>”);pw.println(“<td>”+rs.getString(2)+”</td>”);pw.println(“<td>”+rs.getString(3)+”</td>”);pw.println(“<td>”+rs.getSting(4)+”</td>”);pw.println(“<td>”+rs.getInt(5)+”</td>”);pw.println(“</tr>”);}pw.println(“</table>”);// 显示超链接for(int i=1;i<=pageCount;i++){pw.println(“<a href=welcome?pageNow ok=”+i+”>”+i+”</a>”);}catch(Exception e){e.printStackTrace();}}// 处理post请求// req 用于获得客户端(浏览器)的信息// res 用于向客户端(浏览器)返回信息public void doPost(HttpServletRequest req,HttpServletResponse res){this.doGet(req,res);}}45.实现分页的“上一页”和“下一页”的功能46.分页方法测试效率当表的记录超过100万条记录时,它的翻页就很慢,原因是它的查询的结果集是整张表。
Servlet笔记
目录第一章服务器环境搭建 (2)1.Tomcat服务器环境搭建 (2)2. tomcat文件结构 (2)第二章Servlet (3)1.定义: (3)2.servlet的生命周期 (3)3.使用MyEclipse创建servlet流程 (3)4.Web Project文档目录说明 (4)5.web.xml的配置归纳 (4)[1]配置servlet类 (4)[2]配置Servlet的实例化顺序: (5)[3]配置初始化参数 (5)[4]配置ServletContext (5)[5]配置Session有效时间 (6)6. doget()和dopost()向servlet发送请求的区别 (6)7.servlet的类和接口 (6)7.1javax.servlet包: (7)(1)Servlet接口: (7)(2)ServletConfig接口:servlet 配置对象 (7)(3)ServletContext接口:ServletContext(服务器-公共空间) (8)(4) ServletRequest接口: (9)(5)ServletResponse接口: (10)(6) Filter接口:过滤器 (10)(7) ServletContextListener接口:监听器 (12)7.2javax.servlet.http包: (14)(1) HttpSession接口:session(服务器-浏览器空间) (14)(2)HttpServletRequest接口 (15)(3)HttpServletResponse接口 (15)(4) HttpServlet类 (15)(5) Cookie类 (16)第三章常用技术归纳 (17)1.参数传递归纳: (17)2.在Servlet中操作数据库 (18)3.分页显示技术 (18)4.数据库连接池技术 (18)第一章服务器环境搭建1.Tomcat服务器环境搭建(1)环境变量配置①java-path: //配置JDK②tomcat-path: //配置服务器主目录(2)服务器端口配置在server.xml文件中Connector标签:四位数,最多65523,但一般网络用80开头(3)启动服务启:执行Bin目录下的startup.bat脚本文件。
Servlet学习笔记(一)
Servlet学习笔记(一)1.一个Servlet程序就是一个实现了特殊接口的Java类,它由支持servlet(具有servlet引擎)的web服务器调用和启动运行。
一个Servlet程序负责处理它所对应的一个或一组url地址的访问请求,并接收客户端发出的访问请求信息和产生响应内容。
2.所有的servlet(自定义的)都必须实现servlet接口(javax.servlet.Servlet)。
由于Servlet接口中有很多方法不需要实现,因此可以继承GenericServlet类。
GenericServlet实现了servlet接口的基本特征和功能。
javax.servlet.http.HTTPServlet类继承了GenericServlet类,并在其基础上进行了一些对HTTP 协议的扩充。
3.客户端每次访问一个支持HTTP的Servlet程序时,Servlet引擎都将调用Servlet的service 方法来进行处理。
HTTPServletRequest用于封装HTTP请求,HTTPServletResponse用于封装HTTP响应。
HTTPServletResponse对象的getWrite()方法可以获得一个文本输出流对象。
其内容可以作为响应消息的内容。
4.Servlet的注册与运行:(1).Servlet程序必须通过Servlet引擎来启动运行,并且存储目录有特殊要求,通常需要存储在<Web应用程序>/WEB-INF/classes/目录中。
(2).Servlet程序必须在Web应用程序的web.xml文件中进行注册和映射其访问路径,才可以被servlet引擎加载和被外界访问。
(3).<servlet>元素用于注册一个servlet。
<servlet-name>用于设置注册名,<servlet-class>用于设置servlet的完整路径。
韩顺平servlet笔记(完整代码)
目录一、前序工作 (2)二、Classes文件写一个Hello.java (2)写java文件 (2)配置web.xml文件 (3)上网验证 (4)三、写登陆界面 (4)写java文件 (5)配置web.xml文件 (7)上网验证 (7)四、同一用户的不同页面共享数据 (8)用sendRedirct()方法实现 (8)用隐藏表单实现 (11)Session (11)五、Servlet链接数据库 (13)建数据库的表 (13)写java文件 (13)放jar包 (16)Sql注入漏洞 (16)六、Servlet中显示图片 (18)七、分页技术 (19)八、cookie (24)使用cookie保存用户名,密码,在一定时间不用重复登陆 (24)删除cookie (29)九、网站框架 (30)十、ServletContext (38)网站计数器 (39)优化 (40)用户ip地址 (42)十一、界面美化 (42)十二、tomcat配置 (59)如何修改tomcat端口 (59)如何设置虚拟目录 (60)如何给tomcat的管理员设置密码 (61)如何设置数据源和连接池 (62)附录 (63)Jcreator不能导入javax.servlet包问题 (63)本文数据库数据库 (64)本文Web.xml文件配置 (64)一、前序工作Tomcat安装好后再webapps文件夹下新建mywebsite,里面包括WEB-INF,在里面是classes,lib和web.xml 文件。
Jcreator配置好jdk路径后servlet也需要导入,configure—>options—>jdkprofile,选中jdk vension,点edit—>add add achieve,选择tomcat里lib下的servlet-api,就ok了。
详细看附录。
二、Classes文件写一个Hello.java写java文件有三种方法:/*使用实现servlet接口的方式开发(不全)package com.tsinghua; //一个自定义的包import javax.servlet.*;import java.io.*;import java.io.IoException;public class Hello implements Servlet{//该函数用于初始化servlet(类似与构造函数)//该函数只会被调用一次public void init(ServletConfig parml) throws ServletException {System.out.println("init it");}public ServletConfig getServletConfig(){return null;}//这个函数用于处理业务逻辑//程序员应该把业务逻辑代码写这里//这个函数当用户每访问servlet时,都会被调用//req:用于获得客户端(浏览器)信息 res:用于向客户端(浏览器)返回信息public void service(ServletRequest req,ServletResponse res)throws ServletException{ System.out.println("service it");//从res中得到printWriterPrintWriter pw=res.getWriter();pw.println("hello,world");}public void destroy(){}}//方法二,继承GenericServlet(不全)package com.tsinghua;import javax.servlet.GenericServlet;import javax.servlet.*;import java.io.*;public class HelloGenen extends GenericServlet{//重写service方法public void service(ServletRequest req,ServletResponse res){//返回hello,worldtry{PrintWriter pw=res.getWriter();pw.println("hello,world,generc");}catch (Exception ex){ex.printStackTrace();}}}*///方法三,继承HttpServlet开发package com.tsinghua;import javax.servlet.http.*;import java.io.*;public class Hello extends HttpServlet{//处理get请求public void doGet(HttpServletRequest req,HttpServletResponse res){//业务逻辑try{PrintWriter pw = res.getWriter();pw.println("hello http");}catch (Exception ex){ex.printStackTrace();}}public void doPost(HttpServletRequest req,HttpServletResponse res){this.doGet(req,res);}}配置web.xml文件这个web.xml文件可以从旁边文件夹里拷来,主要改写的部分如下<servlet><servlet-name>hello</servlet-name><servlet-class>com.tsinghua.Hello</servlet-class></servlet><!-- Define the Manager Servlet Mapping --><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping>上网验证先打开apache-tomcat-8.5.8\bin下的startup.bat,然后登陆下面地址,看manager里有没有mywebsite,若runing是true则ok再登陆下面地址看看是否成功显示了hello,成功了三、写登陆界面写java 文件登陆界面包含三个java 文件,用sendRedirect 进行跳转,其中还包括了html 语言,表单知识,详细看下面Login.java/*** @(#)Login.java * ** @author* @version 1.00 2017/2/10 *///登陆界面package com.tsinghua;import javax.servlet.http.*; import java.io.*;public class Login extends HttpServlet{public Login() { }//处理get 请求public void doGet(HttpServletRequest req,HttpServletResponse res){ //业务逻辑 try { //中文乱码解决方法 res.setContentType("text/html;charset=gbk");PrintWriter pw = res.getWriter(); //返回登陆界面pw.println("<html>"); pw.println("<body>");pw.println("<h1>登陆界面</h1>");pw.println("<form action=logincl method=post>");pw.println("用户名:<input type=text name=usrname><br>"); pw.println("密码:<input type=password name=passwd><br>"); pw.println("<input type=submit value=loging><br>"); pw.println("</form>"); pw.println("</body>"); pw.println("</html>"); }catch (Exception ex){ ex.printStackTrace(); } }public void doPost(HttpServletRequest req,HttpServletResponse res){ this.doGet(req,res); } }LoginCl.java/*** @(#)Login.java*** @author* @version 1.00 2017/2/10*///验证(登陆处理)package com.tsinghua;import javax.servlet.http.*;import java.io.*;public class LoginCl extends HttpServlet{public LoginCl() {}//处理get请求public void doGet(HttpServletRequest req,HttpServletResponse res){ //业务逻辑try{//接受用户名和密码String u=req.getParameter("usrname");String p=req.getParameter("passwd");//验证if(u.equals("sp")&&p.equals("123")){//合法//跳转(welcome)res.sendRedirect("welcome");}else{//不合法//跳转(回原界面)res.sendRedirect("login");//写url}}catch (Exception ex){ex.printStackTrace();}}public void doPost(HttpServletRequest req,HttpServletResponse res){ this.doGet(req,res);}}Welcome.java/*** @(#)Welcome.java*** @author* @version 1.00 2017/2/10*///欢迎界面package com.tsinghua;import javax.servlet.http.*;import java.io.*;public class Welcome extends HttpServlet{public Welcome() {}//处理get请求public void doGet(HttpServletRequest req,HttpServletResponse res){ //业务逻辑try{//输出weclcomePrintWriter pw=res.getWriter();pw.println("welcome");}catch (Exception ex){ex.printStackTrace();}}public void doPost(HttpServletRequest req,HttpServletResponse res){this.doGet(req,res);}}配置web.xml文件再之前的web.xml文件里增加如下<servlet><servlet-name>login</servlet-name><servlet-class>com.tsinghua.Login</servlet-class></servlet><!-- Define the Manager Servlet Mapping --><servlet-mapping><servlet-name>login</servlet-name><url-pattern>/login</url-pattern></servlet-mapping><servlet><servlet-name>logincl</servlet-name><servlet-class>com.tsinghua.LoginCl</servlet-class></servlet><!-- Define the Manager Servlet Mapping --><servlet-mapping><servlet-name>logincl</servlet-name><url-pattern>/logincl</url-pattern></servlet-mapping><servlet><servlet-name>welcome</servlet-name><servlet-class>com.tsinghua.Welcome</servlet-class></servlet><!-- Define the Manager Servlet Mapping --><servlet-mapping><servlet-name>welcome</servlet-name><url-pattern>/welcome</url-pattern></servlet-mapping>上网验证登陆下面地址,看manager里有没有mywebsite,若runing是true则ok四、同一用户的不同页面共享数据用sendRedirct()方法实现实现在welcome界面显示登录用户的姓名以上三个java文件中LoginCl和Welcome文件进行修改LoginCl.javaWelcome实现在welcome界面显示登录用户的姓名和密码以上三个java文件中LoginCl和Welcome文件进行修改LoginClWelcome结果图:隐藏数据:、用隐藏表单实现SessionSession:浏览器访问服务器时,服务器内存为浏览器分配的空间。
韩顺平java从入门到精通视频教程(全94讲)学习笔记整理(齐全)
java平台1、J2SE java开发平台标准版2、J2EE java开发平台企业版java程序需要在虚拟机上才可以运行,换言之只要有虚拟机的系统都可以运行java程序。
不同系统上要安装对应的虚拟机才可以运行java程序开发步骤1、编写源文件 (.java)2、编译源文件为类文件(.class)可用J2SE或J2EE编译3、在虚拟机上运行注释//单行注释/* */多行注释java内容介绍java编程可以分成三个方向:1、java se (j2se)桌面开发 java中的基础中的基础2、java ee (j2ee)web开发3、java me (j2me)手机开发java se课程介绍java面向对象编程(基础)java图开界面开发java数据库编程java文件io流编程java网络编程java多线程编程java ee基础1java面向对象编程--数据库编程-->java sejava 基础2html--css--javascript-->div+cssjava ee中级部分Servlet--Jsp-->mvc模式java ee高级部分Struts--Ejb--Hibernate--Spring--Ajax(ext,dw2)-->ssh框架java之父gosling1990 sun启动绿色计划1 | 4451992 创建oak语言-->java1994 gosling参加硅谷大会演示java功能,震惊世界1995 sun正式发布java第一个版本,目前最新是jdk7.0java开发工具记事本、(jcreator、jbuilder退出舞台了)、netbean、eclipse如何选择开发工具先选择记事本,对java有一定了解后再使用eclipse高级开发工具为什么呢?1、更深刻的理解java技术,培养代码感2、有利于公司面试java语言的特点1、java语言是简单的2、java语言是面向对象的3、java语言是跨平台(操作系统)的[即一次编译,到处运行]4、java是高性能的java第一个程序hello.java运行java程序要安装和配置jdkjdk是什么?1、jdk全称java dvevlopment kit中文java开发工具包2、jdk是sun公司开发的3、jdk包括jre(java runtime envirnment)java运行环境、一堆java工具和java基础的类库(类共3600左右,常用类在150个左右)4、可以在下载**开发安装jdk,用户执行需要安装jre配置JDK添加环境变量即可windows下配置jdk在计算机属性--高级设置--环境变量--添加PATH将JDK所在路径指定即可。
韩顺平servlet笔记2完整版
out.println("name ="+val); session 为什么有? 问题 1: 如何实现在不同的页面,可以去查看信息(比如说购物车),同时还要实现不同的用 户看到的信息是自己. session 工作原理图
session 的生命周期是 30 分钟
session 小结:
① session 是存在服务器的内存中 ② 一个用户浏览器,独享一个 session 域对象 ③ session 中的属性的默认生命周期是 30min ,你可以通过 web.xml 来修改 ④ 3 种 session 生命周期的设置 (1)一个地方是 tomcat/conf/web.xml
③ cookie 存放中文,怎么处理 存放: String val=.URLEncoder.encode("顺平","utf-8");
Cookie cookie=new Cookie("name",val); 取出: String val=.URLDecoder.decode(cookie.getValue(), "utf-8");
mycookie.setMaxAge(7*3600*24);//保存一周
response.addCookie(mycookie);
b=true;
break;
韩顺平servlet与jsp 笔记与心得
∙韩顺平 servlet与jsp 笔记与心得∙∙∙∙Java EE概述:Java EE是一个开放的平台,它包括的技术很多,主要包括十三种核心技术(java EE就是十三种技术的总称)。
建立一个整全的概念。
J2ee的十三种技术(规范)1.java数据库连接(JDBC)。
——JDBC定义了4种不同的驱动:1.JDBC-ODBC桥,2.JDBC-native驱动桥3,JDBC-network桥4.纯java驱动。
2.Java命名和目录接口(JNDI)(它是为了对高级网络应用开发中的使用的目录基础结构的访问。
)。
3.企业Java Beans(Enterprise Java Beans,EJB)(它提供了一个架构来开发和配置到客户端的分布式商业逻辑,因此可以明显减少开发扩展性、高度复杂企业应用的难度。
)。
4.JavaServer Pages(JSPs)。
5.Java servlets(servlets提供的功能大部分与JSP相同,JSP中大部分是HTML代码,其中只有少量的Java代码,而servlets则相反,它完全使用Java编写,并且产生HTML代码。
)。
6.Java IDL/CORBA(用得不多)。
7.Java 事务体系(JTA)/Java事务服务(JTS)(用得不多)。
8.JavaMail和JavaBenas激活架构(JavaBeans ActivationFramework,JAF)。
(JavaMail是一个用来访问邮件服务的API)。
9.Java信使服务(Java Messaging Service,JMS)(JMS是一个用来和面向信息的中层通信的API)。
10.扩展标记语言(Extensible Markup Language,XML)。
11.12. 13当前流行的及格框架struts+hibernate+spring(ssh).Java ee的开发环境(eclipse)Eclipse是一个开源的、可扩展的集成开发环境,已经成为目前最流行的j2ee 开发工具。
韩顺平java全部内容笔记
韩顺平java全部内容笔记韩顺平是一位伟大的计算机科学家,他的Java全部内容笔记,是学习Java的非常好的资料。
该笔记共有近1000页,内容全面详细,涵盖了Java的各个方面,以下是简单介绍:第一部分:Java基础1. Java入门:简介、JDK、Java开发环境的搭建、Hello World程序等。
2. 变量与常量:Java的数据类型、变量的定义与使用、常量的定义与使用等。
3. 运算符:算术运算符、赋值运算符、比较运算符、逻辑运算符等。
4. 控制流程:if语句、switch语句、for循环、while循环、do-while循环等。
5. 数组:一维数组、二维数组、数组排序、数组查找等。
6. 方法:方法的定义与使用、传递参数、返回值等。
7. 面向对象:面向对象的基本概念、类的定义与使用、封装、继承、多态等。
8. 类与对象:类与对象的关系、构造方法、对象成员变量、对象的引用等。
9. 抽象类与接口:抽象类的定义与使用、抽象类与普通类的区别、接口的定义与使用、接口的实现等。
10. 异常处理:异常的概念、异常的分类、异常处理的机制、自定义异常等。
11. 泛型:泛型的定义与使用、泛型类、泛型方法、泛型限定等。
12. 多线程:线程的概念、线程的创建与启动、线程的生命周期、线程的同步、线程通信等。
13. 反射:反射的概念、反射的使用、反射的用途、动态代理等。
14. 注解:注解的概念、注解的使用、自定义注解等。
15. 枚举:枚举的概念、枚举的使用、枚举的用途等。
16. IO流:IO流的基本概念、字节流、字符流、文件读写、序列化等。
17. 网络编程:网络编程的基本概念、Socket编程、服务器与客户端、TCP/UDP等。
18. 数据库编程:数据库的基本概念、JDBC编程、SQL语句、事务等。
19. 集合框架:集合框架的基本概念、ArrayList、LinkedList、HashSet、HashMap 等。
20. JavaWeb编程:Servlet编程、JSP编程、Struts框架、Spring框架、Hibernate 框架等。
韩顺平SQL_Server学习笔记
SQL Server学习资料⏹表的管理---表名和列的命名⏹表的管理---支持的数据类型⏹表的管理----修改数据⏹表的管理---删除数据删除全部数据Delete from 表名;删除指定数据Delete from 表名where 字段名=‘值’and 字段名=‘值’建表:表的基本查询----简单的查询语句使用where子句:或者写成:如何使用like操作符(模糊查询):在where条件中使用in:使用is null的操作符:使用逻辑操作符号:使用order by子句:Select ename,(sal+isnull(comm.,0))*13 as 年薪from emp order by 年薪⏹表的复杂查询数据分组-max,min,avg,sum,count:Group by和having子句:对数据分组的总结:1)分组函数只能出现在选择列表,having,order by,子句中;2)如果在select语句中同时包含group by,having,order by,那么他们的顺序是group by,having,order by;3)在选择列中如果有列,表达式和分组函数,那么这些列和表达式必须有一个出现在group by子句中,否则就会报错;如:select depot,avg(sal),max(sal) from emp group by deptno having avg(sal)<2000;这里deptno就一定要出现在group by中;⏹表的复杂查询----多表查询多表查询是指基于两个或两个以上表或是视图的查询或者:⏹表的复杂查询----子查询1)(子查询)是指嵌入在其它sql语句中的select语句,也叫嵌套查询。
2)(单行子查询)是指只返回一行数据的子查询语句3)(多行子查询)指返回多行数据的子查询⏹在from子句中使用子查询请思考:如何显示高于部门平均工资的员工的姓名,薪水,她部门的平均工资和部门编号分析:1,首先要知道各个部门的平均工资Select avg(sal),dept from emp group by deptno2,把上面的查询结果,当做一个临时表对待这里需要说明的:当在from子句中使用子查询时,该子查询会被作为一个临时表对待,当在from子句中使用子查询时,必须给子查询指定别名。
韩顺平循序渐进学java从入门到精通(全知识点笔记整理)
Java韩顺平笔记第1讲内容介绍.项目演示.原理剖析1. 课程包括:java面向对象编程,java图形界面,java数据库编程,java文件i/o流,java网络编程,java的多线程2. Java历史:1990 sun 启动绿色计划 1992 创建 oak语言—> java1994 gosling 参加硅谷大会演示java功能震惊世界 1995 sun 正式发布java第一个版本,目前最新的是jdk7.03. java开发工具:记事本,jcreator,jbuilder,netbean,eclipse4. jdk包括:jre(java运行环境)java的工具:编译器javac.exe解释执行器java.exe java的类库:3600多个,常用的150多个5. 第一个程序://功能:显示―HelloWorld‖//public:表示类是公共的,一个文件中只有一个public类 //class:表示这个是一个类//HelloWorld:类名(公共类的类名,必须和文件名一样)public class HelloWorld {//一个主函数,程序的入口 public static void main (String args[]) {//执行语句System.out.println("helloWorld!"); } }6. Java源程序(.java文件)——>java字节码文件(.class文件)——>由解释执行器(java.exe)将字节码文件加载到java虚拟机(jvm)——>字节码文件(.class)就会在java虚拟机中执行l,average); } }第2讲变量.数据类型1. 在java里面int占4个字节,long占8个字节2. Java基本数据类型:整数:(byte一个字节:-128---127 int四个字节:-2147483648---+2147483647short两个字节:-32768---+32767 long八个字节:)小数(浮点):float double布尔:boolean字符:char(两个字节,可以存放汉字, char test1 ='中';)引申到字符串(类)3.在java中对char进行运算的时候,直接是当做ASCII码对应的整数4.数据不能从高精度到低精度的转换Byte<short<int<long<float<doublefloat a=3.4;是过不去的,在java中小数默认是double(双精度)的应该写成是float a=3.4f;不过可以强制转换:int a=(int)1.2; intb=(int)1.95. int a=1;int b=a+1.2; a先是往高精度转换,然后赋给b,就报错改成int a=1;double b=a+1.2; 或者int a=1;float b=a+1.2f; 就解决了第4讲流程控制1. switch case语句中,switch条件表达式的数据类型应该和后面case的类型一致2. switch case语句中,可用的数据类型主要是:byte short int char enum第5讲类与对象1. 面向对象编程-类与对象类名首字母大写类里面的元素叫类的成员变量/属性2. 类的定义package 包名;class 类名extends 父类implements接口名{成员变量;构造方法;成员方法;}3. 如何创建对象:先声明再创建Cat cat1;cat1=new Cat();一步到位Cat cat1 =new Cat();4. 引用传递类似于指针一样第8讲this 类变量1. this属于类的对象的而不是属于类的2. 5this不能在类的外部使用,只能在类定义时候使用!3. 可以用类名直接访问静态变量第9讲类方法封装1.类变量是该类的所有对象共享的对象,一改全改了2.定义语法:访问修饰符static 数据类型变量名3. public class Demo9{static int i=1;static{System.out.println("zhixingyicile");i++;}//会自动执行一次,也只有一次public Demo9(){System.out.println("ffffffff");i++;}public static void main(String args[]){Demo9 t1=new Demo9();System.out.println(Demo9.i);Demo9 t2=new Demo9();System.out.println(i);}}4.类方法(静态方法、静态函数):属于所有对象实例的5.Java中:类变量(static)原则上用类方法(static)去访问;类方法中不能访问非静态变量,就是非类变量,但是普通的成员方法可以访问静态变量(类变量)使用:类名.类方法名对象名.类方法名6.非类变量就是实例变量,属于每个对象自己的7.Java面向对象编程的三(四)大特征:封装、继承、多态(、抽象)8.抽象:把一类事物的共有的属性和行为提取出来,形成一个物理模板,此研究问题的方法就是抽象9.封装:把抽象出来的数据和对数据的操作封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(成员方法),才能对数据进行操作。
servlet课堂笔记
一、Servlet1.是什么:servlet是一个小应用程序(处理网络请求,是一个java类)2.作用:处理从客户端发送的请求及服务端的响应。
3.开发步骤:a)写一个类ServletDemo1,继承javax.servlet.GenericServlet类,实现service方法b)打开web.xml文件,做如何配置c)部署到服务器上d)打开浏览器,通过http://localhost:8080/day08_00_servlet/abc访问.4.Servlet的执行调用过程(清楚)5.servlet的生命周期(牢记)public void init(ServletConfig) ; 初始化方法public service(ServletRequest,ServletResponse) ; 服务方法public destroy() ; 销毁方法servlet的创建方法:两种默认情况下,servlet对象在第一次请求的时候调用构造函数创建,创建之后自动调用带参的init方法,然后调用service方法.destroy方法在停止服务器或者停止应用的时候调用。
整个过程中,init方法和destroy方法只会调用一次,而service方法会反复调用。
●可以通过配置web.xml文件来改变创建servlet的时机.配置如下此时在服务器启动的时候就创建对象并进行初始化了.此Servlet对象在服务器停止或者应用停止时才死亡.(<load-on-startup>必须从2开始,因为1的话已经在默认的web.xml中的default中已经引用了)6.url配置(掌握)两种:●(以/开始,/代表的是web程序的根目录,可以是/abc/tt.ff但是/*.后缀名是绝对不允许的,*.abc是可以的,*代表的是任意东东)●配置优先级:精确匹配> 以/开头的匹配> 以*开头的匹配●如果配置成/(仅有有一个/,那就是默认的servlet,就是配置所有找不到的URL的servlet)那么就是一个缺省的servlet,此Servlet处理所有找不到匹配路径的url.一个servlet可以配置多个url-pattern7.servlet的创建问题(掌握)创建一个servlet有3中方式:1)采用实现servlet接口, (不推荐)2)采用继承GenericServlet类( 不推荐)3)采用继承HttpServlet(推荐)(我们通常是继承HttpServlet,分发的概念给doget或者dopost方法,就不用写servlet方法了。
韩顺平j2ee视频实战教程servlet课件
Servlet的工作原理
1
请求接收
Servlet容器接收HTTP请求并将请求发送给对应的Servlet。
2
处理请求
Servlet根据请求参数和路径执行逻辑,生成动态内容。
3
生成响应
Servlet将动态内容打包成HTTP响应,并将其发送回客户端浏览器。
Servlet的生命周期
1
处理请求
2
Servlet处理HTTP请求并生成响应,
Servlet可以通过继承和接 口实现自定义功能,并与 其他Java框架集成。
性能
Servlet运行在服务器端, 可以直接操作底层资源, 提供高效的数据处理和访 问。
Servlet的应用场景
电子商务
Servlet可用于处理订单、用户 登录和购物车等核心功能。
身份验证
Servlet可用于验证用户身份和 实现安全访问控制。
数据推送
Servlet可根据用户请求实时推 送天气、股票等数据。
Servlet vs JSP
1 Servlet
适合复杂的控制逻辑和前端交互,易于与HTML 和CSS集成。
学习J2EE的价值
J2EE是企业级Java开发的核心技术栈,掌握J2EE将帮助你构建可靠、可扩 展和高性能的企业应用。
韩顺平j2ee视频实战教程 servlet课件
本教程将带你深入学习Java Servlet的实践应用,从基础到高级层面,全面掌 握Servlet的开发技巧和最佳实践。
什么是Servlet?
Servlet是Java编写的服务器端程序,用于处理HTTP请求和生成HTTP响应。它是构建动态Web应用的 重要组成部分。
可与其他组件进行交互。
3
韩顺平jsp笔记(个人总结版)
第一、二、三课
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=”” /> 上面的错了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
◆背景知识介绍J2EE的13种技术java->servlet->jsp [技术总是有一个演变过程]zip粘贴到word设置◆回顾一下我们现有的技术java 基础(面向对象,集合,界面,线程,文件,网络)jdbc (java 的数据库编程)oracle / mysql / sqlserverhtml css javascript (web 开发) ->网页设计xmlserlvet+jsp ->java web开发[使用java技术做web开发]◆java ee 体系的介绍◆servlet项目演示◆web 开发介绍①静态页面(html)②动态页面1.用户可以输入数据,和页面交互(注册,购物,发帖子,付款...)2.不同时间打开页面,内容是变化.3.目前比较流行的左动态页面的技术( servlet/jsp , php , , asp, cgi )◆动态网页技术的比较(了解)◆bs 和cs的比较(1)BS:browser server 浏览器服务器(2)cs client server 客户服务为什么需要的web服务器/web究竟是干什么的?模拟一个web服务器MyWebServer.javaimport java.io.*;import .*;public class MyWebServer{public static void main(String []args) throws Exception{ServerSocket ss=new ServerSocket(80);Socket s=ss.accept();//提示一句话System.out.println("在9999 上等待连接...");OutputStream os=s.getOutputStream();BufferedReader br=new BufferedReader(new FileReader("d:\\hello.html"));String buf="";while((buf=br.readLine())!=null){os.write(buf.getBytes());}//关闭流br.close();os.close();s.close();}}◆通过tomcat来讲解BS结构◆安装tomcat服务器(1)解压即可(2)配置①在环境变量中添加JAVA_HOME= 指向你的jdk的主目录(并不是bin文件目录)②在不配置JAVAHOME的前提下启动tomcat 在startup.bat的第25行中添加set JAVA_HOME=JKD路劲(3)启动tomcat服务器到tomcat 主目录下bin/startup.bat(4)验证是否安装成功http://localhost:8080(8080是默认端口如果该端口已经被占用需要修改端口)◆tomcat安装后问题解决(1)tomcat无法正常启动的原因分析1.JAVA_HOME 配置错误,或者没有配置2.如果你的机器已经占有了8080 端口,则无法启动,解决方法(1) 你可以8080 先关闭netstat –annetstat –anb 来查看谁占用该8080(2) 主动改变tomcat的端口.到conf/server.xml 文件中修改<Connector connectionTimeout="20000" port="8088"(去修给config->server.xml的端口号)protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443"/>(3) 能够正常启动,但是会导航到另外一个页面.去修改工具->管理加载项,把默认的导航给禁用即可.(4) 在访问tomcat时候,一定保证tomcat 服务器是启动◆tomcat的目录结构文件bin: 启动和关闭tomcat的bat文件conf: 配置文件-->server.xml: 该文件用于配置和server 相关的信息, 比如tomcat启动端口后,配置Host, 配置Context 即web应用-->web.xml : 该文件配置与web应用(web应用就相当于是一个web站点)-->tomcat-users.xml: 该文件用户配置tomcat 的用户密码和权限lib目录: 该目录放置运行tomcat 运行需要的jar包logs目录:存放日志, 当我们需要去查看日志的时候,很有用!,当我们启动tomcat错误时候,可以查询信息.webapps目录: 该目录下,放置我们的web应用(web 站点), 比如:建立web1 目录下面放置我们的html 文件jsp 文件..图片... 则web1就被当做一个web应用管理起来(☞特别说明tomcat 6.0 以后支持tomcat 5 版本还有别的设置)work: 工作目录: 该目录用于存放jsp被访问后生成的对应的server文件和.class文件如何去访问一个web 应用的某个文件◆首页面设置及目录规范结构现在我们要求:把hello.html文件设置成该web应用的首页,则需要把web应用的目录格式做的更加规范:①在web文件夹下配置WEB-INF文件夹②在web.xml 文件中添加配置的代码:<welcome-file-list><welcome-file>hello1.html</welcome-file></welcome-file-list>③通过http://localhost:8088/web1来访问hello1.htmlweb-inf目录下的classes目录将来是存放class文件lib 目录将来时存放jar文件web.xml 配置当前这个web应用的信息.◆tomcat如何去管理虚拟目录需求: 当我们把web 应用放到webapps目录,tomcat会自动管理,如果我们希望tomcat 可以管理其它目录下的web应用?->虚拟目录配置我在d 盘有一个web应用.◆虚拟目录配置步骤:①找到server.xml文件②编辑host节点添加Context path在server.xml中添加:<Context path="/myweb2" docBase="d:\web2"/>myweb2:是访问时输入的web名,实际取出的是web2中的资源"d:\web2":绝对路径下web2中存放资源如:hello2.html实际访问时输入的地址:http://localhost:8088/myweb2/hello2.html绝对路径:从根分区找某个文件相对路径:从该文件位置去找另一个文件③需要重启tomcat,才能生效.(因为是采用的dom技术讲信息加载到内存中)◆context 的几个属性的说明path:docbase:reloadable;如果设为ture ,表示tomcat 会自动更新web应用,这个开销大,建议在开发过程中,可以设为true, 但是一旦真的发布了,则应当设为false;upackWAR: 如果设为ture ,则自动解压,否则不自动解压.①:打war包cd:d/web2 然后jar –cvf web2.war *②:浏览打好的war包Deploy发布后会在webapps中自动生存改文件◆配置域名我们看和一个如何配置自己的主机名:我们在实际访问网站的过程中,不可能使用http://localhost:8080/web应用/资源名的方式去访问网站,实际上使用类似或者的方式去访问网站,这个又是怎么实现的呢?看看ie浏览器访问一个web站点的流程.实现的步骤如下:(1) 在C:\WINDOWS\system32\drivers\etc 下的host文件添加127.0.0.1 (2) 在tomcat 的server.xml文件添加主机名<Host name="" appBase="d:\web3”><Context path="/" docBase="d:\web3" /></Host>(3) 在d:\web3 加入了一个/WEB-INF/web.xml 把hello2.html设为首页面如果连端口都不希望带,则可以吧tomcat的启动端口设为80即可.(4) 重启生效◆tomcat体系的再说明图:如何配置默认主机:在tomcat/conf/server.xml 文件<Engine name="Catalina" defaultHost="主机名">如:<Engine name="Catalina" defaultHost="">◆为什么需要servlet技术?比如需求:我们希望用户可以贴,用户还可以回复....这样一些和用户可以交互的功能,用普通的java技术就完成不了, sun 就开发了servlet技术供程序员使用.◆servlet的介绍①servlet 其实就是java程序(java类)②该java 程序(java 类)要遵循servlet开发规范③serlvet是运行在服务端④serlvet 功能强大,几乎可以完成网站的所有功能⑤是学习jsp基础◆tomcat 和servlet 在网络中的位置servlet的生命周期是怎样的/servlet究竟是怎样工作的UML 时序图帮助大家理解参看execel面试题: 请简述servlet的生命周期(工作流程)答:标准版本:①WEB服务器首先会检查是否已经装载并创建了该servlet实例对象。
如果是直接进行第④步,否则执行第②步。
②装载并创建该Servlet的一个实例对象。
③调用Servlet实例对象的init()方法。
④创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用service()方法并将请求和响应作为参数传递进去。
⑤WEB应用被停止或重启之前,Servlet引擎将卸载Servlet,在卸载之前调用Servlet的destroy()方法1.当serlvet 第一次被调用的时候,会触发init函数,该函数会把servlet实例装载到内存.init函数只会被调用一次2.然后去调用servlet 的service 函数3.当第二次后访问该servlet 就直接调用service 函数.4.当web应用reload或者关闭tomcat或者关机都会去调用destroy函数,该函数就会去销毁serlvet5.Servlet的生命周期当客户端第一次向web服务器发出一个servlet请求时,web服务器将会创建一个该servlet的实例,并且调用servlet的init()方法;如果当服务器已经存在了一个servlet实例,那么,将直接使用此实例;然后再调用service()方法,service()方法将根据客户端的请求方式来决定调用对应的doXXX()方法;当web应用reload或者关闭tomcat或者关机,web 服务器将调用destroy()方法,将该servlet从服务器内存中删除。