servlet简介
一般的网页程序,是由我们通过浏览器访问来实现的,在这一过程中浏览器发送请求,服务器接收请求,并对请求做出响应,这就是我们熟悉的B/S模型(浏览器-服务器),而servlet就是对请求做出处理的组件,运行于支持java的应用服务器中。
关联源码:
- 下载tomcat源码:
2.在esclipse配置源码:
3.配置好后,就可以查看源码
servlet体系结构:
Servlet中的Service、doGet、doPost 方法
浏览器发出请求时,不一定只能够调用service方法来处理请求,与service方法具有相同功能的处理功能的还有doGet和doPost方法,以下是他们之间的区别:
Service 方法
不管是 get 方式还是 post 方式的请求,如果 Servlet 类中有service 方法,则优先调用 Service 方法。
注意:如果在覆写的service方法中调用了父类的service方法(super.service(arg0, arg1)),则service方法处理完后,会再次根据请求方式响应的doGet和doPost方法执行。如果调用doGet或者doPost方法时发现并没有Servlet中并没有这种方法,会发生405错误,所以,一般情况下我们是不在覆写的service中调用父类的service方法的,避免出现405错误。
doGet 方法
在没有 service 方法的情况下如果是 get 方式的请求所调用的处理请求的方法
doPost 方法
在没有service方法的情况下如果是post方式的请求所调用的处理请求的方法
Servlet的常见错误
·404错误:资源未找到
原因一:在请求地址中的servlet的别名书写错误。
原因二:虚拟项目名称拼写错误
·500错误:内部服务器错误
错误一:java.lang.ClassNotFoundException: com.bjsxt.servlet.ServletMothod
解决:
在web.xml中校验servlet类的全限定路径是否拼写错误。
错误二:
因为service方法体的代码执行错误导致
解决:
根据错误提示对service方法体中的代码进行错误更改。
·405错误:请求方式不支持
原因:
请求方式和servlet中的方法不匹配所造成的。
解决:
尽量使用service方法进行请求处理,并且不要再service方法中调用父类的service。
urlpartten:Servlet访问路径
1. 一个Servlet可以定义多个访问路径 : @WebServlet({"/aa","/bb","/cc"})
2. 路径定义规则:
1. /xxx:路径匹配
2. /xxx/xxx:多层路径,目录结构
3. *.do:扩展名匹配
读取和设置配置信息(ServletConfig):
注解的方式:
单个参数
@WebServlet(urlPatterns="/ServletDemo5",initParams = {@WebInitParam(name="name",value="haoren")})
多个参数
@WebServlet(urlPatterns="/ServletDemo5",initParams = {@WebInitParam(name="name",value="haoren"),@WebInitParam(name="gender",value="男")})
读取配置信息(ServletConfig):
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//String info = this.getServletConfig().getInitParameter("conf");
//response.getWriter().print(info);
//同时取多个
Enumeration uu = this.getServletConfig().getInitParameterNames();
while(uu.hasMoreElements()){
String key = (String) uu.nextElement();
String value = getInitParameter(key);
response.getWriter().print(value);