HttpServlet是GenericServlet的子类。
GenericServlet是个抽象类,必须给出子类才能实例化。它给出了设计servlet的一些骨架,定义了servlet生命周期,还有一些得到名字、配置、初始化参数的方法,其设计的是和应用层协议无关的,也就是说你有可能用非http协议实现它(其实目前Java Servlet还是只有Http一种)。
HttpServlet是子类,当然就具有GenericServlet的一切特性,还添加了doGet, doPost, doDelete, doPut, doTrace等方法对应处理http协议里的命令的请求响应过程。
一般没有特殊需要,自己写的Servlet都扩展HttpServlet 。
HttpServlet 继承了GenericServlet,GenericServlet实现了servlet和servletConfig接口;
GenericServlet实现了普通的和http无关的servlet方法,如get(),post(),put(),delete()方法;
而httpservlet则提供了和http协议相关的方法doget(),doPost(),doput(),dodelete()方法;
根据请求的类型(就是你form表单中method属性下面的那请求类型,默认为doget().)HTTPServlet类的excute方法会选择调用对应的方法。
dopost()是比较安全的,在你的浏览器上不会出现发送的参数,比如你如果提交带有密码的表单发请求时一定要是dopost(),否则密码会这样被显示在浏览器上…….jsp?pwd=kkk
web.xml;
init(),service(),detroy();
如果是tomcat的话 server.xml文件里
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
后边的URIEncoding就是设置get方法编码的如果没有指定URL接收的编码类型,自动会用ISO-885
==============================基础知识================================
理解
JSP基本语法
<% %>和转义字符使用
JSP脚本元素
<%! %> <%= %> <% %>
JSP指令元素
<%@page %> <%@include%> <%@taglib %>
JSP动作元素
<jsp:include><jsp:param>
<jsp:forward>
掌握
<%!%> <%= %> <% %>
<%@include%> <jsp:include>
<jsp:forward><jsp:param>
jsp元素指令
指令主要用来提供整个JSP网页相关的信息,并且用来设定JSP网页的相关属性,例如:网页的编码方法、语法、信息等等
起止符号为:<%@...%>
内文部分为一些指令和一连串的属性设定:
<%@ directive attr1=“value1”attr2=“value2”… %>
包含三种指令:
page: 页面属性指令
include:包含指令
taglib: 自定义标签指令
page元素指令
page指令:设定整个JSP网页的属性和相关功能。
<%@page attri1=“” attri2=“” .... %>
attribute可选值:
import=“” 指明该JSP可以使用那些JAVA API
session=“true/false” 指明该JSP是否可以用session对象
pageEncoding=“” 指明该JSP网页的编码方式
contentType =“ ” 表示MIME类型和JSP的编码方式
buffer=“none/sizekb” 设置缓冲区,默认8KB
autoFlush=“true/false” 是否自动清楚缓冲
langugae=指明小脚本片断使用的语言,默认java
extends =“” 指明生成的servlet继承那个父类
errorPage=“” 异常后的重定向UTL
isThreadSafe=“true|false”
指令元素–include指令
include指令:在JSP编译时插入一个包含文本或代码的文件,这个包含过程是静态的。
<%@include file=“relativeURLspec” %>
包含的文件类型:jsp,html,文本,java程序段。
relativeURLspec值不能是变量URL。
<%@include file=“<%=URL%>” %>
relativeURLspec后不能加任何参数。
relativeURLspec所指的路径必须是相对于此JSP的网页的路径。
文件中要避免有<html></html><body></body>
动态指令
1 | <jsp:include> | 包含指令,用来动态包含另一个JSP页面 |
2 | <jsp:forward> | 转发指令,用来将请求转发至一个新的页面 |
3 | <jsp:param> | 参数标签,一般与其它动作指令搭配使用 |
<jsp:include>与<%@include >的区别
动态包含使用<jsp:include> 标签来实现
<jsp:includepage=“included.jsp” flush=“true” />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。
动态包含可以给被包含的页面传递参数
静态包含使用include伪码实现
不会检查所含文件的变化,适用于包含静态页面
静态包含不能给被包含的页面传递参数
<jsp:forward>
<jsp:forward>操作将客户端所发出的请求从当前页面转交到另一个HTML或JSP页面。
<jsp:forward>标签之后的程序将不会在执行。
语法格式:
<jsp:forwardpage={“relativeURL ” | “<%=urlExpress%>”}” />
或
<jsp:forwardpage={“relativeURL ” | “<%=urlExpress%>”}” >
<jsp:param name=“pn”value=“{ pv |<%=expression %>}”/>*
</jsp:forward >
<jsp:param>用来提供key/value值,常与<jsp:include><jsp:forward>一起使用。
<jsp:paramname=“pname”value=“pvalue”/>
当与<jsp:include>和<jsp:forward>一起用时,被包含的网页或转向后的网页会先看看request对象里面除原来的参数值之外,是否有新的参数值,如果有,则新参数值会替换原来的参数值
和jsp相关的面试题(很好)
jsp乱码如何解决,给出三种以上的对应解决方案,并给出对应的程序案例;
一、JSP页面显示乱码
<%@ page contentType=”text/html; charset=gb2312″%>
二、表单提交中文时出现乱码
request.seCharacterEncoding(̶gb2312″)对请求进行统一编码
三、数据库连接出现乱码
要涉及中文的地方全部是乱码,解决办法:在数据库的数据库URL中加上useUnicode=true&characterEncoding=GBK就OK了。
四、通过过滤器完成
五、在server.xml中的设置编码格式