接上一篇,Javaee学习笔记(一)
构建一个servlet项目
- 启动Eclipse
- 选择File – New – Dynamic Web Project 命名为MyServlet
- 右键创建好的文件夹,选择File – New – Servlet
- 按下图填写后,点击Finish
servlet的主要功能在于 交互式地浏览和修改数据,生成动态的Web内容。
本质上规范了服务器认知代码的接口规范,广义上实现了该接口的类都可以叫servlet
Web容器处理HTTP请求:
使用流程:
- 创建普通的java类并继承HttpServlet
- 覆写 service 方法
- 在 service方法中书写逻辑代码即可
- 在 webContent下的WEB-INF文件夹下的web.xml文件中配置servlet (安全性)
Servlet生命周期
- 从第一次调用到服务器关闭;
- 如果Servlet在web.xml里配置了load-on-startup,则生命周期为 从服务器启动到服务器关闭;(数字表示加载顺序)
- init方法是对servlet进行初始化的一个方法,会在servlet第一次加载进行存储时执行。
- destroy方法时在servlet被销毁时执行,也就是服务器关闭时。
doGet方法和doPost方法
doGet:处理 get 方式的请求
doPost:处理 post 方式的请求
service方法:可以处理 get / post 方式的请求,如果servlet中有service方法,会优先调用service方法对请求进行处理。
注:如果在覆写的service方法中调用了父类的service方法,
super.service(arg0,arg1)
则service方法处理完后,会再次根据请求方式响应的doGet和doPost方法执行。所以,一般情况下我们是不在覆写的service中调用父类的service方法的,避免出现405的错误。
Servlet的常见错误
-
404错误:资源未找到
原因一:在请求地址中的servlet的别名书写错误;
原因二:项目名称拼写错误 -
500错误:内部服务器错误导致
错误一:
java.lang.ClassNotFoundException:com.bjsxt.Servlet.Mothod
解决:在web.xml中校验servlet类的权限路径是否拼写错误。
错误二:
因为service方法的代码执行错误导致
解决:根据错误提示对service方法体中的代码错误进行更改。 -
405错误:请求方式不支持
请求方式和servlet的方法不匹配
JSP的九大内置对象
-
out
-
request
-
response
-
session
-
application
-
pageContext
-
config
-
page
-
exception
request 请求对象
存储客户端向服务端发送的请求信息。
服务器接收到浏览器的请求后,会创建一个request 对象,对象中存储了此次请求相关的请求数据。服务器在调用servlet 时会将创建的request 对象作为实参传递给servlet的方法,比如:service方法。
使用:req.
注意:如果要获取的请求数据不存在,不会报错,返回null。
获取请求头数据- String getMethod() 获取请求方法 - String getRequestURL() 获取请求url - String getRequestURI() 获取uri - String getScheme() 获取协议
获取请求行数据
- String getHeader(String name) 获取指定请求行信息 - Enumeration getHeaderNames() 获取所有的请求行的键的枚举 得到Object对象
Enumeration e = req.getHeaderNames(); while(e.hasMoreElement()){ String name = (String) e.nextElement(); String value2 = req.getHeader(name); System.out.println(name+":"+value2); }
获取请求用户数据
get/post 方式返回结果一样,发数据和取数据的key要一致,否则会乱码。- String getParameter(String name) 根据请求的字段名key,返回字段值value
注:
request对象由tomcat服务器创建,并作为实参传递给处理请求的servlet的service方法。- String getHeaderNames() 返回请求头的键名的枚举集合 - String getParameter(String name) 根据请求的字段名key,返回字段值value - String[ ] getParameterValues(String name) 根据请求的字段名key,返回多个字段值value - getParamaterNames() 返回所有用户请求数据的枚举 - void setCharacterEncoding("编码格式 utf-8") 设置请求编码(tomcat7以前默认iso-8859-1,tomcat8后面改为了utf-8) //设置post方式 - getRequestDispactcher().forward(request,response); 请求转发的方式跳转页面 A-->B 可以获取数据,且地址栏没有改变 //(仍保留转发时的页面) - servletContext getServerContext() 获取项目的ServletContext对象