【11】Servlet
2016-01-01 23:08
585 查看
Servlet
开发动态web资源的技术,采用单例设计模式.其实就是一个可以向浏览器输出数据或者接收用户的请求数据的java类。一、使用Servlet
编写一个类,实现Servlet接口或继承实现类(GenericServlet、HttpServlet)部署到web服务器中
二、tomcat对java工程要求的目录结构
工程名 | |-- 静态web资源 ——>外界可直接访问 |-- WEB-INF ——>外界无法非法直接访问,由服务器调用 |--classes ——>存储所有的class文件 |--lib ——>需要使用的jar包 |--web.xml ——>servlet的配置信息
<web-app> <servlet> <servlet-name>别名</servlet-name> <servlet-class>完整类名</servlet-class> <init-param> <param-name>键</param-name> <param-value>值</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>别名</servlet-name> <url-pattern>URL路径</erl-pattern> </servlet-mapping> </web-app>
三、生命周期
init ——>初始化工作,比如读取配置文件,有且只有调用一次(单例模式)service——>处理用户请求
destroy——>清理资源,移除时调用
四、运行原理
通过URI定位,与web.xml匹配获取全类名用反射创建servlet对象并调用init方法
创建request对象封装用户的请求
创建response对象并调用service方法处理用户请求
五、映射问题
一个Servlet可以映射多个url路径的方式一:配置多个
servlet-mapping
方式二:配置多个
url-pattern
servlet-name和
servlet-class的绑定要在
servlet-mapping前
映射路径的通配符(固定)
路径匹配:”/”开头,”/*”结尾
文件扩展名匹配:”*.扩展名”
注意:
”*”在中间是普通字符,而非通配符
映射冲突时,”/”开头的优先级>”*”开头的优先级>默认映射
配置缺省Servle
<url-pattern>/</url-pattern>时,如果根路径中有静态页面(非jsp)是访问不到的,为什么?
六、HttpRequest对象
代表了客户端的请求,HTTP请求的所有信息都被封装到这个对象获取客户端的信息
request.getMethod();//获取请求方式 request.getRequestURI();//获取请求的资源 request.getProtocol();//获取请求的协议 request.getHeaderNames();//获取所有请求头,返回Enumeration
获取请求参数
request.getParameter(name); //获取单值的请求参数 request.getParameterValues(name); // 获取多值的请求参数 request.setCharacterEncoding("UTF-8"); //通知Request对象获取实体内容时用UTF-8 new String(getBytes("iso8859-1"),"utf-8");//解决URI参数乱码问题
作为域对象传递数据
域对象:可以存储数据,也可以把数据传递给其他Servlet.
//Servlet1 request.setAttribute(name,value);//添加数据 request.getRequestDispatcher("/Servlet2").forward(request,response);//请求转发,共享请求数据 //Servlet2 request.getAttribute(name);//获取数据 request.removeAttribute(name);//移除共享
请求重定向和请求转发
请求重定向
原理:由浏览器发出新的请求,新建Request对象
浏览器地址栏改变
是request的方法
请求转发
原理:由服务器发出请求,浏览器不知道,不新建Request对象
浏览器地址栏不变
只能转发到同一个WEB应用的组件
是response的方法
注意:URI中的”/”在服务器代表工程的根,在浏览器代表主机
response.sendRedirect("/day08/message.jsp");//请求重定向 request.getRequestDispatcher("/message.jsp").forward(request, response);//请求转发
七、HttpResponse对象
主要功能是向浏览器输出数据和通知浏览器处理一些信息。(见HTTP的笔记)八、ServletContext
由Tomcat启动时为各个工程创建一个ServletContext对象,代表整个WEB工程获取当前应用路径
getServletContext().getContextPath();
向浏览器输入信息
getWrite()
解决硬编码问题
在web.xml配置
<context-param> <param-name>charset</param-name> <param-value>utf-8</param-value> </context-param>
然后再
String charset= getServletContext().getInitParameter("charset"); request.setContentType("text/html;charset="+charset); response.setCharacterEncoding(charset);
作为域对象使用
存放的数据可以供工程内的所有Servlet使用,具体使用跟其他域对象(比如上文的request)差不多。
获取文件资源
InputStream in = getServletContext().getResourceAsStream(uri); String root = getServletContext().getRealPath(uri);
九、Servlet的缺点
所有HTML标签都要包在Java字符串中,难以排版所有的文本和HTML标签都要进行硬编码,修改需要重新编译
相关文章推荐
- RPC failed; result=22, HTTP code = 411
- HTTP Header 属性列表
- nginx中http核心模块的配置指令2
- nginx中http核心模块的配置指令3
- nginx中http核心模块的配置指令4
- nginx中http的fastcgi模块的配置指令1
- 如何在 Linux 中快速地通过 HTTP 提供文件访问服务
- 深入HTTP head的使用详解
- ASP 中使用 HTTP 协议发送参数详解
- C#基于socket模拟http请求的方法
- http www安全必备知识
- asp HTTP 500错误 常见问题分析
- http代理相关知识分析
- 在Node.js中使用HTTP上传文件的方法
- php错误提示failed to open stream: HTTP request failed!的完美解决方法
- php提示Failed to write session data错误的解决方法