Java Web基础知识整理Word下载.docx
《Java Web基础知识整理Word下载.docx》由会员分享,可在线阅读,更多相关《Java Web基础知识整理Word下载.docx(98页珍藏版)》请在冰豆网上搜索。
--需要和某一个servlet标签的serlvet-name子标签的文本节点一致-->
--映射具体的访问路径:
/代表当前WEB应用的根目录.-->
url-pattern>
/hello<
/url-pattern>
/servlet-mapping>
三、Servlet容器:
运行Servlet、JSP、Filter等的软件环境.
1).可以来创建Servlet,并调用Servlet的相关生命周期方法.
2).JSP,Filter,Listener,Tag...
四、Servlet生命周期的方法:
以下方法都是由Serlvet容器负责调用.
1).构造器:
只被调用一次.只有第一次请求Servlet时,创建Servlet的实例.调用构造器.
这说明Serlvet的单实例的!
2).init方法:
只被调用一次.在创建好实例后立即被调用.用于初始化当前Servlet.
3).service:
被多次调用.每次请求都会调用service方法.实际用于响应请求的.
4).destroy:
只被调用一次.在当前Servlet所在的WEB应用被卸载前调用.用于释放当前Servlet所占用的资源.
五、load-on-startup参数:
1).配置在servlet节点中:
secondServlet<
com.atguigu.javaweb.SecondServlet<
--可以指定Servlet被创建的时机-->
load-on-startup>
2<
/load-on-startup>
2).load-on-startup:
可以指定Serlvet被创建的时机.若为负数,则在第一次请求时被创建.若为0或正数,则在当前WEB应用被
Serlvet容器加载时创建实例,且数组越小越早被创建.
六、关于serlvet-mapping:
1).同一个Servlet可以被映射到多个URL上,即多个<
元素的<
子元素的设置值可以是同一个
Servlet的注册名。
2).在Servlet映射到的URL中也可以使用*通配符,但是只能有两种固定的格式:
一种格式是“*.扩展名”,
另一种格式是以正斜杠(/)开头并以“/*”结尾。
<
/*<
/*表示所有类型可匹配
OR
*.html<
*.html匹配.html
注意:
以下的既带/又带扩展名的不合法.
/*.action<
七、ServletConfig:
封装了Serlvet的配置信息,并且可以获取ServletContext对象
1).配置Serlvet的初始化参数
--配置Serlvet的初始化参数。
且节点必须在load-on-startup节点的前面-->
init-param>
<
--参数名-->
param-name>
user<
/param-name>
--参数值-->
param-value>
root<
/param-value>
/init-param>
password<
1230<
-1<
2).获取初始化参数:
>
getInitParameter(Stringname):
获取指定参数名的初始化参数
getInitParameterNames():
获取参数名组成的Enumeration对象.
Stringuser=servletConfig.getInitParameter("
user"
);
System.out.println("
user:
"
+user);
Enumeration<
String>
names=servletConfig.getInitParameterNames();
while(names.hasMoreElements()){
Stringname=names.nextElement();
Stringvalue=servletConfig.getInitParameter(name);
System.out.println("
^^"
+name+"
:
+value);
}
3).获取Serlvet的配置名称(了解)
八、ServletContext
1).可以由SerlvetConfig获取:
ServletContextservletContext=servletConfig.getServletContext();
2).该对象代表当前WEB应用:
可以认为SerlvetContext是当前WEB应用的一个大管家.可以从中获取到当前WEB应用的各个方面的信息.
①.获取当前WEB应用的初始化参数
设置初始化参数:
可以为所有的Servlet所获取,而Servlet的初始化参数只用那个Serlvet可以获取.
--配置当前WEB应用的初始化参数-->
context-param>
driver<
com.mysql.jdbc.Driver<
/context-param>
方法:
getInitParameter
getInitParameterNames
代码:
Stringdriver=servletContext.getInitParameter("
driver"
System.out.println("
driver:
"
+driver);
Enumeration<
names2=servletContext.getInitParameterNames();
while(names2.hasMoreElements()){
Stringname=names2.nextElement();
-->
+name);
}
②.获取当前WEB应用的某一个文件在服务器上的绝对路径,而不是部署前的路径
getRealPath(Stringpath);
StringrealPath=servletContext.getRealPath("
/note.txt"
System.out.println(realPath);
③.获取当前WEB应用的名称:
getContextPath()
StringcontextPath=servletContext.getContextPath();
System.out.println(contextPath);
④.获取当前WEB应用的某一个文件对应的输入流.
getResourceAsStream(Stringpath):
path的/为当前WEB应用的根目录.
InputStreamis2=servletContext.getResourceAsStream("
/WEB-INF/classes/jdbc.properties"
⑤.和attribute相关的几个方法:
九、GET请求和POST请求:
1).使用GET方式传递参数:
①.在浏览器地址栏中输入某个URL地址或单击网页上的一个超链接时,浏览器发出的HTTP请求消息的请求方式为GET。
②.如果网页中的<
form>
表单元素的method属性被设置为了“GET”,浏览器提交这个FORM表单时生成的HTTP请求消息的请求方式也为GET。
③.使用GET请求方式给WEB服务器传递参数的格式:
④.使用GET方式传送的数据量一般限制在1KB以下。
2).使用POST方式传递参数:
①.POST请求方式主要用于向WEB服务器端程序提交FORM表单中的数据:
form表单的method置为POST
②.POST方式将各个表单字段元素及其数据作为HTTP消息的实体内容发送给WEB服务器,传送的数据量要比使用GET方式传送的数据量大得多。
POST/counter.jspHTTP/1.1
referer:
http:
//localhost:
8080/Register.html
content-type:
application/x-www-form-urlencoded
host:
localhost:
8080
content-length:
43
name=zhangsan&
password=123--请求体中传递参数.
十、如何在Serlvet中获取请求信息:
1).Servlet的service()方法用于应答请求:
因为每次请求都会调用service()方法
publicvoidservice(ServletRequestrequest,ServletResponseresponse)
throwsServletException,IOException
ServletRequest:
封装了请求信息.可以从中获取到任何的请求信息.
ServletResponse:
封装了响应信息,如果想给用户什么响应,具体可以使用该接口的方法实现.
这两个接口的实现类都是服务器给予实现的,并在服务器调用service方法时传入.
2).ServletRequest:
①.获取请求参数:
StringgetParameter(Stringname):
根据请求参数的名字,返回参数值.
若请求参数有多个值(例如checkbox),该方法只能获取到第一个提交的值.
String[]getParameterValues(Stringname):
根据请求参数的名字,返回请求参数对应的字符串数组.
EnumerationgetParameterNames():
返回参数名对应的Enumeration对象,
类似于ServletConfig(或ServletContext)的getInitParameterNames()方法.
MapgetParameterMap():
返回请求参数的键值对:
key:
参数名,value:
参数值,String数组类型.
②.获取请求的URI:
HttpServletRequesthttpServletRequest=(HttpServletRequest)request;
StringrequestURI=httpServletRequest.getRequestURI();
System.out.println(requestURI);
///day_29/loginServlet
③.获取请求方式:
Stringmethod=httpServletRequest.getMethod();
System.out.println(method);
//GET
④.若是一个GET请求,获取请求参数对应的那个字符串,即?
后的那个字符串.
StringqueryString=httpServletRequest.getQueryString();
System.out.println(queryString);
//user=atguigu&
password=123456&
interesting=game&
interesting=party&
interesting=shopping
⑤.获取请求的Serlvet的映射路径
StringservletPath=httpServletRequest.getServletPath();
System.out.println(servletPath);
///loginServlet
⑥.和attribute相关的几个方法:
3).HttpServletRequest:
是SerlvetRequest的子接口.针对于HTTP请求所定义.里边包含了大量获取HTTP请求相关的方法.
4).ServletResponse:
①.*getWriter():
返回PrintWriter对象.调用该对象的print()方法,将把print()中的参数直接打印
到客户的浏览器上.
②.设置响应的内容类型:
response.setContentType("
application/msword"
③.voidsendRedirect(Stringlocation):
请求的重定向.(此方法为HttpServletResponse中定义.)
-----------------------------------------------------------------------------
在web.xml文件中设置两个WEB应用的初始化参数,user,password.
定义一个login.html,里边定义两个请求字段:
user,password.发送请求到loginServlet
在创建一个LoginServlet,在其中获取请求的user,password.比对其和web.xml文件中定义的请求参数是否一致
若一致,响应Hello:
xxx,若不一致,响应Sorry:
xxxxxx为user.
补充:
http:
8080/day0001/app/index.jsp
getContextPath()-----/day0001
getServletPath()-----/app/index.jsp
getRequestUri()------/day0001/app/index.jsp
Day2
一、GenericServlet(了解):
1).是一个Serlvet.是Servlet接口和ServletConfig接口的实现类.但是一个抽象类.其中的service方法为抽象方法
2).如果新建的Servlet程序直接继承GenericSerlvet会使开发更简洁.
3).具体实现:
①.在GenericServlet中声明了一个SerlvetConfig类型的成员变量,在init(ServletConfig)方法中对其进行了初始化
②.利用servletConfig成员变量的方法实现了ServletConfig接口的方法
③.还定义了一个init()方法,在init(SerlvetConfig)方法中对其进行调用,子类可以直接覆盖init()在其中实现对Servlet的初始化.
④.不建议直接覆盖init(ServletConfig),因为如果忘记编写super.init(config);
而还是用了SerlvetConfig接口的方法,
则会出现空指针异常.
⑤.新建的init(){}并非Serlvet的生命周期方法.而init(ServletConfig)是生命周期相关的方法.
publicabstractclassGenericServletimplementsServlet,ServletConfig{
/**以下方法为Servlet接口的方法**/
@Override
publicvoiddestroy(){}
publicServletConfiggetServletConfig(){
returnservletConfig;
publicStringgetServletInfo(){
returnnull;
privateServletConfigservletConfig;
publicvoidinit(ServletConfigarg0)throwsServletException{
this.servletConfig=arg0;
init();
publicvoidinit()throwsServletException{}
publicabstractvoidservice(ServletRequestarg0,ServletResponsearg1)
throwsServletException,IOException;
/**以下方法为ServletConfig接口的方法**/
publicStringgetInitParameter(Stringarg0){
returnservletConfig.getInitParameter(arg0);
publicEnumerationgetInitParameterNames(){
returnservletConfig.getInitParameterNames();
publicServletContextgetServletContext(){
returnservletConfig.getServletContext();
publicStringgetServletName(){
returnservletConfig.getServletName();
二、HttpServlet:
1).是一个Servlet,继承自GenericServlet.针对于HTTP协议所定制.
2).在service()方法中直接把ServletReuqest和ServletResponse转为HttpServletRequest和HttpServletResponse.
并调用了重载的service(HttpServletRequest,HttpServletResponse)
在service(HttpServletRequest,HttpServletResponse)获取了请求方式:
request.getMethod().根据请求方式有创建了
doXxx()方法(xxx为具体的请求方式,比如doGet,doPost)
@Override
publicvoidservice(ServletRequestreq,Ser