Java Web编程——1、Servlet
1、Servlet是一个运行在Web服务器中的Java小程序。Servlet将会接收和响应来自Web客户端的请求,使用HTTP进行同行。
(A servlet is a small Java program that runs within a Web server. Servlets receive and respond to requests from Web clients, usually across HTTP, the HyperText Transfer Protocol.)
2、Servlet作为所有Web应用程序的核心类,它是唯一的既可以直接处理和响应用户请求,也可以将处理工作委托给应用中其他部分的类。
4、目前,JavaEE支持的唯一Servlet协议是:HTTP。
3、所有的的Servlet都必须实现javax.servlet.Servlet接口,改接口包含的方法如下:
4、在多数情况下,Servlet,都继承了javax.servlet.GenericServlet。GenericServlet extends java.lang.Object implements Servlet, ServletConfig, java.io.Serializable。GenericServlet只包含一个抽象方法:service()。
5、javax.servlet.Servlet和javax.servlet.GenericServlet都不依赖具体协议。
6、作为相应HTTP请求的java.servlet.http.HttpServlet,继承了GenericServlet。并且实现了只接受HTTP请求的service方法。并且提供了相应每种HTTP方法类型(get、post、head、put、delete、options、trace)的方法的空实现。我们使用的Servlet总是会继承HttpServlet。当我们继承,但是不重写其中的方法的时候,我们的Servlet就可以接受HTTP请求了,但是会返回一个405 METHOD NOT ALLOWED的错误(WARNING:任何未重写的方法都会返回该错误。)
7、配置Servlet:
1)在web.xml中部署:
<servlet>
<servlet-name>testServlet</servlet-name>
<servlet-class>com.howie.TestServlet</servlet-class>
<loda-on-startup>1</loda-on-startup> <!-- 启动顺序-->
<init-param>
<param-name></param-name>
<param-value></param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>testServlet</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
---不直接将URL映射到Servlet类中的原因:相同的逻辑,但是链接到不同的数据库等情况的发生。
2)直接通过注解
@WebServlet(
name = “testServlet”,
urlPatterns = {"/test", "/other"},
loadOnStartup=1,
initParams ={
@WebInitParam(name="",value="")
@WebInitParam(name="",value="")
}
)
8、由于Servlet类的service方法会处理所有到达的请求,但是在实际中,service的实现非常复杂,并且随着Web容器的不同,其实现方法也会有所不同。扩展HttpServlet的优点则在于我们无需关注这些细节问题。唯一的要求是需要从谢doGet方法或者其他会用到的方法。
9、HttpServletRequest:提供了多个可以获得HTTP请求的详细信息的方法。其中请求参数有两种不同的形式:查询参数、以application/x-www-form-urlencoded或multipart/form-data编码的请求正文。
需要注意的是:
在第一次调用请求对象的getParameter、getParameterMap、getParameterNames、getParameterValues方法时,Web容器会判断该请求是否包含了post变量,如果包含,它将读取请求的InputS他ream并解析这些post变量。请求的InputStream只能被读取一次,再次尝试获取时,将会触发IllegalStateException异常。
10、HttpServletResponse:
注意:1)不要对同一个响应对象同时使用getOutputStream和getWriter方法,否则将会触发IllegalStateException异常。
2)如果想要设置响应内容的编码格式,则需要在getWriter前使用setContentType和setCharacterEncoding方法进行设置。
11、初始化上下文参数:
1)在配置文件中通过在web.xml中使用部署描述符配置
<context-param>
<param-name>settingContext</param-name>
<param-value>OOO</param-value>
</context-param>
此时可以通过getServletContext()获取到上下文。然后通过getInitParameter(“settingContext”)获取某个初始化的值。
2)如果不使用部署描述符配置,则可以通过ServletContent的setInitParameter设置;但是需要注意的是:该方法只能在javax.servlet.ServletContextListener的contextnitialized方法或者javax.servlet.ServletContainerInitializer的onStartup方法中调用。
3)只为某个sevlet进行初始化上下文,使用<init-param>或者initParams @WebInitParam。
如果你对TOMCAT Servlet有更多兴趣,可以查看API:http://tomcat.apache.org/tomcat-5.5-doc/servletapi/index.html