WEB开发——Servlet(Servlet、ServletRequest/Response、HttpServletRequest、转发与重定向、HttpServlet)

本文介绍了JavaWeb应用的基本概念,包括Servlet、ServletRequest/Response、HttpServletRequest以及Servlet容器如Tomcat的角色。讲解了Servlet的功能,作为动态Web内容生成器,并强调了Servlet的单实例性质可能带来的安全问题。此外,还探讨了web.xml中Servlet的注册方法,以及ServletRequest和ServletResponse接口在处理HTTP请求和响应中的作用。特别提到了请求转发和重定向的区别。
摘要由CSDN通过智能技术生成

JavaWeb应用的概念:
由一组Servlet、HTML页面、类、以及其它可以被绑定的资源构成。可以在供应商提供的实现Servlet规范的Servlet容器中运行。应用中可以包含:Servlet、JSP、实用类、静态文档(HTML、图片等)、描述Web应用的信息(web.xml)
------------------------------------------------------------------------------------------------------------------
Servlet容器的概念:
●  为JavaWeb应用提供运行时的环境,负责管理Servlet和JSP的生命周期,以及管理它们的共享数据
●  也称为JavaWeb应用容器,或者Servlet/JSP容器
●  流行的Servlet容器软件:Tomcat、Resin、J2EE服务器(如Weblogic)中也提供了内置的Servlet容器
------------------------------------------------------------------------------------------------------------------
Tomcat目录结构:(Tomcat是一个免费的开放源代码的Servlet容器)

------------------------------------------------------------------------------------------------------------------
Tomcat的端口号:(打开conf目录下的server.xml文件)

------------------------------------------------------------------------------------------------------------------
Web工程目录结构:

------------------------------------------------------------------------------------------------------------------
Servlet简介:Server Applet,是Java Servlet的简称)
●  称为小服务程序或服务连接器,主要功能在于交互式地浏览和修改数据,生成动态Web内容
●  与平台无关的服务器端组件,运行在Servlet容器中
●  Servlet是单实例的,可能存在安全问题

注意:Servlet容器负责Servlet和客户的通信(采用“请求/响应”的模式)以及调用Servlet的方法
------------------------------------------------------------------------------------------------------------------
Servlet的注册:

实现Servlet接口:

web.xm中注册Servlet:

注解: @WebServlet(name=注册名, urlPatterns={ 访问路径 }),简写@WebServlet(访问路径)

注意:注册到serlvet容器中的一个servlet可以被多个地址映射。在使用注解时,多个地址映射用花括号括起来,路径与路径使用逗号隔开。load-on-startup标签配置在servlet节点中,表示该Servlet被创建的时机,值越小越早被构建对象,如果为负数,则在第一次访问时被构建对象
------------------------------------------------------------------------------------------------------------------
Servlet的生命周期:
●  默认是在第一次访问这个servlet时构建他的对象(调用构造器)
●  紧接着马上调用init方法,用于初始化servlet
●  请求时始终调用service方法,这个service方法是处理请求和响应的方法
●  当Web服务器被停止服务时,servlet被销毁了,调用的是destroy方法
注意:servlet的生命周期相关的方法都是由Web服务器调用的
------------------------------------------------------------------------------------------------------------------
请求与相应:

------------------------------------------------------------------------------------------------------------------
出现乱码解决方式:
●  修改当前工程所有文件的字符集编码为UTF-8,及整个工程为UTF-8
●  修改ServletRequest对象接收的字符集编码为UTF-8
●  修改ServletResponse对象输出的字符集编码为UTF-8
●  修改web容器的配置文件字符集编码为UTF-8( URIEncoding="UTF-8",加在端口号内)
注意:text/html表示为输出的方式
------------------------------------------------------------------------------------------------------------------
ServletConfig接口: (存放的是当前servlet在web.xml配置的初始化信息)

web.xml文件的servlet中配置:


方法:
●   getInitParameter(Stirng  s) :获得当前servlet配置下指定参数名的参数值

●  getInitParameterNames( ):获得当前servlet配置下所有参数名(类似于下面的getParameterNames()方法)

●   getServletName( ) :获得当前servlet注册到web容器的名字
●   getServletContext( ) :获得当前web工程的上下文 (相关信息)
------------------------------------------------------------------------------------------------------------------
ServletContext接口: (存放的是和当前工程相关的信息)
功能:
●  获取WEB应用程序的初始化参数 
●  记录日志 
●  application域范围的属性 
●  访问资源文件 
●  获取虚拟路径所映射的本地路径 
●  WEB应用程序之间的访问 
方法:
●   getInitParameter(String  s) :获得当前web工程配置下指定参数名的参数值
●   getInitParameterNames( ) :获得当前web工程配置下所有参数名(类似于下面的getParameterNames()方法)
●   getContextPath( ) :获得当前工程的名字
●   getRealPath(String  path) :获取当前WEB应用的某一个文件在服务器上的绝对路径(不是部署前的路径)
●   getResourceAsStream(String  s) :读取外部署后的文件,把他转换成输入流( / 为当前WEB应用的根目录)

web.xml文件的根元素<web-app>中配置:


------------------------------------------------------------------------------------------------------------------
get请求和post请求:
什么是get请求: (get方式传送的数据量一般限制在1KB以下)
●  在浏览器中输入某个URL地址或单击网页上的一个超链接时,发出的HTTP请求方式
●  网页中的form表单元素的method属性被设置为了“get”,浏览器提交这个表单时生成的HTTP请求方式
●  传递参数的格式:http://www.baidu.com/counter.jsp?name=123&password=123
什么是post请求:
●  网页中的form表单元素的method属性被设置为了“post”,浏览器提交这个表单时生成的HTTP请求方式
●  将各个表单字段元素及其数据作为HTTP消息的实体内容发送给WEB服务器,传送的数据量要比GET大得多
------------------------------------------------------------------------------------------------------------------
ServletRequest: (封装了请求信息,可以从中获取到任何的请求信息)
●   getParameter(String  name) :根据请求参数名,获得参数值
●   getParameterValues(String  name) :根据请求参数的名字,返回请求参数对应的字符串数组

●  getParameterNames( ):返回所有参数名(古老的一种迭代器)

●  getParameterMap( ):返回请求参数的Map集合键值对(key: 参数名,  value: 参数值, String数组类型)


注意:getParameter( )方法只能获得单个值,像checkbox提交的多个值,,只能获取到第一个提交的值
------------------------------------------------------------------------------------------------------------------
HttpServletRequest: (是ServletRequest的子接口,使用时需强转)
●   getRequestURI( ) :获取请求的url
●   getMethod() :获取请求方式
●   getQueryString( ) :若是一个get请求, 获取请求参数对应的那个字符串, 即 ? 后的那个字符串

●  getServletPath( ):获取请求的Serlvet的映射路径 

注意:ServletRequest接口类用于封装请求消息,HttpServletRequest是专用于HTTP协议的ServletRequest子接口,它用于封装HTTP请求消息

------------------------------------------------------------------------------------------------------------------
ServletResponse: (封装了响应信息, 如果想给用户什么响应, 具体可以使用该接口的方法实现)
●   getWriter( ) :返回PrintWriter对象,调用该对象的print( )方法, 把参数直接打印到浏览器上

●  setContentType("application/msword"):设置响应的内容类型

注意:此接口类用于创建响应消息,HttpServletResponse是专用于HTTP协议的ServletResponse子接口,它用于封装HTTP响应消息

------------------------------------------------------------------------------------------------------------------

请求域属性:存储在ServletRequest对象中的对象称之为请求域属性
●  setAttribute(String  s ,Object  o):向request中添加一个属性,以键值对的方式存储起来
●  getAttribute(String  s ):获取request中的属性
注意:属于同一个请求的多个处理模块之间可以通过请求域属性来传递对象数据

------------------------------------------------------------------------------------------------------------------

请求的转发和重定向: 本质区别: 请求的转发只发出了一次请求, 而重定向则发出了两次请求

方法:

●  getRequestDispatcher(String  location): 请求的转发

●  forward(request,response):转发时携带的参数

●  sendRedirect(String  location):请求的重定向

转发:

●  /表示的是当前WEB应用
●  地址栏的地址不会改变
●  多次转发是一次请求
●  只能在当前web应用中转发
重定向:
●  /表示的是当前WEB容器
●  地址栏会发生变化
●  多次转发是多次请求
●  可以访问到当前web应用之外的资源

------------------------------------------------------------------------------------------------------------------
HttpServlet: 好处:直接使用HttpServletRequest和HttpServletResponse对象。不再需要强转

注意:在实际开发中, 我们大多使用HttpServlet,重写doXxx()方法,方法中写请求与响应,请求方式不明时,在方法内互调方法来执行(GenericServlet是Servlet接口和ServletConfig接口的实现类。如果新建的Servlet程序直接继承GenericSerlvet会使开发更简洁,HttpServlet是GenericServlet的子类,针对于HTTP协议所定制(在GenericServlet实现并重写这两个接口的方法service()中把ServletReuqest和ServletResponse转为了HttpServletRequest和HttpServletResponse))
------------------------------------------------------------------------------------------------------------------
自己整理,有些地方是扒拉的,如有侵犯,还望告知
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值