手机扫码查看
javaweb教程:servlet应用
servlet使用
servlet核心接口和类
Servlet接口
在ServletAPI中最重要的是Servlet接口,所有servlet都会直接或间接的与该接口发生联系,
或是直接实现接口,或间接继承自实现了该接口的类
该接口包括以下五个方法:
init(ServletConfig config)
ServletConfig getServletConfig()
service(ServletRequest req,ServletResponse res)
String getServletInfo()
destroy()
处理方式:
1.第一次访问Servlet时,服务器会创建Servlet对象,并调用init方法,再调用service方法
2.第二次在访问时,servlet对象已经存在,不再创建,也不再初始化,执行service方法
3.当服务器停止,会释放servlet,调用destroy方法。
====================================
GenericServlet抽象类
GenericServlet使编写Servlet变得更容易。它提供生命周期方法init和destroy的简单实现,
要编写一般的servlet,只需重写抽象service方法即可。
HttpServlet类
是继承GenericServlet的基础上进一步的扩展
提供将要被子类化以创建适用于web站点的HTTP servlet的抽象类。
HttpServlet的子类至少必须重写一个方法,该方法通常是以下这些方法之一:
doGet,如果servlet支持HTTP GET请求
doPost,用于HTTP POST请求
doPut,用于HTTP PUT请求
doDelete,用于HTTP DELETE请求
init和destroy,用于管理servlet的生命周期内保存的资源
getServletInfo,Servlet使用它提供有关其自身的信息
====================================
servlet两种方式配置
1.web.xml进行servlet配置
容器在进行url-pattern配置的时候是遵循一定的匹配原则的
url-pattern定义匹配规则,取值说明
精确匹配 /具体名称 只有url路径是具体的名称的时候才会触发servlet
后缀匹配 *.xxx 只要是以xxx结尾的就匹配触发servlet
通配符匹配 /* 匹配所以请求,包含服务器的所有资源
通配符匹配 / 匹配所以请求,包含服务器的所有资源,不含jsp
load-on-startup
1.元素标记容器是否应该在web应用程序启动的时候就加载这个servlet
2.它的值必须是一个整数,表示servlet被加载的先后顺序
3.如果该元素的值为负数或者没有设置,则容器会当servlet被请求时在加载
4.如果值为正整数或者0时,表示容器在应用启动时就加载并初始化这个servlet,
值越小,servlet的优先级越高,就越先被加载。值相同时,容器就会自己选择
顺序来加载
2.注解式配置servlet
注解类webservlet
value:配置url路径
urlPatterns:配置url路径,和value作用一样,不能同时使用
loadOnStartup:配置servlet的创建的时机,如果是0或者正数启动程序时,则创建,如果是负数
则访问时创建
@WebServlet(“/hello”)
web.xml配置servlet
<!–Servlet配置 –>
<servlet>
<!–名称 –>
<servlet-name>hello2</servlet-name>
<!–Servlet的全称类名 –>
<servlet-class>com.qf.web.servlet.HelloServlet</servlet-class>
<!–启动的优先级,数字越小越先起作用 –>
<load-on-startup>1</load-on-startup>
</servlet>
<!–映射配置 –>
<servlet-mapping>
<!–名称 –>
<servlet-name>hello2</servlet-name>
<!–资源的匹配规则:精确匹配 –>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
3.创建servlet文件
欢迎页面
<form action=”HelloServlet”>
<label>姓名:</label><input name=”name”><br/>
<label>年龄:</label><input name=”age”><br/>
<input type=”submit” value=”提交”>
</form>
index.jsp
错误页面
404
/error/404.html
====================================
请求方式
默认请求方式是get
GET请求
get提交的数据会放在url之后,以?分割url和传输数据,参数之间以&相连
get提交的数据大小有限制(因为浏览器对url的长度有限制)
get方式提交数据,会带来安全问题
效率高
对应的servlet的方法是doGet
POST请求
POST方法是把提交的数据放在HTTP包的Body中
POST方法提交的数据没有限制
POST提交的是数据相对安全
效率相对没有GET高
对应的servlet的方法是doPost
乱码问题
tomcat7及以下GET出现乱码问题
解决:
//获取表单提交的姓名
String name=request.getParameter(“name”);
name=new String(name.getBytes(“ISO8859-1″),”UTF-8”);
POST乱码解决
request.setCharacterEncoding(“UTF-8”);
servlet解决乱码
response.setContentType(“text/html;charset=”UTF-8”);
====================================
重定向
重定向就是通过各种方法将网络请求重新定个方向转到其他位置
原理:
客户浏览器发送http请求—》web服务器接收后发送302状态码响应及对应新的
location给客户浏览器–》客户浏览器发现是302响应,则自动再发送一个新的
http请求,请求url是新的location地址—》服务器根据此请求寻找资源并发送给客户。
特点:
1.重定向是客户端行为
2.重定向是浏览器做了至少两次的访问请求
3.重定向浏览器地址改变
4.重定向两次跳转之间传输的信息会丢失(request范围)
5.重定向可以指向任何的资源,包括当前应用程序中的其他资源,
同一个站点上的其他应用程序中的资源,其他站点的资源。
注意:传递给HTTPServletResponse.sendRedirect方法的相对URL
以“/”开头,它是相对于整个web站点的根目录
response.sendRedirect(“/html”);
====================================
转发
原理:
客户浏览器发送http请求—》web服务器接收请求–》调用内部的一个
方法在容器内部完成请求处理和转发动作—-》将目标资源发送给客户。
特点:
1.转发是服务器行为
2.转发是浏览器只做了一次访问请求
3.转发浏览器地址不变
4.转发两次跳转之间传输的信息不会丢失,所以可以通过request进行数据的传递
5.转发只能将请求转发给同一个web应用中的组件
注意:如果创建RequestDispatcher 对象时指定的相对URL以“/”开头,
它是相对于当前web应用程序的根目录
request.getRequestDispatcher(“/Servlet”).forward(request,response);



发表回复