Java web学习笔记之二——编写Servlet
来源:互联网 发布:p2p 网络摄像机 编辑:程序博客网 时间:2024/05/19 20:21
创建一个Servlet类
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.
javax.servlet.Servlet是一个接口。抽象类javax.servlet.GenericServlet实现了它,这是一个与协议无关的Servlet抽象类。我们要讨论的主要是javax.servlet.http.HttpServlet,这个类继承了GenericServlet实现了其service抽象方法用来处理HTTP请求,最后针对不同的HTTP方法调用doGet,doPost等一系列方法。自定义Servlet时,继承HttpServlet,然后重写doXXX方法。
在Web容器中,一个Servlet只有一个实例,如果Servlet配置为容器启动时加载,那么在Web容器启动时加载,并且会调用其init方法,否则init在Servlet第一次被请求时调用。当Web容器关闭时,调用destroy方法。这两个方法都在Servlet接口中进行了定义。要注意的是init方法其实有个参数javax.servlet.ServletConfig,不过GenericServlet实现了该方法并调用了无参数的init方法。init方法的调用发生在Servlet构造方法之后,在能进行响应请求之前,该方法中适合用于初始化数据库之类的操作。准确的说,只有在init方法调用之后,Servlet才是一个真正的Servlet,ServletConfig和javax.servlet.ServletContext对象都已经准备完毕。
public class HelloServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { response.getWriter().println("Hello, World!"); }}
在部署描述文件中配置Servlet
部署描述文件就是位于WEB-INF目录中web.xml,在该文件中放置应用程序中所有的listeners,servlets和filters。类似于Android应用程序中的AndroidManifest.xml清单文件。
<servlet> <servlet-name>helloServlet</servlet-name> <servlet-class>com.wrox.HelloServlet</servlet-class> <load-on-startup>1</load-on-startup></servlet>
load-on-startup
使得Servlet在容器启动时加载并调用其init方法。标签中的数字表示启动顺序的优先级,数字越小越优先。
映射URL到Servlet
可以映射多个URL到一个Servlet
<servlet-mapping> <servlet-name>helloServlet</servlet-name> <url-pattern>/greeting</url-pattern> <url-pattern>/salutation</url-pattern> <url-pattern>/wazzup</url-pattern></servlet-mapping>
使用注解
@WebServlet(name = "helloServlet",urlPatterns = {"/greeting", "/salutation", "/wazzup"},loadOnStartup = 1)public class HelloServlet extends HttpServlet{}
接收query参数和post参数
String user = request.getParameter("user");
在使用该方法接收了post参数(位于请求体中)后,不能再调用request的getInputStream或者getReader,否则发生异常。有的参数有多个值,比如复选框。如下获取。
String[] array = request.getParameterValues("color");
使用init参数配置应用
使用Context init参数
这些参数只能在部署描述文件中定义。
<context-param> <param-name>settingOne</param-name> <param-value>foo</param-value></context-param><context-param> <param-name>settingTwo</param-name> <param-value>bar</param-value></context-param>
被所有Servlet公有,Servlet中这样使用:
ServletContext c = this.getServletContext();c.getInitParameter("settingOne");
使用Servlet init参数
在部署描述文件中定义Servet的init参数
<servlet> <servlet-name>servletParameterServlet</servlet-name> <servlet-class>com.wrox.ServletParameterServlet</servlet-class> <init-param> <param-name>database</param-name> <param-value>CustomerSupport</param-value> </init-param> <init-param> <param-name>server</param-name> <param-value>10.0.12.5</param-value> </init-param></servlet><servlet-mapping> <servlet-name>servletParameterServlet</servlet-name> <url-pattern>/servletParameters</url-pattern></servlet-mapping>
在注解中配置
@WebServlet( name = "servletParameterServlet", urlPatterns = {"/servletParameters"}, initParams = { @WebInitParam(name = "database", value = "CustomerSupport"), @WebInitParam(name = "server", value = "10.0.12.5") })public class ServletParameterServlet extends HttpServlet{}
使用Form上传文件
在Servlet上添加注解
文件小于fileSizeThreshold则存在内存中
maxFileSize为能上传的最大文件
maxRequestSize为能接收的Request的最大大小,不管文件多大。
@MultipartConfig( fileSizeThreshold = 5_242_880, //5MB maxFileSize = 20_971_520L, //20MB maxRequestSize = 41_943_040L //40MB)
假设html中文件上传控件如此定义
<input type="file" name="file1"/>
Servlet中如此处理Request
Part filePart = request.getPart("file1");InputStream inputStream = filePart.getInputStream();ByteArrayOutputStream outputStream = new ByteArrayOutputStream();int read;final byte[] bytes = new byte[1024];while((read = inputStream.read(bytes)) != -1){ outputStream.write(bytes, 0, read);}//获取上传时的原文件名filePart.getSubmittedFileName();outputStream.toByteArray();
- Java web学习笔记之二——编写Servlet
- Java EE学习笔记之二——Servlet部分
- Java Web 学习笔记(二)servlet
- Java Web学习笔记——Servlet
- Java Web学习笔记——Servlet
- Java Web学习笔记——Servlet
- Java web学习笔记之servlet技术
- Java Web开发学习笔记之二
- 【JAVA WEB】学习笔记——Servlet入门
- Java.Web学习笔记 Servlet
- java web学习之servlet
- Java Web学习(29): Servlet学习(二)
- Java开发学习笔记之二:一个简单的Servlet
- Java Web基础(二)(Servlet编写与配置)
- Servlet学习笔记二——在任意目录下布置web应用程序
- Servlet学习笔记(二)—— Servlet简介
- HTTP学习笔记之二——Web服务器
- HTTP学习笔记之二——Web服务器
- node-gdal实践-创建shp文件
- android 调用支付宝充值,提示系统繁忙,4000
- 字符串
- ExecutorService的API
- Web.xml配置详解之context-param
- Java web学习笔记之二——编写Servlet
- IOS应用提交所需的ICON
- Hadoop2.6.0源码编译
- <JAVA学习笔记5>——线程同步、安全
- MySQL常用系统表大全
- Underscore.js 入门
- 大数据平台新加接口表(或接口表表结构变更)脚本更新及数据初始化
- >/dev/null 2>&1 & 的惨痛教训
- fullPagejs插件