一切的前提:容器
如果Web服务器应用(如Apache)得到一个指向servlet的请求(而不是其他请求,比如若是请求一个普通的静态HTML页面则不需经过容器),此时,服务器会把这个请求交给容器,然后由容器来调度servlet。
如果没有容器,你不仅需要写servlet,还需要实现安全,对日志之类的过滤,JSP支持,内存管理还有创建与服务器的socket连接…等等等等
容器有不止如下的功能:
1、通信支持:让serlvet与Web服务器对话。
2、生命周期管理:servlet的加载、实例化、初始化和方法调用与回收皆由容器控制。
3、多线程支持:为每个接收的servlet请求创建一个新的线程。
4、生命方式实现安全:可以使用XML部署描述文件来配置安全性。
5、JSP支持:将JSP代码翻译为JAVA代码。
Tomcat就是一个这样的容器。
下面是官方网址,开源免费的噢。
http://tomcat.apache.org/
使用XML使Servlet可以被访问
看如下图,由servlet元素与serlvet-mapping元素共同配置。
先是servlet元素里面有serlvet-name和sevlet-class元素。sevlet-class内容即是servlet的文件名。servlet-name即是配置部署描述文件的人希望给它的名字(随意取)。
然后servlet-mapping元素中的servlet-name和url-pattern。url-pattern是部署者希望在url中以此地址来调用该servlet。那么servlet-name的作用也就出来了:将servlet-class与url-pattern连接。另外同一个servlet是可以有多个url-pattern的。同时注意url-pattern的内容,是有“/”的。
Servlet用例
public class MySelector extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
response.setCharacterEncoding("UTF-8");//设置编码
response.setContentType("text/html");//设置返回类型
String[] sizes = request.getParameterValues("sizes");//从http请求中获得sizes对应的值(自己随便设的)
request.setAttribute("sizes",sizes);//键值储存传送给jsp
RequestDispatcher view = request.getRequestDispatcher("mySelector.jsp");//跳转到jsp
view.forward(request,response);//向jsp发送request\response
}
}
JSP用例
<%-- jsp中,可以在<% %>标签中可以写java代码并且运行 --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
String[] sizes = (String[])request.getAttribute("sizes");
for(String one:sizes){
out.println(one);
}
%>