Servlet开发基础

2019-05-20  本文已影响0人  Mr_J316

2019-05-18

MVC开发思想

MVC(Model-View-Controller)

把一个应用的输入、处理、输出流程按Model(模型)、View(视图)、Controller(控制器)方式进行分解

Servlet基本使用

实现了servlet接口的Java类,称之为Servlet。

HttpServlet是能够处理HTTP请求的servlet,它在原有Servlet接口上添加了HTTP协议处理方法,比Servlet接口的功能更为强大。因此开发人员在编写Servlet时,通常应继承这个类,而避免直接去实现Servlet接口。


1558159229330.png

模板:

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyServlet extends HttpServlet {

    // doGet方法用来处理客户端浏览器地址栏直接访问、点击超链接、JS请求或以get方式提交的表单。
    public void doGet(HttpServletRequest request, HttpServletResponse 
                          response)throws ServletException, IOException {
    }

    // doPost方法用来处理以post方式提交的表单请求。
    public void doPost(HttpServletRequest request, HttpServletResponse              
                          response)throws ServletException, IOException {
    }

}

注意事项:

在servlet中获取session对象

HttpSession session=request.getSession();
HttpSession session=request.getSession(boolean);

参数true表示如果session已经存在了,直接重用已经存在的session。如果session不存在,则新建。

参数false表示如果session已经存在了,直接重用已经存在的session。如果session不存在,则不新建,session不可用。

在servlet中获取ServletContext对象

ServletContext context = this.getServletContext();

在servlet使用response对象向客户端输出响应信息

PrintWriter out = response.getWriter();//获取字符流
OutputStream out = response.getOutputStream();//获取字节流
//注意:输出中文时,需要设置响应信息的MIME类型及编码
response.setContentType("text/html;charset=utf-8")

在web.xml文件中配置Servlet

<servlet> 
    <servlet-name>MyServlet</servlet-name> 
    <servlet-class>com.servlet.MyServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>MyServlet</servlet-name> 
    <url-pattern>/MyServlet</url-pattern> <!--form的action地址 -->
</servlet-mapping>
<!-- 说明:
<servlet-name>:指定Servlet的名字,要保证其在web.xml中唯一。
<servlet-class>:指定Servlet实现类。
<url-pattern>:指定Servlet的URI,即servlet相对于应用的访问路径。必须以/开头。-->

Servlet生命周期

Servlet类由程序员编写,但是由服务器来实例化,并且由服务器来调用相应的方法。

Servlet接口中有3个方法代表了Servlet的生命周期:

Servlet是单例的,默认在第一次接收请求时实例化,并且只实例化一次。

Servlet在服务器关闭时销毁。

Servlet使用service方法处理所有业务请求,判断请求类型,再调用doGet或doPost处理请求。

如果在<servlet>元素中配置<load-on-startup>子元素,那么WEB应用程序在启动时就会装载并创建Servlet的实例、并调用Servlet实例的init方法。

<servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>com.servlet.MyServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

Servlet3.0新特性

Servlet3.0提供了如下注解(Annotation):

文件上传与下载

文件上传

基本步骤:

servlet3.0的request可以返回javax.servlet.http.Part对象封装用户上传的文件。Part对象通过如下方法返回文件相关信息:

Part part = request.getPart("file");
方法名 说明
getName() 返回表单文件域的name属性值
getContentType() 返回上传文件的MIME类型,例如上传文件是jpg格式,则返回image/pjpeg
getSize() 返回上传文件的大小
getHeader("content-disposition") 返回上传文件的报头信息。例如上传的文件名是girl.jpg,则返回form-data; name="productPic"; filename="C:\girl.jpg"
write(String path) 将文件另存至path指定的文件中

文件下载

基本步骤:

File f = new File(path);
InputStream in = new FileInputStream(f);
byte[] data = new byte[(int) f.length()];
in.read(data);

response.addHeader("Content-Disposition", "attachment;filename="
    + new String(f.getName().getBytes("utf-8")));
response.addHeader("Content-Length", "" + f.length());
response.setContentType("application/octet-stream");

OutputStream out = response.getOutputStream();
out.write(data);
out.flush();
out.close();
上一篇 下一篇

猜你喜欢

热点阅读