一、
一个servlet在项目中可以有三个名字:
1、存在于jsp页面的url
2、部署在DD中的中间名字
3、实际的class文件
在DD中一般为:
<servlet>
<servlet-name>InnerServletName1</servlet-name>
<servlet-class>practice.myServlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>InnerServletName1</servlet-name>
<url-pattern>/handle1.do</url-pattern>
</servlet-mapping>
其中url-pattern就是1中名字,servlet-name是2中的,servlet-class是3中的名字。
然后可以在src文件夹中创建包practice,创建一个java class名为myservlet1
在jsp页面中建立一个<a>元素href指向handle1.do。点击时即可向对应的servlet发出GET请求。
二、如何编写Servlet类
public class myServlet1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
PrintWriter pw=resp.getWriter();
for(int i=0;i<10;i++){
pw.println("<h2>hello ! =>"+(i+1)+"</h2>");
}
pw.flush();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
PrintWriter out=resp.getWriter();
out.println("<h1>Ok I get it.</h1>");
out.flush();
}
}
像这样,覆盖两个方法即可(一般情况下只需要覆盖两个)。
三、jsp中使用java代码
比如:
<p>Current time:<% Date d=new Date();out.println(d.getHours()+":"+d.getMinutes());%></p>
插入到jsp页面时将会产生当前的时间。
所以java代码实际上就是写在<%...%>中的。
四、把请求转发给另一个页面
调用请求分派器:
req.getRequestDispatcher("result.jsp").forward(req,resp);
五、servlet的三个方法
一个servlet类将存在三个时刻:
init();service();doget/dopost;
第一个方法是在初始时调用,比如在init方法中连接数据库;
service基本不大可能被覆盖。
get/post请求分别对应两种方法。
而且每一个请求都在一个单独的线程中运行,但一个servlet类仅有一个实例对象。
六、servlet对象里面的对象
1、servletConfig对象。在部署时就传递信息,这个信息在DD中,用来访问servletContext。
2、servletContext实际上是每一个web-app都有的参数。
七、参数传递
参数传递可以用POST方法或者GET方法。但是提交表单时一般是相当于一个hash表传递给servlet。
然后在servle中使用getParameter方法获取参数值。
如果是复选框的参数(一次性可以选择多个值)就要用getParamterValues来得到参数的数组。
八、用响应传输一个文件
一般来说,需要在respose中设置MIME类型:
text/html
application/pdf
video/quicktime
application/java
image/jpeg
application/jar
application/x-zip
application/octet-stream
接下来以最简单的一个图片文件来做示范:
在web目录下新建一个pictures目录,放入一张图片
在对应的方法写下:
resp.setContentType("image/jpeg");//你想传送的文件类型
ServletContext context=getServletContext();
InputStream is=context.getResourceAsStream("/pictures/tb.jpg");//文件夹里的一个图片
int read=0;
byte[] bytes=new byte[1024];
OutputStream os=resp.getOutputStream();
while ((read=is.read(bytes))!=-1){//io操作
os.write(bytes,0,read);
}
os.flush();
os.close();//刷新并关闭输出流
九、请求重定向
resp.sendRedirect("result.jsp");//发送重定向到指定页面或者网址