您的位置:首页 > 理论基础 > 计算机网络

【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标签都要进行硬编码,修改需要重新编译
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  http servlet javaweb