关于Servlet的一点小总结

提出:为什么要有servlet?(解决以下问题)

服务器在接收到浏览器的请求后,会自动调用对应的逻辑代码进行请求处理。但是逻辑代码是由程序员编写并放到服务器中的,
那么服务器该怎么知道调用那个类和方法进行执行?

jspservlet(jsp引擎)
tomcat执行原理:请求一个jsp文件,先执行jspservlet,再执行jspservlet吐出来的servlet,响应html。(tomcat不知道有jsp)

servlet是什么:
侠义的servlet是指Java语言实现的一个接口,广义的servlet是指任何实现了这个servlet接口的类。(规范了服务器能够认知的代码的一种接口规范)

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

使用:

1、创建普通的java类并继承HttpServlet
2、覆写service方法
3、在service方法中书写逻辑代码即可
4、在webRoot下的WEB-INF文件夹下的web.xml文件中配置servlet

运行流程:

url:http://localhost:8080/project/my
组成:服务器地址:端口号/虚拟项目名/servlet的别名
URI:虚拟项目名/servlet的别名
浏览器→请求到服务器,服务器根据请求URL地址中的URI信息在webapps目录下找到对应的项目文件夹,然后在web.xml中检索对应的Servlet,找到后调用并执行Servlet。(如果WebRoot下面没有web.xml文件,则右键项目名,选择MyEcelipse,然后点Generage Deployment Descriptor Stub)

Servlet的生命周期:

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

Service方法和doGet方法和doPost方法的区别:

<form action="method" method="get/post"> (第一个method是表示向method发送表单数据)
	Service方法:可以处理get/post方式的请求,如果servlet中有Service方法会优先调用service方法对请求进行处理。
	doGet方法:处理get方式的请求
	doPost方法:处理post方式的请求

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

Servlet的常见错误:

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

request对象

解释:服务器接收到浏览器的请求后,会创建一个request对象,对象中存储了此次请求相关的请求数据。
	服务器在调用Servlet时会将创建的request对象作为实参传递给Servlet的方法。比如:service方法。
作用:request对象中封存了当前请求的所有请求信息。
使用:获取请求头	req.getMethod();req.getRequestURL();req.getRequestURI();req.getScheme();
	 请求行	req.getHeader("aaA");req.getHeaderNames();
	 用户数据	req.getParameter("键名");//返回指定用户数据	getParameterValues("键名");//返回同键不同值的指定数据,返回的是数组
注意:request对象是由tomcat服务器创建,并作为实参传递给处理请求的servlet的service方法。
	如果要获取的请求数据不存在,则返回null(不会报错!)

response对象

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

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

Servlet流程总结:

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

请求转发学习:

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

request对象的作用域:

问题:使用请求转发后,不同的servlet之间怎么进行数据共享?或者说数据怎么从一个servlet流转到另一个servlet?
解决:使用request对象的作用域
使用:request.setAttribute(object name,object value);
	request.getAttribute(Object obj)
作用:解决了一次请求内的不同servlet的数据共享问题。
作用域:基于请求转发,一次请求中的所有servlet共享。
注意:使用Request对象进行数据流转,数据只在一次请求内有效。
特点:服务器创建,每次请求都会创建,生命周期一次请求。

重定向:

问题:如果当前的请求,Servlet无法进行处理怎么办?
          如果使用请求转发,造成表单数据重复提交怎么办?
解决:使用重定向
使用:response.sendRedirect("路径")。本地路径:uri 网络路径:定向资源的URL信息。
特点:两次请求,两个request对象。浏览器地址栏信息改变

以上。持续更新……- -

发布了30 篇原创文章 · 获赞 1 · 访问量 1898

猜你喜欢

转载自blog.csdn.net/Zzh1110/article/details/103378543
今日推荐