Servlet笔记

合集下载

java servlet知识点总结

java servlet知识点总结

java servlet知识点总结一、Servlet 的生命周期1. Servlet 的生命周期包括初始化、服务和销毁三个阶段。

2. 初始化阶段:当Servlet 第一次被请求时,容器会调用其 init() 方法来进行初始化操作。

开发者可以在init() 方法中进行一些必要的初始化操作。

3. 服务阶段:当Servlet 接收到客户端请求时,容器会调用其 service() 方法来处理请求。

在service() 方法中,开发者可以根据请求进行相应的处理,并生成响应返回给客户端。

4. 销毁阶段:当Servlet 不再被需要时,容器会调用其 destroy() 方法来进行销毁操作。

在destroy() 方法中,开发者可以进行一些清理工作,释放资源等操作。

二、Servlet 的请求和响应1. 请求对象 HttpServletRequest:HttpServletRequest 对象封装了客户端的请求信息,包括请求方法、请求参数、请求头信息等。

开发者可以通过HttpServletRequest 对象获取客户端的请求信息,并进行相应的处理。

2. 响应对象 HttpServletResponse:HttpServletResponse 对象封装了生成响应的方法,包括设置响应状态码、设置响应头信息、向客户端输出数据等。

开发者可以通过HttpServletResponse 对象来生成相应的响应返回给客户端。

三、会话管理1. 会话管理指的是在客户端与服务器端之间建立会话,并保持会话状态。

在Servlet 中,可以通过会话管理来实现用户登录状态的保持、购物车的管理等功能。

2. 会话对象 HttpSession:HttpSession 对象代表着服务器端的会话,开发者可以通过HttpSession 对象来存储会话所需的数据,如用户信息、购物车内容等。

同时,开发者还可以通过HttpSession 对象来管理会话的生命周期、设置会话超时时间等。

9.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笔记

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学习笔记(一)

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笔记完全版

达内Servlet笔记完全版

Servlet第一天2007年6月21日一、简述1、Servlet,服务器端的小程序,它是相对于Applet而言的,Applet是客户端小程序。

Servlet,是接受来自网络的请求(form表单,以及其他的请求),并对不同请求作出不同的响应Servlet,是基于Http协议的,是运行在web服务器中的程序。

这里要提出一个容器的概念。

servlet是运行在web容器中,在后面会详细地讲解,这个web容器可以控制Servlet对象的生命周期,控制请求由Servlet对象处理。

2、web服务器,这里的服务器不是硬件概念,而是软件,常用的web服务器有Tomcat,Jboss 等,我们所用到的Tomcat是一个开源的服务器,Tomcat是一个用java语言编写的web服务器,所以需要有相应的java运行环境,也就是JVM,还要配置tomcat的具体路径。

二、Tomcat的配置JA V A_HOME=/XXX/XXX/(JDK路径,bin的上一层目录)CA TALINA_HOME=/XXXX/XXX(tomcat的绝对路径windows中X:\xxx\xxx)在启动Tomcat时,是运行Tomcat的bin目录下的startup.sh(windows中使用startup.bat)判断Tomcat是否启动成功,可以在浏览器的地址栏中使用http://localhost:8080/或http://127.0.0.1:8080/可以访问到tomcat的主页就是启动成功了。

要想停止tomcat服务器要使用shutdown.sh(windows中使用shutdown.bat),如果直接关闭启动窗口,就会造成8080端口占用错误,这时可以在使用shutdown.sh关闭一下服务器。

startup.sh,shutdown.sh,shutdown.bat,startup.bat这些文件其实是一些脚本文件用来执行大量的命令,也就是大量java命令。

servlet方面的笔记

servlet方面的笔记

一、Servlet基础1、什么是servlet?2、servlet的优点?3、什么是servlet容器?4、怎么写一个servlet?二、Servlet核心1、核心的接口与类ServletGenericServletHttpServletServletRequest,ServletResponseHttpServletRequest,HttpServletResponseServletConfigServletContext2、HttpServletRequest,HttpServletResponse的常用方法request.getParameter();request.getParameterValues();request.getSession(); request.getSession(boolean);request.getRequestURI();request.setAttribute(), getAttribute(),removeAttribute(); request.getRequestDispatcher();request.setCharacterEncoding();request.getCookies();response.getWriter();response.setContentType();response.sendRedirect();response.encodeURL(), encodeRedirectURL();response.addCookie();3、表单处理(1)如何获得表单中数据(2)表单中,有中文,如何处理(3)表单的提交方式4、比较get,post提交方式链接、表单默认提交方式、地址栏直接输入:get方式对于method="post" 是post方式。

此外,还要知道两者之间的不同,查笔记。

5、重定向与转发(1)什么是重定向、重定向的特点(2)编程(3)什么是转发,转发的特点(4)转发的编程(5)比较二者之间的不同。

韩顺平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:浏览器访问服务器时,服务器内存为浏览器分配的空间。

黑马程序员WEB09-Servlet篇笔记

黑马程序员WEB09-Servlet篇笔记

第9章WEB09-Servlet篇1.1案例一:使用Servlet完成一个用户登录的案例.1.1.1需求:在网站的首页上,登录的链接,点击登录的链接,可以跳转到登录的页面.在登录的页面中输入用户名和密码点击登录的案例.完成登录的功能.1.1.2分析:1.1.2.1技术分析:【HTTP的协议的概述】协议:* 什么是协议:规定双方需要遵守的规则.HTTP协议:* 什么是HTTP协议:用来规定浏览器与服务器之前需要遵守的规则.HTTP协议的作用:规范浏览器和服务器之间的数据传递.HTTP协议的特点:* 基于请求和响应的模型.* 必须先有请求后有响应.* 请求和响应必须成对出现.* 默认的端口号是80.HTTP协议的版本:* 1.0 :每次响应后即刻关闭了连接.* 1.1 :现在使用.不是每次响应后挂断,等待长时间以后没有请求会挂断.【HTTP协议的演示】抓包分析:GET方式:* 请求部分:GET /day09/demo1-http/demo2.html?name=aaa&age=23 HTTP/1.1Accept: text/html, application/xhtml+xml, */*X-HttpWatch-RID: 59176-10011Referer: http://localhost:8080/day09/demo1-http/demo1.htmlAccept-Language: zh-CNUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko Accept-Encoding: gzip, deflateHost: localhost:8080DNT: 1Connection: Keep-Alive抓包分析:POST方式:POST /day09/demo1-http/demo2.html HTTP/1.1Accept: text/html, application/xhtml+xml, */*X-HttpWatch-RID: 59176-10031Referer: http://localhost:8080/day09/demo1-http/demo1.htmlAccept-Language: zh-CNUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko Content-Type: application/x-www-form-urlencodedAccept-Encoding: gzip, deflateHost: localhost:8080Content-Length: 15DNT: 1Connection: Keep-AliveCache-Control: no-cachename=bbb&age=38* 响应部分:HTTP/1.1 200 OKServer: Apache-Coyote/1.1Accept-Ranges: bytesETag: W/"145-1461807615933"Last-Modified: Thu, 28 Apr 2016 01:40:15 GMTContent-Type: text/htmlContent-Length: 145Date: Thu, 28 Apr 2016 01:43:52 GMT<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><h1>Demo2.html</h1></body></html>【HTTP协议的详解】请求部分* 请求行* 提交方式:* 提交方式有很多,常用的GET和POST:* GET和POST的区别:* GET的提交的参数会显示到地址栏上,而POST不显示.* GET往往是有大小限制的,而POST没有大小的限制.* GET没有请求体,而POST有请求体.* 提交路径:* 协议版本:* 请求头* 都是键值对的形式显示的.一般一个key对应一个value,也有个别的是一个key对应多个value.* User-Agent :代表浏览器的类型. --- 文件下载:下载中文文件:IE使用URLEncodor进行编码,而Firefox使用Base64编码.* Referer :代表的是网页的来源. --- 防盗链.* If-Modified-Since :通常与响应中的头Last-Modified一起使用查找本地缓存.* 请求体* 就是POST提交方式的提交的参数.响应部分* 响应行:* 协议版本* 状态码:* 200 :成功* 302 :重定向* 304 :查找本地缓存* 404 :资源不存在* 500 :服务器内部错误* 状态码描述* 响应头:键值对,一般一个key对应一个value,也有一个key对应多个value.* Last-Modified :与请求中的If-Modified-Since一起使用查找本地缓存.* Content-Dispostion :文件下载的使用使用的一个头信息.* Location :重定向的跳转的路径.* Refresh :定时刷新/定时跳转.* 响应体:显示浏览器的页面的内容.【Servlet的概述】什么是Servlet:* 就是一个运行在WEB服务器上的小的Java程序,用来接收和响应从客户端发送过来的请求,通常使用HTTP 协议.* Servlet就是SUN公司提供的一个动态网页开发技术.Servlet的作用:* 用来处理从客户端浏览器发送的请求,并且可以对请求作出响应使用Servlet:* 编写一个类实现Servlet接口.* 将编写的这个类配置到服务器中.Servlet的入门:* 编写类:public class ServletDemo1 implements Servlet{@Override/*** 为用户处理请求和响应的方法.*/public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {res.getWriter().println("Hello Servlet...");}...}* 配置:<!-- 配置Servlet --><servlet><!-- Servlet的名称 --><servlet-name>test1</servlet-name><!-- SErvlet的全路径 --><servlet-class>com.itheima.a_servlet.ServletDemo1</servlet-class> </servlet><!-- Servlet的映射 --><servlet-mapping><!-- Servlet的名称 --><servlet-name>test1</servlet-name><!-- Servlet的访问路径 --><url-pattern>/ServletDemo1</url-pattern></servlet-mapping>* 访问:http://localhost:8080/day09/ServletDemo1【使用ServletRequest接收参数】* String getParameter(String name); ---用于接收一个名称对应一个值的数据.* String[] getParameterValues(String name);---用于接收一个名称对应多个值的数据.* Map getParameterMap(); ---用于接收表单中的所有的数据,Map的key是表单提交的参数名称,Map的value是提交参数的值.* Enumeration getParameterNames() ---用于获取表单中提交的所有的参数的名称. 【Servlet的访问流程】【Servlet的实现的关系】Servlet :接口|GenericServlet :通用的Servlet|HttpServlet :HttpServlet* 编写一个类继承HttpServlet,重写doGet和doPost方法.* 配置1.1.3代码实现1.1.3.1步骤一:创建数据库和表:create database day09;use day09;create table user(id int primary key auto_increment,username varchar(20),password varchar(20),nickname varchar(20));insert into user values (null,'aaa','111','小凤');insert into user values (null,'bbb','111','小童童');1.1.3.2步骤二:创建包和类:1.1.3.3步骤三:引入jar包* mysql的数据库的驱动包* c3p0连接池的jar包* dbutils的包1.1.3.4引入login的页面1.1.3.5编写Servlet-->Service-->DAO1.1.4总结:1.1.4.1Servlet的生命周期:(*****)生命周期:就是一个对象从创建到销毁的过程.Servlet生命周期:Servlet从创建到销毁的过程.* 何时创建:用户第一次访问Servlet创建Servlet的实例* 何时销毁:当项目从服务器中移除的时候,或者关闭服务器的时候.用户第一次访问Servlet的时候,服务器会创建一个Servlet的实例,那么Servlet中init方法就会执行.任何一次请求服务器都会创建一个新的线程访问Servlet中的service的方法.在service方法内部根据请求的方式的不同调用doXXX的方法.(get请求调用doGet,post请求调用doPost).当Servlet中服务器中移除掉,或者关闭服务器,Servlet的实例就会被销毁,那么destroy方法就会执行.1.1.4.2Servlet的相关的配置:【启动时创建Servlet】Servlet默认是在第一次访问的时候创建的.现在让Servlet在服务器启动的时候创建好.进行对Servlet 的配置:在web.xml中在<servlet></servlet>标签中配置:* <load-on-startup>2</load-on-startup> --- 传入正整数,整数越小,被创建的优先级就越高. 【url-pattern的配置】url-pattern配置方式共有三种:1.完全路径匹配:以 / 开始例如: /ServletDemo4 , /aaa/ServletDemo5 , /aaa/bbb/ServletDemo62.目录匹配:以 / 开始需要以 * 结束. 例如: /* ,/aaa/* ,/aaa/bbb/*3.扩展名匹配:不能以 / 开始以 * 开始的. 例如: *.do , *.action***** 错误的写法: /*.do有如下的配置:<servlet><servlet-name>ServletDemo4</servlet-name><servlet-class>com.itheima.a_servlet.ServletDemo4</servlet-class></servlet><servlet-mapping><servlet-name>ServletDemo4</servlet-name><url-pattern>/ServletDemo4</url-pattern></servlet-mapping><servlet><servlet-name>ServletDemo5</servlet-name><servlet-class>com.itheima.a_servlet.ServletDemo5</servlet-class> </servlet><servlet-mapping><servlet-name>ServletDemo5</servlet-name><url-pattern>/*</url-pattern></servlet-mapping><servlet><servlet-name>ServletDemo6</servlet-name><servlet-class>com.itheima.a_servlet.ServletDemo6</servlet-class> </servlet><servlet-mapping><servlet-name>ServletDemo6</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>如果访问地址:http://localhost:8080/day09/ServletDemo4:第一个http://localhost:8080/day09/aaa.do:第二个*****完全路径匹配 > 目录匹配 > 扩展名匹配1.1.4.3开发中的路径的编写:相对路径:都是需要找位置相对关系.不能以 / 开始的.* ./ 当前路径 ../上一级目录* 使用相对路径访问:* http://localhost:8080/day09/demo4-url/demo1.html* http://localhost:8080/day09/ServletDemo6绝对路径:不需要找位置相对关系. 以 / 开始的.* 绝对路径中分为客户端路径和服务器端路径:* 客户端路径一定要加工程名. /day09/ServletDemo6* 服务器端路径不需要加工程名. /ServletDemo61.2案例二:登录成功以后5秒钟跳转到另一个页面.1.2.1需求:在登录成功后,页面5秒钟跳转到其他的一个页面.1.2.2分析:1.2.2.1技术分析:【使用Http协议中的Refresh头信息】Refresh之前已经介绍可以定时页面跳转.需要使用程序设置头信息才可以.【response中设置响应头】* addHeader(String name,String value); --- 针对一个key对应多个value的响应头.* addDateHeader(String name,long date);* addIntHeader(String name,int value);* setHeader(String name,String value); --- 针对一个key对应一个value的响应头.* setDateHeader(String name,long date);* setIntHeader(String name,int value);例如:头信息: xxx:aaa* addHeader(“xxx”,”bbb”); -->xxx:aaa,bbb* setHeader(“xxx”,”bbb”); -->xxx:bbb1.2.3代码实现:在登录成功后的代码上,定时的跳转.public class UserRefreshServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {try {// 解决向页面输出中文的乱码问题!!!response.setContentType("text/html;charset=UTF-8");// 1.接收表单提交的参数.String username = request.getParameter("username");String password = request.getParameter("password");// 2.封装到实体对象中.User user = new User();user.setUsername(username);user.setPassword(password);// 3.调用业务层处理数据.UserService userService = new UserService();User existUser = userService.login(user);// 4.根据处理结果显示信息(页面跳转).if(existUser == null){// 登录失败response.getWriter().println("<h1>登录失败:用户名或密码错误!~</h1>");}else{// 登录成功// response.getWriter().println("Login Success...");response.getWriter().println("<h1>登录成功!您好:"+existUser.getNickname()+"</h1>");response.getWriter().println("<h3>页面将在5秒后跳转!</h3>");response.setHeader("Refresh","5;url=/day09/demo5-refresh/index.html");}} catch (Exception e) {e.printStackTrace();}}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}1.2.4总结:1.2.4.1使用JS控制读秒的效果.<script type="text/javascript">var time = 5;window.onload = function(){setInterval('changeTime()',1000);}function changeTime(){time--;document.getElementById("s1").innerHTML = time;}</script>1.3案例三:记录网站的登录成功的人数.1.3.1需求:登录成功后,5秒后跳转到某个页面,在页面中显示您是第x位登录成功的用户.1.3.2分析:1.3.2.1技术分析:【ServletContext对象】***** ServletContext对象存取数据,存的数据都是有一定的作用的范围的.这种对象称为是域对象.* 用来存取数据:setAttribute(String name,Object object)* 用来向ServletContext中存入数据.* 用来从ServletContext中获取数据.getAttribute(String name)* 用来从ServletContext中移除数据.removeAttribute(String name)1.3.3代码实现:/*** 登录代码的Servlet*/public class UserCountServlet extends HttpServlet {private static final long serialVersionUID = 1L;@Overridepublic void init() throws ServletException {// 初始化一个变量count的值为0.int count = 0;// 将这个值存入到ServletContext中.this.getServletContext().setAttribute("count", count);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {try {response.setContentType("text/html;charset=UTF-8");// 1.接收表单提交的参数.String username = request.getParameter("username");String password = request.getParameter("password");// 2.封装到实体对象中.User user = new User();user.setUsername(username);user.setPassword(password);// 3.调用业务层处理数据.UserService userService = new UserService();User existUser = userService.login(user);// 4.根据处理结果显示信息(页面跳转).if(existUser == null){// 登录失败response.getWriter().println("<h1>登录失败:用户名或密码错误!</h1>");}else{// 登录成功// 记录次数:int count = (int) this.getServletContext().getAttribute("count");count++;this.getServletContext().setAttribute("count", count);response.getWriter().println("<h1>登录成功:您好:"+existUser.getNickname()+"</h1>");response.getWriter().println("<h3>页面将在5秒后跳转!</h3>");response.setHeader("Refresh", "5;url=/day09/CountServlet");}} catch (Exception e) {e.printStackTrace();}}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}public class CountServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 获得Count的值。

Servlet笔记

Servlet笔记

1 课程回顾Servlet编程1)Servlet生命周期(重点)构造方法:创建servlet对象。

默认情况下,第一次访问servlet对象时。

只调用1次。

init方法(有参):创建完servlet对象后调用。

只调用1次。

注意:会调用无参的init方法。

(开发者使用有参参的init方法)service方法:servlet提供服务的方法。

每次发出请求调用。

注意:request对象,response对象destroy方法:tomcat服务器停止或web应用重新部署,servlet对象销毁,destroy方法被调用。

2)ServletConfig对象获取servlet的初始化参数:getInitParameter("name ");键值getInitParameterNames();键名3)ServletContext对象得到web应用路径:context.getContextPath();request.getContextPath(); 等价于上面的代码得到web应用参数:context.getInitParameter("name");(值)context.getInitParameterNames();(名)域对象:context.setAttribute("name",Object): 保存数据(set保存数据设置)context.getAttribute("name") 得到数据(得到数据)context.removeAttribue("name") 清除数据(清楚数据)转发context.getRequestDispatcher("路径").forward(request,response);request.getRequestDispacher("路径").forward(request,response); 等价于上面的代码注意:转发与重定向的区别得到web应用中的资源文件context.getRealPath("路径")context.getResourceAsStream("路径");(该部分很重要,容易出错,风险很大)/**. 代表java命令运行目录。

servlet笔记

servlet笔记

MyEclipse 和 Eclipse中Servlet的区别: Eclipse中 doget() dopost() 默认的构造器 4.Servlet中实用的几个对象:五大神器与jsp的九大内置对象没有区别 httpservletRequest :是由Tomcat给实例化的(ps:页面上的request 也是由Tomcat实例化的) HttpservletRequest和jsp页面上的request是 一样的 httpserveltResponse:HttpservletResponse和jsp页面上的 response是一样的 httpsession : httpsession = session ,不同在于 session是内置 对象,可以直接使用 而 httpsession 的获得方式为:HttpSession session=request.getsession(); 因为pagecontext的生命周期只存在于jsp页面中,所以 pagecontext对象是jsp独有的 servletContext: servletContext = application 只是在servlet中 叫法不一样 Cookie:就是我们本地的一个文件,用来记录我们浏览器的一些信息 将我们的信息写入到cookie中去 request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); String login=request.getParameter("login"); System.out.println(login); String username=request.getParameter("username"); String password=request.getParameter("password"); System.out.println(username); System.out.println(password); if(login.equals("login")){ Cookie cookie=new Cookie("username",username); Cookie cookie2=new Cookie("password",password); System.out.println(cookie.getValue()); System.out.println(cookie2.getValue()); cookie.setMaxAge(60*60*24*14); cookie2.setMaxAge(60*60*24*14); response.addCookie(cookie); response.addCookie(cookie2);

Servlet笔记

Servlet笔记

Servlet笔记相关知识点:补充⽹络协议:这些内容⾃Servlet中是可以被操作的;当然在HTML之中也是可以设置的(head)。

在搞验证码的时候,要刷新验证码的时候,需要访问服务器的Servlet,但是我们知道访问是根据HTTP协议的,⽽这种⽅式去请求服务器前,会检查本地有没有这个请求的响应,如果有就从缓存中读取上次的响应的内容,如果这样更新验证码的时候每次都从缓存中取值了,所以⼀般在刷新请求的时候后⾯添加⼀些随机参数,避免重复请求⽽导致从缓存中取到上次的值。

⼀、Servlet概述:1、http的报头很有⽤,servlet接受到被http协议修饰过的请求,请求和http相关的信息都可以被servlet拿到处理,当然也可以对相应中的内容和http处理。

2、servlet可以不要忘了,init⽅法执⾏前,也就是在服务器启动时候,浏览器未访问前预处理些东西。

3、对servlet来说,记住⼀句话:从客户端发出的请求(http+请求),可以被servlet接受和响应,同时请求信息通常是可以在⼀个共享容器(ServletContext)内存储和取出。

4、Servlet接⼝->GenericServlet⼦类->HttpServlet孙⼦类5、Servlet是⼀个在服务器端运⾏的JAVA类,其实是服务器通过反射得到的类,因为利⽤反射才能得到类,所以必须给出类名(在web.xml中配置,服务器在通过解析XML⽂件得到类名,在反射出类,调⽤其⽅法);客户端发出请求,是以http协议发出,因此服务器必须能够解析http和封装的信息,为了更好的⽅便信息的传递,服务器按照servlet协议实现⼀系列的“⼩功能”,ServletContext/包括JSP的内置对象;利⽤这些“⼩功能”,不同的功能处理不同内容,例如:response负责封装详响应内容(包括http相关),客户端传递过来的信息被request封装处理(包括http相关),全局容器ServletContext,代表当前WEB应⽤,所有Servlet共享和request对象都是域对象可以封装数据;它可以获取WEB全局初始化参数、数据共享、访问资源⽂件:因为我们的程序是放在服务器上的,通常我们不关⼼⽂件等资源的路径,但是我们要操作⽂件,没有路径怎么处理,ServletContext就提供两种⽅法:Properties pro= new Properties();//这⾥使⽤getResourceAsStream来读取⽂件pro.load(getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties"));//这⾥使⽤的传统输⼊流读取⽂件,⾸先还需要⽤到ServletContext对象获取真实⽂件路径才⾏pro.load(new FileInputStream(getServletContext().getRealPath("/WEB-INF/classes/db.properties")));这些封装的过程都是服务器⾃动按照servlet协议⾃动完成,最后我们只需要拿着这些封装好的内置对象使⽤即可;public class PubServlet extends HttpServlet {@Overridepublic void init() throws ServletException {System.out.println("↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓<ABO初始化:预处理开始>↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓");String servletName=getServletConfig().getServletName();System.out.println("ABO:---->servletName:【"+servletName+"】");Enumeration <String > enums=getServletConfig().getInitParameterNames();while(enums.hasMoreElements()){String param=enums.nextElement();String passvalue=getInitParameter(param);System.out.println("ABO:---->ParameterValues:【"+passvalue +"】");}getServletContext().setAttribute("num", 0);System.out.println("↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑<ABO初始化:预处理结束>↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑");}public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();System.out.println("↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓<ServletContext⽰例开始>↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓");System.out.println("ServletContext:1.获取WEB全局初始化参数。

韩顺平servlet笔记(必看完整版)

韩顺平servlet笔记(必看完整版)

背景知识介绍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服务器import .*;import .*;public class MyWebServer{public static void main(String []args) throws Exception{ServerSocket ss=new ServerSocket(80);Socket s=();.");OutputStream os=();BufferedReader br=new BufferedReader(new FileReader("d:\\"));String buf="";while((buf=())!=null){());}到conf/ 文件中修改<Connector connectionTimeout="20000" port="8088"(去修给config->的端口号)protocol="" redirectPort="8443"/>(3) 能够正常启动,但是会导航到另外一个页面.去修改工具->管理加载项,把默认的导航给禁用即可.(4) 在访问 tomcat时候,一定保证 tomcat 服务器是启动tomcat的目录结构文件bin: 启动和关闭tomcat的bat文件conf: 配置文件--> : 该文件用于配置和 server 相关的信息, 比如 tomcat启动端口后,配置Host, 配置Context 即web应用--> : 该文件配置与 web应用(web应用就相当于是一个 web站点)-->: 该文件用户配置tomcat 的用户密码和权限lib目录: 该目录放置运行tomcat 运行需要的jar包logs目录:存放日志, 当我们需要去查看日志的时候,很有用!,当我们启动tomcat错误时候,可以查询信息.webapps目录: 该目录下,放置我们的web应用(web 站点), 比如:建立 web1 目录下面放置我们的html 文件 jsp 文件..图片... 则 web1就被当做一个web应用管理起来(☞特别说明tomcat 以后支持 tomcat 5 版本还有别的设置)work: 工作目录: 该目录用于存放jsp被访问后生成的对应的 server文件和.class文件如何去访问一个 web 应用的某个文件首页面设置及目录规范结构现在我们要求:把文件设置成该 web应用的首页,则需要把web应用的目录格式做的更加规范:①在web文件夹下配置WEB-INF文件夹②在文件中添加配置的代码:<welcome-file-list><welcome-file></welcome-file></welcome-file-list>③通过 classes目录将来是存放 class文件lib 目录将来时存放 jar文件配置当前这个web应用的信息.tomcat如何去管理虚拟目录需求: 当我们把 web 应用放到 webapps目录,tomcat会自动管理,如果我们希望tomcat 可以管理其它目录下的web应用->虚拟目录配置我在d 盘有一个web应用.虚拟目录配置步骤:①找到文件②编辑host节点添加Context path在中添加:<Context path="/myweb2" docBase="d:\web2"/>myweb2:是访问时输入的web名,实际取出的是web2中的资源"d:\web2":绝对路径下web2中存放资源如:实际访问时输入的地址:需要重启tomcat,才能生效.(因为是采用的dom技术讲信息加载到内存中)context 的几个属性的说明path:docbase:reloadable ;如果设为ture ,表示 tomcat 会自动更新 web应用,这个开销大,建议在开发过程中,可以设为true, 但是一旦真的发布了,则应当设为false;upackWAR: 如果设为 ture ,则自动解压,否则不自动解压.①:打war包 cd:d/web2 然后jar –cvf *②:浏览打好的war包 Deploy发布后会在webapps中自动生存改文件配置域名我们看和一个如何配置自己的主机名:我们在实际访问网站的过程中,不可能使用应用/资源名的方式去访问网站,实际上使用类似或者的方式去访问网站,这个又是怎么实现的呢看看ie浏览器访问一个web站点的流程.实现的步骤如下:(1) 在C:\WINDOWS\system32\drivers\etc 下的host文件添加在tomcat 的文件添加主机名<Host name="" appBase="d:\web3”><Context path="/" docBase="d:\web3" /></Host>(3) 在d:\web3 加入了一个 /WEB-INF/ 把设为首页面如果连端口都不希望带,则可以吧tomcat的启动端口设为80即可.(4) 重启生效tomcat体系的再说明图:如何配置默认主机:在tomcat/conf/ 文件<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实例对象。

学习笔记

学习笔记

1.servlet学习笔记(servlet是装入web 服务器中执行,扩展了服务器的能力)(1)创建servlet的步骤:继承HttpServlet抽象类重载适当的方法:doPost(),doGet()。

如果有HTTP请求信息的话,获取该请求信息。

HttpServletRequest 对象检索请求的信息;HttpServletResponse对象生成响应(使用getWriter获得PrintWriter 对象,使用PrintWriter的print方法和println方法进行响应)(2)HttpServlet抽象类中方法简介:init():初始化一些参数,仅执行一次。

Service():每当客户有请求是,调用service()方法。

Destroy():卸载servlet是调用该方法,仅执行一次。

GetServletConfig():返回一个ServletConfig对象,该对象用来返回初始化参数和ServletContext。

ServletContext接口提供有关Servlet的环境信息。

GetServletInfo():提供有关Servlet的信息,如作者版本版权(3)web.xml文件中配置Servlet:<servlet-name></servlet-name>:指定具体的servlet的名称<servlet-class></servlet-class>:指定具体的servlet的类名称<servlet-mapping>指定映射的地址在浏览器中访问时:http://localhost:8080/项目名/映射的地址2.JSTL标签库(1)<c:out/>:主要用于显示数据的内容属性:value 需要显示出来的值default 如果值为null,那么就显示default中的值escapeXml 是否转换特殊字符(2)<c:set/>:标签主要用来将变量存放在JSP范围或者设置JavaBean属性属性:value 要存放的值var 变量名scope var变量的范围target 为一JavaBeanpropterty 指定target的属性例子:<c:set var=”number” value=”5”></c:set><c:out value=”${number}”></c:out>(3)<c:if/>:和java中的if一样属性:test 如果表达式的结果为true,则执行<c:if/>内容,false则相反var 用来存储test的运行结果scope var 变量的储存范围例子:<c:if test=”${1<2}”><c:out value=”1小于2”></c:out></c:if>(4)<c:forEach/>EL隐式对象:${}3.strut2学习Struts2框架由3个组成部分:核心控制器FilterDispatcher,业务控制器,用户实现的业务逻辑组件核心控制器FilterDispatcher:拦截用户的请求业务控制器:用户实现Action类的实例,该类继承ActionSupport类。

Servlet学习笔记(六)-----Servlet之间的通信

Servlet学习笔记(六)-----Servlet之间的通信

Servlet学习笔记(六)-----Servlet之间的通信Servlet学习笔记(六)-----Servlet之间的通信这是4个Servlet之间的通信2. 代码如下:1)首先是test.htm文件,它作为客户端访问的页面&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;&lt;HTML&gt;&lt;HEAD&gt;&lt;META http-equiv=Content-Type content="text/html; charset=gb2312"&gt;&lt;META content="Microsoft FrontPage 4.0"name=GENERATOR&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;CENTER&gt;&lt;H1&gt;Earnest Bank &lt;/H1&gt;&lt;/CENTER&gt;&lt;FORM action="http://127.0.0.1:8000/servlet/firstservlet" method=post&gt;enter your account Number here&lt;INPUT name=accnum size="21"&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;enter your pin Number here&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;INPUT name=pinnum size="21"&gt; &lt;BR&gt;&lt;p&gt;&lt;CENTER&gt;&lt;INPUT type=submitvalue=submit&gt;&lt;/CENTER&gt;&lt;/p&gt;&lt;/FORM&gt;&lt;/BODY&gt;&lt;/HTML&gt;2)第一个Servelt代码:(作用是检验用户输入account Number 和pin Number是否合法)import javax.servlet.*;import javax.servlet.http.*;import java.io.*;import java.sql.*;///import javax.sql.*;public class FirstServlet extends HttpServlet{static Connection dbcon;static String resultToSecond="NA";protected void doPost(HttpServletRequest req,HttpServletResponse resp)throws ServletException,java.io.IOException{try&#160;{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");dbcon=DriverManager.getConnection("jdbc:odbc:test","sa" ,"");System.out.println("Connection established");}catch(Exception e){System.out.println("Database not found!");}//Create a share attribute创建一个共享属性ServletContextcontext=this.getServletContext();context.setAttribute("accountNumber","");//得到从客户端发送过来的两个值String accnum=req.getParameter("accnum");String pinnum=req.getParameter("pinnum");//Check whether the accountnum and pinnum are validtry{PreparedStatementstat=dbcon.prepareStatement("select * from Login where cAccount_id=? and cPin_no=?");stat.setString(1,accnum);stat.setString(2,pinnum);ResultSetresult=stat.executeQuery();if(result.next()){resultToSecond=result.getString(1);context.setAttribute("accountNumber",resultToSecond);//the account i valid call the second servlet通过验证后使用RequestDispatcher接口//得到以URL为参数的Servlet的引用RequestDispatcher dispatcher=context.getRequestDispatcher("/secondservlet ");if(dispatcher==null){resp.sendError(resp.SC_NO_CONTENT);}//把请求提交或者委派给第二个Servletdispatcher.forward(req,resp);try{dbcon.close();}catch(Exception e){System.out.println(e.toString());}}else{resp.setContentType("text/html");PrintWriter out=resp.getWriter(); &#160;out.println("&lt;html&gt;&lt;body bgcolor=pink&gt;");out.println(" The account is invalid");out.println("&lt;br&gt;&lt;br&gt;");out.println("&lt;/body&gt;&lt;/html&gt;");resultToSecond="NA";out.close();}}catch(Exception e){System.out.println(e);} }}3)第二个Servelt代码:(作用是显示Account Number,并允许用户输入Cheque number和支票金额amount)import javax.servlet.*;import javax.servlet.http.*;import java.io.*;import java.sql.*;///import javax.sql.*;//通过用getAttribute()函数得到帐号,显示用户账单号。

Servlet笔记整理

Servlet笔记整理

Servlet笔记整理什么是servlet? 在Web服务器端加载并运⾏的Java应⽤程序具体运⾏在Servlet引擎管理的JVM上。

Servlet容器负责Servlet和⽤户的通信以及调⽤Servlet的⽅法。

Servlet和⽤户的通信采⽤请求/响应模式。

⽤于以动态响应客户机请求形式扩展Web服务器(Web Container)的功能。

Servlet是开发服务器端应⽤程序的⼀个很好选择, Servlet与JSP结合使⽤,能提供更强⼤的服务器端功能。

⼀个servlet就是Java编程语⾔中的⼀个类,它被⽤来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应⽤程序。

()Web服务器什么是Web服务器⽹络应⽤⼀般分为C/S和B/S两种C/S结构是Client/Server(客户机/服务器)的简称 , 桌⾯应⽤程序多采⽤这种结构 ,B/S结构是Browser/Server(浏览器/服务器)的简称 , 特点是客户端⽆需安装特定的软件 , 只需要安装浏览器即可与程序进⾏互动Web服务器是基于B/S结构 , 通过http协议进⾏数据交互(收发)http协议规定了发送数据的格式(报⽂格式)浏览器中发送和读取的格式都是固定的Web服务器需要能够接收和解析发来的符合http协议的请求报⽂ , 并调⽤对应的代码处理 , 再向浏览器发送符合http协议规范的响应报⽂请求报⽂格式 :请求报⽂实例 :GET /mytest HTTP/1.1Host: User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0.......响应报⽂格式 :响应报⽂实例 :HTTP/1.1 200 OKContent-Type: application/soap+xml; charset=utf-8Content-Length: length<? xml version = "1.0" encoding = "utf-8" ?>< soap12:Envelope xmlns:xsi = "/2001/XMLSchema-instance" xmlns:xsd = "/2001/XMLSchema" xmlns:soap12 = "/2003/05/soap-envelope" >< soap12:Body >< CancelOrderResponse xmlns = "https:///webservices2.3" >< CancelOrderResult >< Success >boolean</ Success >< ErrorDescription >string</ ErrorDescription >< ErrorNumber >int</ ErrorNumber >< CustomerOrderReference >long</ CustomerOrderReference >< OrderConfirmation >string</ OrderConfirmation >< CustomerDealRef >string</ CustomerDealRef ></ CancelOrderResult ></ CancelOrderResponse ></ soap12:Body ></ soap12:Envelope >浏览器与服务器的交互过程简单图解 :常见的名词解释Web应⽤ , http服务器 , Web应⽤服务器Web应⽤被称为Web Application , 通过浏览器访问的应⽤程序 , 从⽽为⽤户提供相关的服务 , 例如查询购物等 ; 也包含很多公司内部软件 , 如oa系统 , 医院内使⽤的系统http服务器 : 也称为Web服务器 , 主要功能是提供⽹上信息浏览服务 , 例如Apache Nginx是⽐较常⽤的http服务器 ; 使⽤浏览器访问Web站点或Web应⽤ , 则必须通过http服务器Web应⽤服务器 : Web应⽤服务器能够运⾏服务器上的应⽤程序 , 并将结果返回给客户端浏览器 , 例如tomcat就是⼀种Web应⽤服务器 , 通常情况下 , Web应⽤服务器兼具http服务器的部分功能注意 : Web应⽤需要http服务器及Web应⽤服务器 , 因为不仅需要浏览信息 , 还需要运⾏应⽤程序 ; 但是tomcat以兼具了http服务器的部分功能 , 所以运⾏web应⽤可以直接使⽤tomcat开发Web应⽤的语⾔java .net php等语⾔均可开发Web应⽤ ; Java开发Web应⽤最⼴泛 ; 官⽅在JavaEE中提供了Servlet JSP组件来开发Web应⽤TomcatTomcat介绍Tomcat⽬录结构⽬录⽤途/bin存放windows或linux平台上⽤于启动和停⽌Tomcat的脚本⽂件/conf存放Tomcat服务器的各种配置⽂件 , 其中最重要的就是server.xml/lib存放Tomcat服务器所需的各种JAR⽂件/logs存放Tomcat运⾏中产⽣的各种⽇志/temp存放Tomcat服务器在运⾏中产⽣的临时缓存/webapps存放Tomcat发布的Web应⽤/work Tomcat把由JSP⽣成的Servlet放于此⽬录下启动和停⽌tomcat服务器可通过apach解压⽬录中的startup.bat/shoutdown.bat来启动或停⽌tomcat在浏览器地址栏输⼊ : http://127.0.0.1端⼝号或http://localhost:端⼝号 , 页⾯进⼊到Tomcat启动成功页⾯Tomcat默认端⼝号为-8080可以在conf中的server.xml中修改tomcat端⼝号<Connector port="8080" protocol="HTTP/1.1 "connectionTimeout="20000" redirectPort="8443 "/>Tomcat在idea中的配置1. 在idea的setting中配置tomcat路径2. 创建项⽬或模块时 , 选择java enterprise(也叫javaEE企业应⽤) , 检查Tomcat服务器是否配置成功 , 并勾上webAppliciation⾃动创建web.xml⽂件(web项⽬核⼼⽂件 ,必须创建)写模块名3. 项⽬会⾃动配置完成 , 再设置项⽬跟路径(建议设置)完成以上配置可以直接启动服务器备注 : 由于idea中相关配置为⾃动配置 , 如果服务器启动异常 , 可以检查下图配置1. 读取web⽬录的路径web.xml⽂件路径是否正确2. 项⽬打包策略是否正确 , 便以⽂件路径是否正确(WEB-INF/classes)其他Web服务器Jetty : 更轻量级 , 更灵活 , 被⼀些框架继承 , 免费JBoss : JBoss⽀持JavaEE标准 , 能够作为JavaEE应⽤服务器使⽤ , servlet容器只是其中⼀部分 , 免费Weblogic : 市⾯上最好的J2EE⼯具之⼀ , 功能⼤⽽全 , 收费ServletServlet介绍servlet是JavaEE规范中的开发组建servlet运⾏在服务器端 , 需要servlet容器⽀持 , 例如tomcat(运⾏在tomcat中)可以通过浏览器访问servlet , servlet可以⽣成动态页⾯返回给服务器编写servletpublic class TestServlet extends HttpServlet {//继承httpservlet 重写doGet doPost⽅法protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//处理代码}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}Web.xml中配置<servlet><servlet-name> TestServlet </servlet-name><servlet-class>com.javasm.servlet. TestServlet </servlet-class></servlet><servlet-mapping><servlet-name> TestServlet </servlet-name><url-pattern>/TestServlet </url-pattern></servlet-mapping>配置中 :servlet-name相同作为同⼀组配置servlet-class配置完整包名类名url-pattern配置开⽅访问路径 , 该路径为虚拟路径配置时也可以使⽤注解进⾏配置@WebServlet("/配置访问路径")注意 : 配置⽂件和⽤注释配置作⽤相同 , 只选⽤⼀种⽅式 , 不建议两种同时使⽤Servlet实现⽅法实现servlet的三种⽅式 : ⼀个实现 , 两个继承1. 实现servlet接⼝2. 继承GenericServlet抽象类 , 重写service()⽅法3. 继承HttpServlet抽象类(Httpservlet继承于GenericServlet) , 重写doGet() doPost()⽅法Servlet⽣命周期Servlet其他配置参数servlet中配置初始化参数 , 可以在servlet中直接读取配置中:<servlet><servlet-name>HelloServlet</servlet-name><servlet-class>com.javasm.servlet.HelloServlet</servlet-class><init-param><param-name>testParam</param-name><param-value>Hello Servlet</param-value></init-param></servlet>代码中:String initParam = getInitParameter("testParam");配置servlet其中顺序 : load-on-startup<servlet><servlet-name>HelloServlet</servlet-name><servlet-class>com.javasm.servlet.HelloServlet</servlet-class><load-on-startup>1</load-on-startup></servlet>注意 : 如果配置了loat-on-startup , servlet实例会在项⽬启动时加载 , 并按照load-on-stratup中配置的顺序加载 , 如果不加load-on-startup , 实例会在有请求访问到该servlet时实例化Servlet中处理乱码Servlet运⾏在Web服务器(tomcat)中 , tomcat默认对传递的数据使⽤ios-8859-1进⾏编码 , 传递中⽂⽆法正常显⽰乱码分为两种情况 :请求乱码 :如果数据在传递时是正常中⽂ , 但是在servlet中取出是乱码 , 需要在请求对象中设置编码格式 , 对请求数据进⾏重新编码request.setCharacterEncoding("UTF-8");响应乱码 :如果数据在servlet中是正常中⽂ , 到页⾯中显⽰乱码 , 则需要在响应对象中设置相应头 , 让页⾯指定以何种编码格式解析相应数据response.setContentType("text/html;charset=UTF-8");实例代码:package com.javasm.controller;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class MyServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubsuper.doGet(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//请求乱码 req.setCharacterEncoding("utf-8");//响应乱码 resp.setContentType("text/html;charset=utf-8");req.setCharacterEncoding("utf-8");String uname = req.getParameter("uname");System.out.println(uname);resp.setContentType("text/html;charset=utf-8");PrintWriter pw = resp.getWriter();pw.print("hello! <h1>"+uname+"</h1>");pw.flush();pw.close();}}Servlet跳转页⾯的重定向和转发重定向重定向过程简单解释 :浏览器发送请求给服务器 , 服务器⽆法处理浏览器发送的请求 , 转⽽让浏览器找其他服务器去完成请求 , 此过程⼀直进⾏ , 直到任务完成特点 :1. 重定向是客户端⾏为(浏览器重新请求)2. 重定向是浏览器做了⾄少两次访问请求(有可能重定向多次)3. 重定量使浏览器地址改变4. 重定向两次跳转之间传输的信息会丢失5. 重定向可以指向任何的资源 , 包括当前应⽤程序中的其他资源 , 同⼀个站点上的其他应⽤程序资源 , 其他站点的资源(如⾃⼰⼯程重定向到百度)注意 :传递给HttpServletResponse.sendRedirect⽅法的响应URL以"/"开头 , 它是相对于整个web站点的根⽬录重定向代码实现转发原理 :转发过程简单解释 :浏览器请求服务器 , 服务器⽆法完成浏览器请求 , 将请求直接交给其他服务器⽽不是再响应给浏览器 , 再服务器转发的过程中携带浏览器给服务器的数据特点 :1. 转发是服务器⾏为(不经过浏览器)2. 转发过程中浏览器只做了⼀次响应3. 转发过程中浏览器地址不变4. 转发过程中服务器之间的信息传⼊信息不会丢失 , 可以通过request传递数据5. 转发只能将请求转发给同⼀个Web应⽤的组件注意 : 如果创建RequestDispatcher对象时指定的相对URL以"/"开头 , 它是相对于当前Web应⽤程序的根⽬录(只能是本⼯程下 , 因为是服务器⾏为)转发代码实现总结 :重定向和转发都是⽤来在servlet中跳转页⾯ , 但是有很⼤区别 , 重定向是浏览器的⾏为 , 转发是服务器的⾏为 , 所以重定向加⼤了带宽 , 转发加⼤服务器压⼒ , 对于参数传递也需要注意 , 重定向会使参数消失 , ⽽转发数据仍然存在 , 对于跳转的页⾯ , 重定向可以跳转⾄其他项⽬或⽹站 , 转发只能在⾃⼰⼯程下跳转路径相关注意 :绝对路径⼀般⽤在跳转其他⽹站 , 相对路径尽量避免使⽤ , 根路径则⼤多数情况都试⽤Servlet线程特性当多个客户端同时请求访问⼀个servlet , web服务器如何处理多个请求?多⽤户访问时 , servlet会针对每个请求开启新线程来处理数据收发 , 因为对每个请求的处理是固定的 , ⼀次请求收发就结束第⼀次访问servlet时 , 服务器将创建⼀个该servlet类的对象 , 并调⽤doXXX()⽅法⽣成响应 ; 多个客户端访问同⼀个servlet时 , 不再创建新的对象 , ⽽是共同⽤⼀个servlet对象 ,可以说 , servlet是多线程单实例的注意 : 多线程访问单实例的情况下 , 会不会产⽣线程安全问题 ?每个线程间 , 栈是独⽴的 , 运⾏⽅法时 , 会压⼊栈帧 , 所以运⾏⽅法时线程不会相互影响 , 因为单实例 , 所以如果servlet中有成员变量 , 那么所有县城都会放问道同⼀个实例的成员变量 , 会造成线程安全问题所以使⽤servlet时 , 尽量不要建⽴成员变量Servlet域对象域对象 , 是指服务器交互过程中可以⽤来存储数据的空间 , 相互独⽴ , ⽣效的时机不同 , 都可以⽤来存储信息Servlet三⼤域对象的应⽤request⼀个⽤户可以有多个每次请求都会产⽣⼀个请求结束对象消失建议⽤于页⾯间值传递Seesion⼀个⽤户⼀个每个浏览器都会产⽣⼀个会话过期或者关闭浏览器对象消失建议存放⼀些⽤户信息 , 不要把过多的信息存放在session⾥ServletContext(appliciation)全局只有⼀个是⼀个全局的存储信息空间 , 服务器开始就存在 , 服务器关闭才释放为了节省空间 , 提⾼效率 , 只存放少量重要的信息域对象统⼀⽅法 :返回值类型⽅法名⽅法作⽤void setAttribute(String key , Object value)以key/value的形式保存对象值Object getAttribute(String key)通过key获取对象值Servlet中常⽤类和⽅法ServletContext接⼝⽅法说明public void setAttribute (String name , Object object)绑定⼀个java对象和⼀个属性名 , 并存放到ServletContext中 , 参数name指定属性名 , 参数Object表⽰共享数据public Object getAttribute (String name)根据参数给定的属性名 , 返回⼀个Object类型对象public String getContextPath()返回当前web应⽤的URL⼊⼝public String getIntiParameter(String name)返回Web应⽤范围内匹配的初始化参数值 , 在web.xml中元素中元素表⽰应⽤范围内初始化的参数ServletConfig接⼝⽅法说明public string getInitParameter(String path)获取web.xml中指定Servlet的初始化参数值public ServletContext getServletContext()回去ServletContext实例public String getServletName()回去当前Servlet的名称HttpRequest(很常⽤)⽅法说明public String getParameter(String name)获取页⾯提交制定名称的参数值public string[] getParameterValues(String name)获取页⾯提交相同该名称参数的数组值public void setCharacterEncoding("UTF-8")设置请求字符编码格式public Map getParameterMap()返回⼀个保存了请求的所有参数和值的map对象public Object getAttribute(String name)返回⼀个请求中属性名为name的属性值public void setAttribute(String name , Object obj)向request范围内设置属性 , 参数name为属性名 , obj为属性值public String getContextPath()返回当前Web项⽬的跟路径Request对象中封装了很多跟http路径相关的⽅法request.getContextPath(); 项⽬名(/WebDemo)request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath+"/"结果为 : http://localhost:8080/WebDemo/request.getRemoteAddr() 客户端IP地址request.getServletPath() 请求的servlet的地址/studentrequest.getRealPaht("/") 在tomcat中的路径request.getRequestURL(); 获取请求路径/web_demo/studentHttpResponces⽅法说明public PrintWriter getWriter()获取响应的打印输出流对象public void setContexttype("text/html;charset=UTF-8")设置响应内容的类型和字符编码格式response对象中主要封装跟输出信息相关的⽅法HttpSession⽅法说明setAttribute(String key , Object value)以key/value的形式保存对象值getAttribute(String key)通过key获取对象值setMaxInactiveInterval()设置session的有效⾮活动事件 , 以秒为单位getId()获取session对象的编号invalidate()设置session对象失效session使⽤ :HttpSession session = request.getSession()从request中获取会话(session)对象 , 每个浏览器都会产⽣单独的session对象session作为会话对象 , 经常⽤来保存⽤户相关的登陆信息 , ⽅便服务器调⽤(⽤户本⾝信息 , 权限信息等)案例 :⽤户登录 , 通过session做是否已登录的访问控制登陆时将⽤户对象放在session中 , 访问其他服务时先判断⽤户是否登陆 , 有则进⾏服务 , 没有提⽰未登陆 ,session登陆案例。

servlet课堂笔记

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方法了。

servlet课堂学习笔记

servlet课堂学习笔记
夹压缩之后生成的.war文件)拷贝到servlet容器特定的
t),同时,也具有一个完整的
web服务器的功能。
step5 启动服务器,访问
http://ip,port/appname/servlet-uri
http://localhost:8080/firstweb/sayHello
请求数据包里面。
step3 浏览器发送请求。
step4 服务器解包(将请求数据包中的数据解析出来,
放到request对象里,方便servlet去获取请求参数),
另外,服务器还会创建一个response对象(方便servlet
将处理结果发送给浏览器)。
step5 服务器依据请求资源路径找到要访问的servlet并
step2 在服务器端,添加
request.setCharacterEncoding("utf-8");
告诉服务器,以指定的编码格式去解码。
编码方面的基础知识:
jvm在内存当中,保存的所有的字符都采用unicode编码格式
保存。(unicode编码也称为原码)
在输出时,需要编码:即将unicode编码格式保存的字符转换
2) 查看当前的数据库实例
show databases;
3) 创建一个数据库
//创建一个名叫jd1205db的数据库,其默认
//的字符集是utf8,这样设置的目的是为了保存
//中文
create database jd1205db default character set utf8;
请求参数进行计算,动态生成html),需要扩展web服务器功能:
方案一 使用cgi(common gateway interface)程序来扩展

Servlet_Jsp笔记

Servlet_Jsp笔记

1servlet1.1第一个servlet1.普通的java类2.继承javax.servlet.http包中的HttpServelt3.重写doGet()4.按照tomcat的应程程序目录约定组装应用程序WebAppWEB-INFclasseslibweb.xml5.定义servlet与请求url地址的映射<servlet><servlet-name>servlet04</servlet-name><servlet-class>.leadfar.MyServlet</servlet-class> </servlet><servlet-mapping><servlet-name>servlet04</servlet-name><url-pattern>/servlet/lifeCycle</url-pattern></servlet-mapping>5.WEB请求响应过程客户端浏览器服务器TomcatMyServlet4: 输入url 地址(http://localhost:8080/first/servlet1)1: 启动tomcat3: 监听8080端口5: request(get)6: 读取请求信息7: 截取URL 路径8: 取出应用程序名称(first)9: 取出路径(/servlet1)2: 装载应用程序(如first)10: 根据url-pattern 找到对应的servlet-mapping11: 分析出servlet-name(MyServlet)12: 通过名称MyServlet 找到对应的Servlet(class 的全路径)13: 通过反射创建14: 能够获取该请求为Get 请求15: doGet(request,response)16: 设置mime 17: 设置编码18: 输出内容19: response1.2.servlet 生命周期1.servlet 是单例,因此注意实例变量的使用,易造成线程不安全2.init()和init(config)都重写init(config)只会被执行3.init()方法是与servelt 实例产生是同步的,当调用构造器实例化servlet 后马上会执行init()4.默认的servlet 实例产生是在第一次请求时5.应用服务器启动的时候初始化(load-on-startup 参数)负数或不配置,则意味着顺序不固定,一般就是第一次访问的时候初始化 正数或0,表示在部署或应用服务器启动的时候初始化,数字越小,表示会优先加载(按顺序从小到大依次加载和初始化)<servlet ><servlet-name >servlet05</servlet-name ><servlet-class >.leadfar.MyServlet02</servlet-class > <load-on-startup >5</load-on-startup > </servlet >6.在web.xml 中配置servlet 的启动时初始化的一些程序配置参数<servlet><servlet-name>servlet05</servlet-name><servlet-class>.leadfar.MyServlet02</servlet-class><init-param><param-name>schoolName</param-name><param-value>清华大学</param-value></init-param><load-on-startup>5</load-on-startup></servlet>7.访问配置参数public void init(ServletConfig config) throws ServletException { // TODO Auto-generated method stub//super.init(config);System.out.println(“ ServletConfig init()................”);name=config.getInitParameter(“schoolName”);System.out.println(name);}1.3doGet()和doPost()1.除了form表单设置method=”post”之外全部为post方式提交,post方式将决定执行doPost()2.实际上父类的service方法是servlet的总开关,它将取得http请求中的请求方式,并转向servlet的对应的方法,因为不要随意重写service方法。

Servlet学习笔记

Servlet学习笔记

Servlet学习笔记Servlet的基础概念1. Servlet是什么?答:1) 模块化的程序,运行在服务器端,增强了请求/响应导向服务;2) 应用示例:a. 访问远端对象;b. 跟踪大量信息;c. 多用户协作2. HTTP和Servlets答:1) Servlet是HTTP协议中作为CGI的一个替代品;2) HttpServlet类用于开发HTTP为基础的Servlet3. HttpServlet答:1) 继承抽象类javax.servlet.GenericServlet,实现接口java.io.Serializable;2) 用以开发Http协议为基础的Servlet4. 服务方法答:1) 每当服务接收到对Servlet的请求时,服务器就会产生一个新线程,并调用Service。

service 方法检查HTTP请求类型(GET、POST、PUT、DELETE等),并相应地调用doGet、doPost、doPut、doDelete 等。

2) doGet/doPost方法接收HttpServletRequest和HttpServletResponse对象。

3) 99%的时间里,只需注意GET和/或POST请求;4) 没有任何doHead方法。

5. 返回响应答:1) PrintWriter out = response.getWriter // 用于返回文本数据给客户端2) ServletOutputStream out = response.getOutputStream // 用于返回二进制数据给客户端6. 支持Servlet的Web服务器答:1) J2EE应用服务器包括:Web Container和EJB Container;2) Web Container的Servlet Engine提供对Servlet的运行支持;用Servlet处理表单数据1. Form元素的属性答:1) ACTION: 用来指定要处理FORM数据的Servlet的URL,也可以指定FORM数据将要发送到的电子邮件;2) METHOD: 指定数据传送给HTTP服务器的方法;3) ENCTYPE: 指定数据在传输之前进行编码的方式, 例multipart/form-data 编码将每个字段作为MIME可兼容的文档的单独部分传输。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一.Web结构1.两种应用程序①桌面应用程序:QQ、CS、MyEclipse、Office、DW、360、浏览器等必须下载、安装、桌面快捷方式、注册表信息、操作系统后台服务、占用操作系统端口②web应用程序:不需要下载、占用硬盘空间、占用操作系统服务,只需要浏览器、网线(运行在Internet 网络上面的软件项目) 阿里巴巴③注意:在普通的Java项目中需要考虑文件导入路径,而Java web项目则不需要,包含在项目中的文件随时随地可以使用。

2.web 项目结构客户端浏览器---------Internet 网络--------- Web 服务器3.Web 项目开发技术SUN Java EE(Ejb、JavaMail、JMS 、JNDI、Servlet、JSP、)微软自由人PHP (sina、FaceBook)Adobe Flex (Flash、Java、ActionScript)4.Http协议①HTTP 是一个属于应用层的面向对象的超文本传输协议,基于TCP/IP协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。

它于1990年由W3C组织制定的,具体协议内容在内部有一个文件编号:RFC2616,经过几年的使用与发展,得到不断地完善和扩展。

目前在WWW中使用的是HTTP/1.0的第六版,HTTP1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。

②HTTP特点:(1)无连接:分为4个阶段:建立连接、发送请求、等待响应、关闭连接优点:快速、简单、不占用网络服务器资源缺点:速度由网络来决定,每次传输数据量不能太大(2)无状态:HTTP 协议只负责传输数据,不负责保管所传递的数据客户端服务器b1 ---------------------\b2 --------------------- \b3 --------------------- \serverb4 --------------------- /b5 --------------------- /b6 --------------------- /③URL:(Uniform/Universal Resource Locator)统一资源定位符,请求的是服务器上的资源。

资源是一个抽象的概念,指存放在服务器上的能够被客户端访问到的所有类型的文件(比如:文本、图片、音频、视频等)。

④Http访问服务器资源的方式⑪URL地址⑫表单提交表单提交实例⑤get和post方法的区别⑪get方法通过URL传递参数,用户在客户端地址栏可见,如果是传递密码的话,不安全;post方法通过请求的body传递参数,用户在客户端不可见,更安全。

⑫get方法通过地址栏URL传递请求,而URL本身有长度限制,一般不超过255个字符;post方法通过请求body传递参数,没有长度限制。

但是get和post读取的范围是一样的,只是一个信息可见,而另一个则不可见。

5.web容器①web容器是web程序运行的环境,一般由具体的服务器程序实现具体的功能②web容器功能:⑪生成并管理相关对象,供servlet使用⑫管理servlet生命周期,提供servlet的运行环境⑬充当web服务器和servlet之间的桥梁Ⅰ.将请求从web服务器转发到servletⅡ.将响应从servlet转发到web服务器6.容器与服务器服务器:食堂提供就餐服务,提供全部服务的通称,内部可能包含多种服务。

容器:一种容器就是一个独立的小服务器,提供单一的服务功能。

Tomcat 服务器|Tomcat 容器(1)Tomcat实现了SUN JavaEE 中多个API 标准--Servlet、JSP、没有实现大型(企业级程序)的标准如EJB(2)在Tomcat中提供的每个实现标准,我们都可以称为一个小的容器实际上Tomcat中包含了Servlet容器、JSP容器(3)实际上Tomcat服务器是由很多小容器组成,也可以称Tomcat是一个大容器--Tomcat 容器二.Servlet1.Servlet的概念①Servlet 是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。

它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。

Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。

Servlet与Web服务器的关系类似于Applet与Web浏览器的关系(这也是为什么Servlet技术被称为Servlet的原因),我们可以将Servlet 想象成没有前端界面(faceless)的Applet。

②服务器端动态处理常见技术③在Servlet中,修改web.xml、servlet类都要重新启动tomcat服务器才能生效2. Servlet 的对象创建和生命周期Servlet 是一个Java 类,该类要运行必须创建对象。

问题:①由谁创建?答:由读取web.xml 文件的服务器软件来进行创建。

②何时创建Servlet 对象?(1)web程序,服务器端只有一个,但是访问的客户端数量没有办法控制(2)客户端访问的时间没有办法限制。

在Tomcat服务器端,一个Servlet类一次只创建一个Servlet对象,该对象通过线程(对用户使用该Servlet的时间进行分段)使用浏览器端服务器端/search s = new SearchServlet()t1 t2 t3 t4... t10u1u2u3u1...u3类似于电影,1秒轮换24张静态图片,人们就认为图片是动态的。

③该Servlet 对象创建的时间有两个:(1)服务器启动时创建,多出现在项目运行阶段,会检查所有当前服务器上的项目,检测项目中web.xml文件,在检测的同时,看到<servlet-class>,就会自动的创建对象,并且保持在内存中。

(2)当用户第一次访问服务器上一个新的Servlet时,在开发过程中。

④生命周期:Servlet生命周期:指Servlet对象在服务器内存中从创建到调用,到销毁的整个过程,主要研究该过程中哪些方法对我们的开发有用。

(1)实例化:当客户端通过URL请求的时候,web容器根据web.xml配置自动调用该Servlet的构造方法,实例化对象。

(2)初始化:通过该servlet对象调用init()方法,读取web.xml中该servlet 的配置信息,为service方法提供相关数据。

(3)服务:通过该对象调用service()方法,如果是继承HttpServlet,则根据请求头信息中的请求方法,调用对应的doGet()/doPost()(4)销毁:不是在service()方法调用完后,立即调用,而是由JVM来决定。

当JVM需要销毁一些对象、释放内存空间的时候,才会去调用该实例的destroy()方法。

3. Servlet 中的常用对象①Interface:javax.servlet.ServletMothd:init(ServletConfig config)service(ServletRequest req, ServletResponse res)destroy()public ServletConfig getServletConfig();//得到web.xml 中的配置信息②abstract Class:⑪javax.servlet.GenericServlet//重写父接口中的所有方法//从web.xml文件中得到初始化参数的值String getInitParameter(String name)//代表web.xml配置文件public ServletConfig getServletConfig()//代表服务器中该项目的访问路径(上下文对象即项目名)public ServletContext getServletContext()⑫javax.servlet.http.HttpServletdoXXXX()//返回上次修改HttpServletRequest 对象的时间,该时间是自格林威治标准时间1970年1月1日午夜起经过的毫秒数protected long getLastModified(HttpServletRequest req)③HttpServletRequest(interface) 实现了ServletRequest接口,为HttpServlet 提供请求信息.在HTTP 协议中,规定了很多信息:请求头信息、请求内容。

http://localhost:8080/servlet/index.jsphttp:request.getScheme();localhost: request.getServerName();8080: request.getServerPort();/servlet: request.getContextPath();/index.jsp request.getServletPath();/servlet/index.jsp: request.getRequestURI();完整请求路径:request.getRequestURL();IP 地址:request.getLocalAddr();④HttpServletResponse(interface):代表服务器向浏览器返回的响应直接输出内容到浏览器,使用Servlet输出HTML页面PrintWriter out = response.getWriter();out.print("Hello :");设置响应的内容类型:response.setContentType("text/html; charset=UTF-8");注意:使用response对象跳转,可以跳到项目外的一个URL资源上如:response.sendRedirect(“”);使用request对象跳转,只能在本项目资源中跳转如:request.getRequestDispatcher(“url”).forward(request,response);告诉浏览器不要缓存页面:页面刷新:单位是秒⑤两个对象公用方法:response.setCharacterEncoding("UTF-8");request.setCharacterEncoding("UTF-8");就像盖房子,运送沙子:(1)不管什么沙子,全部运到后,再用机器筛成需要的大小(2)先按照要求,筛好后运到工地⑥javax.servlet.RequestDispatcher(interface):对请求响应进行补充的一个接口,主要负责两个功能RequestDispatcher disp =request.getRequestDispatcher("login_ok.jsp");(1)跳转disp.forward(ServletRequest,ServletResponse);(2)包含disp.include(ServletRequest,ServletResponse);程序中一般连写:request.getRequestDispatcher("login_ok.jsp").forward(request,response);⑦Cookie(class): 保存在浏览器中的一部分数据,可以被包含在请求对象中传递给服务器Http响应中的CookieSet-Cookie:CustomerID=1234;domain=;path=/salesSet-Cookie:对Cookie通过名称=值的方式进行设置,这些值在用户下次访问的时候会被使用,其中名值对可以设置多个。

相关文档
最新文档