Servlet笔记3(Eclipse实现)
目录
--------- Servlet学习笔记1------------
----------Servlet学习笔记2------------
----------Servlet学习笔记3------------
1.5 在Eclipse开发工具创建servlet
两种方式:
(1)先创建一个普通的java类,需要去实现Servlet接口或者继承对应的HttpServlet(GEnericServlet)类,咱们普通的javaLei 就具有了servlet功能,所以需要手动在web.xml配置文件中添加访问servlet的路径信息。
(2)直接创建servlet,会自动在web.xml文件中添加访问servlet的路径信息。
步骤: (1)新建web项目,比如说创建一个web项目名称:chapter03
(2)创建一个servlet程序:比如说,先创建一个包,名称cn.itcast.servlet,servlet的名称:TestServlet01
(3)部署和访问servlet:通过开发工具部署web项目,如chapter03,访问它下面的servlet资源。访问的地址:http://localhost:8080/chapter03/testServlet01
注意:一般情况下,为了简化开发,咱们会在post方法里面调用doGet()方法。
具体见以下代码:
/* * doGet()方法,用来接收浏览器发送的get请求 */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub PrintWriter out=response.getWriter(); out.print("this servlet is created by eclipse"); } /* * doPost()方法,用来接收浏览器发送的post请求 */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub this.doGet(request,response); } 需求:可以发送get请求和post请求得到1到100之间的和 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int sum=0; for(int i=0;i<=100;i++){ sum+=i; } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request,response);//简化开发 }
1.6 实现Servlet的虚拟路径映射
1.Servlet的多重映射:一个servlet,可以对应多个访问路径。
比如:
<servlet-mapping> <servlet-name>TestServlet01</servlet-name> <url-pattern>/testServlet01</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>TestServlet01</servlet-name> <url-pattern>/test02</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>TestServlet01</servlet-name> <url-pattern>/test03</url-pattern> </servlet-mapping>
2.servlet的映射路径可以使用通配符
servlet的映射路径有三种方式:
(1)完全目录匹配:比如/hello
(2)目录匹配:比如/abc/或者/
(3)扩展名匹配:比如*.do,.action 注意/.do这种写法是错误的
优先级:完全目录匹配>目录匹配>扩展名匹配
例如:servlet的路径:
/abc/* 对应的servlet01的访问路径
/* 对应servlet02
/abc 对应servlet03
*.do 对应servlet04
在浏览器输入的url地址如下:
/abc/a.html :访问/abc/* servlet路径匹配度更高, servlet01
/abc :访问servlet03
/abc/a.do :访问 servlet01
/a.do :访问servlet02
3.缺省Servlet
什么是缺省Servlet:它的映射路径"/",代表这是一个缺省的servlet.
缺省的servlet的作用:处理请求的资源找不到的问题(404 代表请求的起源找不到)
二、ServletConfig接口
什么是ServletConfig:他是servlet的配置对象,作用就是获取与servlet相关的初始化参数。
它的子类是:GenericServlet和HttpServlet.
它被实例化通过web服务器实现的。
得到ServletConfig对象:getServletConfig()
ServletConfig常用的方法:
getInitParameter(String name)//获取初始化参数的值 :根据encoding获取utf-8
getInitParameterNames()//获取servlet初始化参数的名称:获取encoding和username的名称
getServletContext()//得到ServletContext对象
getServletName() //获取servlet的名称:对应web.xml里面TestServlet02
初始化参数的配置:
<!-- servlet初始化参数的配置 --> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> <init-param> <param-name>username</param-name> <param-value>xiaozhang</param-value> </init-param>
三、ServletContext接口
ServletContext对象实在web服务器启动时就创建了,是web服务器创建的ServletContext对象。 每一个web项目只有一个ServletContext对象。
ServletContext对象的作用:
[1]获取web应用程序的初始化参数.(web应用程序就是web项目)
[2]在web应用程序能共享数据.
[3]获取web项目下的资源文件.
得到ServletContext对象:
(1)通过ServletConfig对象:config.getServletContext()
(2)直接得到:getServletContext();
1.获取web应用程序的初始化参数.(web应用程序就是web项目)
[1]获取全局初始化参数的值:getInitParameter(String name)
[2]获取全局初始化参数的名称:getInitParameterNames()
比如:
<!-- 配置全局的初始化参数 --> <context-param> <param-name>AAA</param-name> <param-value>aaa</param-value> </context-param> <context-param> <param-name>BBB</param-name> <param-value>bbb</param-value> </context-param>
2.实现多个servlet对象之间共享数据:因为一个web项目只有一个ServletContext对象
ServletContext对象就是域对象:域对象在一定范围内能存值和取值。
域对象相关的方法:
[1]存值:setAttribute(String name,Object obj);
[2]取值:Object obj=getAttribute(String name);
[3]删除值:void removeAttribute(String name);
比如: 在TestServlet05里面存值
//[1].得到ServletContext对象 ServletContext context=this.getServletContext(); //[2].存值 context.setAttribute("key", "servlet05里面存的值");
在TestServlet06里面获取值
//[1].得到ServletContext对象 ServletContext context=this.getServletContext(); //[2].从ServletContext取值 Object obj=context.getAttribute("key"); String value=obj.toString(); response.setContentType("text/html;charset=utf-8"); response.getWriter().print(value);
3.获取web下面的资源文件
通过ServletContext对象能够获取web项目下面文件的字节输入流或者文件的
绝对路径
路径问题:
[1]普通java项目:直接使用jdk编译java文件,所以说文件的路径是相对与工作
空间.
比如:
Properties por=new Properties(); InputStream instream=new FileInputStream("src/config.properties"); por.load(instream); String value=por.getProperty("key"); System.out.println(value);
[2]web项目:运行在tomcat服务器上面的,所有文件的路径是相对于tomcat
服务器。
服务器端是没有src这个目录,在写路径时不能写src,必须相对于tomcat
服务器端的路径。
(1)获取文件的字节输入流:路径是相对于tomcat服务器的路径
InputStream in=getResourseAsStream(String path)
比如:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //[1]获取文件的字节输入流 ServletContext context=this.getServletContext(); //写相对于tomcat服务器的路径,不要用绝对路径 String path="/WEB-INF/classes/config.properties"; InputStream in=context.getResourceAsStream(path); Properties pro=new Properties(); pro.load(in); //获取配置文件的值 String v1=pro.getProperty("Company"); String v2=pro.getProperty("Address"); response.getWriter().print("company name:"+v1+"company address:"+v2); }
(2)获取文件的绝对路径:路径是相对于服务器端的路径
String realPath=getRealPath(path)
比如:
//[1]得到ServletContext对象 ServletContext context=this.getServletContext(); //[2]获取文件的绝对路径 String path="/WEB-INF/classes/config.properties"; //[3]调用getRealPath,获取绝对路径 String realPath=context.getRealPath(path); System.out.println(realPath); InputStream in=new FileInputStream(realPath); Properties pro=new Properties(); pro.load(in); //获取配置文件的值 String v1=pro.getProperty("Company"); String v2=pro.getProperty("Address"); response.getWriter().print("company name:"+v1+"company address:"+v2);
- 点赞
- 收藏
- 分享
- 文章举报
- 学习笔记之 Servlet容器服务器原理 简易实现代码
- 【JSP学习笔记】使用Servlet实现网页验证码
- Servlet 3.0笔记之异步请求Facebook BigPipe简单模型实现
- 【Servlet学习笔记-1】使用Eclipse创建第一个Servlet并在html页面调用示例
- Servlet 3.0笔记之异步请求Facebook BigPipe简单模型实现
- ssh学习笔记二:cxfServlet简单实现
- Servlet学习笔记 —— 实现最简单的登录注册及三秒后页面跳转
- 实现一个servlet的helloworld小程序(不适用Eclipse)
- OpenLayers学习笔记9——使用servlet与jquery-ui实现自动提示输入
- [原创]java WEB学习笔记55:Struts2学习之路---详解struts2 中 Action,如何访问web 资源,解耦方式(使用 ActionContext,实现 XxxAware 接口),耦合方式(通过ServletActionContext,通过实现 ServletRequestAware, ServletContextAware 等接口的方式)
- Servlet笔记——(2.2.1) 实现Servlet接口
- servlet 第三讲 笔记2 session详细实现,数据库详细操作
- 【2015/4/18】servlet学习笔记3--实现servlet的三种方式
- 关于servlet+jsp+java实现Web登陆页界面的一些笔记(三)
- Servlet学习笔记--用Filter实现过滤非法文字
- maven -- 学习笔记(四)实现在Eclipse用maven搭建springmvc项目(附构建步骤和详细实现代码)
- Servlet学习笔记三——控制器实现页面转换
- JSP/Servlet Web 学习笔记 DayThree —— 实现一个登陆小界面
- cocos2d-x学习笔记(二)Eclipse+cdt实现cocos2dx跨平台解决方案(转)
- mysql+jsp+servlet实现注册功能的笔记+错题总结