您的位置:首页 > 编程语言 > Java开发

Servlet笔记3(Eclipse实现)

2020-04-05 12:11 881 查看

目录
--------- 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);
  • 点赞
  • 收藏
  • 分享
  • 文章举报
别团等shy哥发育 发布了26 篇原创文章 · 获赞 9 · 访问量 920 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐