servlet是sun公司提供的一门用于开发动态web资源的技术
sun公司在其API中提供了一个servlet接口,用户若想用一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下两个步骤:
1.编写一个java类,实现servlet接口
2.把开发好的java类部署到web服务器中
按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序称为Servlet。
由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml文件中使用< servle >元素和< servlet-mapping>元素完成。 < servlet>元素用于注册Servlet,它包含有两个主要的子元素:< servlet-name>和< servlet-class>,分别用于设置Servlet的注册名称和Servlet的完整类名。 一个< servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问路径,它包含有两个子元素:< servlet-name>和< url-pattern>,分别用于指定Servlet的注册名称和Servlet的对外访问路径。例如:
<servlet> 2 <servlet-name>ServletDemo1</servlet-name> 3 <servlet-class>gacl.servlet.study.ServletDemo1</servlet-class> 4 </servlet> 5 6 <servlet-mapping> 7 <servlet-name>ServletDemo1</servlet-name> 8 <url-pattern>/servlet/ServletDemo1</url-pattern> 9 </servlet-mapping>同一个Servlet可以被映射到多个URL上,即多个< servlet-mapping>元素的< servlet-name>子元素的设置值可以是同一个Servlet的注册名。
在Servlet映射到的URL中也可以使用*通配符,但是只能有两种固定的格式:一种格式是"*.扩展名",另一种格式是以正斜杠(/)开头并以"/*"结尾。例如:
servlet> 2 <servlet-name>ServletDemo1</servlet-name> 3 <servlet-class>gacl.servlet.study.ServletDemo1</servlet-class> 4 </servlet> 5 6 <servlet-mapping> 7 <servlet-name>ServletDemo1</servlet-name> 8 <url-pattern>/*</url-pattern>*可以匹配任意的字符,所以此时可以用任意的URL去访问ServletDemo1这个Servlet
对于如下的一些映射关系: Servlet1 映射到 /abc/* Servlet2 映射到 /* Servlet3 映射到 /abc Servlet4 映射到 .do 问题: 当请求URL为“/abc/a.html”,“/abc/”和“/”都匹配,哪个servlet响应 Servlet引擎将调用Servlet1。 当请求URL为“/abc”时,“/abc/”和“/abc”都匹配,哪个servlet响应 Servlet引擎将调用Servlet3。 当请求URL为“/abc/a.do”时,“/abc/”和“.do”都匹配,哪个servlet响应 Servlet引擎将调用Servlet1。 当请求URL为“/a.do”时,“/”和“.do”都匹配,哪个servlet响应 Servlet引擎将调用Servlet2。 当请求URL为“/xxx/yyy/a.do”时,“/”和“.do”都匹配,哪个servlet响应 Servlet引擎将调用Servlet2。 匹配的原则就是"谁长得更像就找谁"
将这个请求,转换到另一个地址;
比如,我们请求 : http://localhost:8080/servlet01/dasdasdasda/aaaa.do 他会跳转到百度首页;
//通过响应对象重定向页面 resp.sendRedirect("404.jsp");通过this获得ServletContext,实现数据的共享
2.编写servlet类
//读取properties配置文件 public class ServletDemo03 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //读取配置文件 //1.获得配置文件的路径 String realPath = this.getServletContext().getRealPath("/WEB-INF/classes/resources/database.properties"); System.out.println("取得的路径为:"+realPath); Properties properties = new Properties(); FileInputStream is = new FileInputStream(realPath); properties.load(is);//把文件流加载到配置文件的对象中; String driver = properties.getProperty("driver"); String username = properties.getProperty("username"); String password = properties.getProperty("password"); String url = properties.getProperty("url"); //响应到网页 resp.getWriter().println(driver); resp.getWriter().println(username); resp.getWriter().println(password); resp.getWriter().println(url); //======================================= System.out.println(driver); System.out.println(username); System.out.println(password); System.out.println(url); } }3.配置web.xml
<servlet> <servlet-name>Demo03</servlet-name> <servlet-class>com.kuang.servlet.ServletDemo03</servlet-class> </servlet> <servlet-mapping> <servlet-name>Demo03</servlet-name> <url-pattern>/q3</url-pattern> </servlet-mapping>4.访问查看
localhost:8080/demo02/q3
5.项目结构