【无标题】

                  **servlet**

jsp中的九大内置对象jsp 中的内置对象,是指 Tomcat 在翻译 jsp 页面成为 Servlet 源代码后,内部提供的九大对象。

              **jsp的九大内置对象**

request 请求对象
response 响应对象
pageContext jsp的上下文对象
session 会话对象
application ServletContext对象
config ServletConfig对象
out jsp的输出流对象
page 指向当前jsp的对象
exception 异常对象

Servlet
概念:
狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只是用来扩展基于HTTP协议的Web服务器(可以理解为Servlet是服务器与程序员之间的协议或规定,必须实现Servlet的类)

特点:
运行在支持java的应用服务器上
Servlet的实现遵循了服务器能够识别的规则,也就是服务器会自动根据请求调用对应的servlet进行请求处理。
简单方便、可移植性强

使用:
eg:
A:创建普通的java类并继承HttpServlet
B:覆写service方法
C:在service方法中书写逻辑代码即可
D:在WEB-INF文件夹下的web.xml文件中配置servlet

运行流程:
URL组成:服务器地址:端口号/虚拟项目名/servlet的别名
URI:虚拟项目名/servlet的别名
浏览器发送请求到服务器,服务器根据请求URL地址中的信息在webapps目录下找到对应的项目文件夹,然后在web.xml中检索对应的servlet,找到后调用并执行Servlet

Servlet的生命周期
A:从第一次调用到服务器关闭
B:如果Servlet在web.xml中配置了load-on-startup,生命周期为从服务器启动到服务器关闭
注意:
init()方法是对Servlet进行初始化的一个方法,会在Servlet第一次加载进行存储时执行
destory()方法是在Servlet被销毁时执行,也就是服务器关闭时。

service()和doGet()和doPost()方法的区别
service()方法:
不管是get方式还是post方式的请求,如果Servlet类中有service()方法,则优先调用service()方法。
doGet()方法:
在没有service()方法的情况下如果是get方式的请求所调用的处理请求的方法
doPost()方法:
在没有service()方法的情况下如果是post方式的请求所调用的处理请求的方法
注意:
如果在复写的service()方法中调用了父类的service()方法(super.service(arg0, arg1)),则service()方法处理完后,会再次根据请求方式响应的doGet()和doPost()方法执行。所以,一般情况下是不在覆写的service()方法中调用父类的service()方法的,避免出现405错误

Servlet的常见错误:
404错误:资源未找到(URL书写错误)
原因一:在请求地址中的Servlet的别名书写错误。
原因二:虚拟项目名称拼写错误
500错误:内部服务器错误
错误一:java.lang.ClassNotFoundException: *******
解决:在web.xml中校验servlet类的全限定路径是否拼写错误
错误二:因为service()方法体中代码执行错误导致
解决:根据错误提示对service()方法中的代码进行错误更改。
405错误:请求方式不支持
原因:请求方式和servlet中的方法不匹配所造成的。
解决:尽量使用service()方法进行请求处理,并且不要在service()方法中调用父类的service。

Servlet在运行时服务器会调用service()方法,并创建了Request对象和Respone对象

Request对象学习:
作用:
Request对象中封存了当前请求的所有请求信息

使用:
获取请求行数据
req.getMethod(); //获取请求方式
req.getRequestURL(); //获取请求URL
req.getRequestURI(); //获取请求URI
req.getScheme(); //获取协议
获取请求头数据
req.getHeaderNames(); //获取所有请求头的键的枚举
req.getHeader(“键名”); //获取指定键的信息
获取用户数据
req.getParameter(“键名”); //获取指定键的用户数据
req.getParameterValues(“键名”); //获取同键不同值的用户数据(多选),返回的为数组

   注意:

              如果要获取的请求数据不存在,不会报错,返回为null.
              Request对象由tomcat服务器创建,并作为实参传递给处理请求的servlet的service()方法。

Respone对象学习:
作用:
用来响应数据到浏览器的一个对象

使用:
设置响应头
setHeader(String name, String value); //在响应头中添加响应信息,但是同键会覆盖
addHeader(String name, String value); //在响应头中添加响应信息,但是不会覆盖。
设置响应状态
sendError(int num, String msg); //自定义响应状态码。
设置响应实体
resp.getWrite().write(String str); //响应具体的数据给浏览器
设置响应编码格式
resp.setContentType(“text/html;charset=utf-8”);

  总结:

              service请求处理代码流程:
                     设置响应编码格式
                     获取请求数据
                     处理请求数据
                            数据库操作(MVC思想)
                     响应处理结果

请求乱码问题解决:
A:使用String进行数据重新编码
uname=new String(uname.getBytes(“iso8859-1”),“utf-8”);
B:使用公共配置
get方式:
在tomcat的目录下的conf目录中修改server.xml文件:在Connector标签中增加属性useBodyEncodingForURI=“true”
req.setCharacterEncoding(“utf-8”);
post方式:
req.setCharacterEncoding(“utf-8”);

Servlet流程总结:
浏览器发起请求到服务器(请求)
服务器接受浏览器的请求,进行解析,创建request对象存储请求数据
服务器调用对应的servlet进行请求处理,并将request对象作为实参传递给servlet的方法
servlet的方法执行进行请求处理
//设置请求编码格式
//设置响应编码格式
//获取请求信息
//处理请求信息
//创建业务层对象
//调用业务层对象的方法
//响应处理结果

请求转发学习:
作用:实现多个servlet联动操作处理请求,这样避免代码冗余,让servlet的职责更加明确。
使用: req.getRequestDispatcher(“要转发的地址”).forward(req, resp);
地址:相对路径,直接书写servlet的别名即可。
特点:一次请求,浏览器地址栏信息不改变。
注意:请求转发后直接return结束即可。

Servlet请求转发路径:
/表示项目根目录
req.getRequestDispatcher("/资源路径").forward(req,resp);

request作用域:
解决了一次请求内的servlet的数据共享问题

重定向:
解决了表单重复提交的问题,以及当前servlet无法处理的请求的问题。
使用:resp.sendRedirect(String uri);
特点:两次请求,两个request对象。浏览器地址栏信息改变。
时机:如果请求中有表单数据,而数据又比较重要,不能重复提交,建议使用重定向。
如果请求被Servlet接收后,无法进行处理,建议使用重定向定位到可以处理的资源。

Servlet重定向路径总结:
相对路径:从当前请求的路径查找资源的路径
相对路径如果servlet的别名中包含目录,会造成重定向资源查找失败。
绝对路径:第一个/表示服务器根目录
/虚拟项目名/资源路径

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值