2017年10月11日
1.什么是servlet?
sun公司制定的一种用来扩展web服务器功能的组件规范。
(1)扩展web服务器功能
web服务器通常只能够处理静态资源的请求(即需要事先将html文件准备好),可以使用servlet来扩展(即web服务器可以通过调用servlet来处理动态资源的请求,比如访问数据库)。
(2)组件规范
1)什么是组件?
符合一定规范,实现部分功能,并且需要部署到相应的容器里面才能运行的软件模块。
servlet是一个组件,需要部署到相应的servlet容器里面才能运行。
2)什么是容器?
符合一定规范,提供组件的运行环境的程序。
tomcat就是一个容器,提供了servlet的运行环境。
2.如何写一个servlet ?
step1.写一个java类,实现servlet接口或者继承HTTPSServlet抽象类。注:通过选择继承的方式。
step2.编译
step3.打包
创建一个具有如下结构的文件夹:
appname(应用名)
WEB-INF
classes(放class文件)
lib(可选,放jar文件)
web.xml(部署描述文件)
step4.部署
将step3创建好的文件夹拷贝到servlet容器相应的位置。
注:
可以使用jar命令将step3创建好的整个文件夹压缩成一个“.war”为后缀的文件,然后拷贝。
step5.启动容器,访问servlet
http://ip:port/appname/url-pattern
注:url-pattern在web.xml文件中定义。
3.servlet是如何运行的
在浏览器输入地址http://ip:port/web01/hello
step1.浏览器依据ip。port建立连接。
step2.浏览器将相关数据(比如请求参数)打包,然后发送请求。
step3.容器解析请求数据包,并且将解析得到的数据封装到request对象,同时创建一个response对象。
step4.容器创建servlet对象,然后调用该对象的service方法。
注:容器会将request和response作为参数传递进来,可以通过request获得请求参数,也可以将处理结果写到response。
step5.容器读取request中的处理结果,然后将处理结果打包发送给浏览器。
step6.浏览器解析相应数据包,生成相应的页面。
4.常见问题
(1)404
注:404是一个状态码(是一个三位数字,由W3C定义,表示服务器处理请求的一种状态)
1)含义
服务器依据请求地址找不到相应的资源。
2)产生的原因
a。没有部署该应用。
b。<servlet-name>不一致
c。请求地址写错
(2)500
1)含义:系统出错
2)产生的原因
程序在运行过程中出错。
a。没有继承HttpServlet
b。<servlet-class>写错。
c.代码写的不够严谨,比如对请求参数没有做检查就做一些转换。
(3)405
1)含义:找不到处理方法。
2)产生的原因:
service方法不规范
服务器使用对应的字符集来解码。
方式一 request.setCharacterEncoding("utf-8");只针对post请求有效
方式二 uname = new String(uname.getBytes(“iso-8859-1”),“utf-8”);注:先还原得到浏览器发送过来的字节数组,然后使用正确的字符集来解码。
读取请求参数值
(1)String request.getParameter(String paramName)
(2)String[] request.getParameterValue(String paramName)
2017年10月12日
e.printStackTrance();指出出错的位置及原因。
<%java语句;%>
jsp可以直接使用隐含对象 ,比如out、request、response 容器会自动生成获得这些对象的代码。
指令:通知容器在将jsp文件转换成servlet类时,做一些额外的处理,比如导包。
指令的语法:<%@指令名称 属性=属性值 %>
page指令:import属性 导包 <%@page import="java.util.*"%>使用逗号隔开多个包
contentType属性:设置response。setContentType的内容。
pageEncoding属性:告诉容器jsp文件的编码。有些容器在读取jsp文件的内容时,默认按照iso-8859-1去解码。
jsp表达式 <%=new Date()%> 可以不用写out.print语句