Servlet的根本使用(和jsp的比较)
1、Servlet相比于jsp更加关心逻辑实现。在jsp中,用户在浏览器输入域名例如:http://localhost:8080/web004/jsp1.jsp,浏览器中就会呈现jsp页面的内容。那么,为了让用户有访问servlet的接口,开发者通过在web.xml配置文件中配置相关的内容,提供给用户一个映射。例如:
<servlet>
<servlet-name>MyServlet1</servlet-name>
<servlet-class>servlet.MyServlet</servlet-class><!---类的路径,在web工程下的src文件里的java文件,继承Servlet->
</servlet>
<servlet-mapping><!-- 实现将MyServlet映射给用户,根据配置的url参数,用户只需在域名后加上参数MyServlet就成功了-->
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
如上配置的参数是MyServlet就可以了,域名:http://localhost:8080/web004/Servlet。
2、MyServlet的实现
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class MyServlet
*/
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void init( ServletConfig config) throws ServletException{
super.init(config);
}
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.service(arg0, arg1);
PrintWriter out=arg1.getWriter();
arg1.setContentType("gbk");
out.println("<html><body>");
out.println("servlet hello");
out.println("</body></html>");
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
//super.doGet(req, resp);//没有任何操作,不要用父类的方法
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.doPost(req, resp);
}
}
注意:如果jdk版本低 doGet,和doPost方法会自动super父类的方法,会出现405(方法找不到的错误)。
只能将方法体设为空。一定要注意啊,骚年
所以, 405 错误可能会因 Web 服务器没有被设置为从客户端接受输入数据而出现。 另外, 如果客户端对请求中指明的具体网址资源没有足够的权力, 该错误也会出现。