标签:
什么是servlet
是sun公司提供的一门用于开发动态web资源的技术。
Sun公司在其API中提供了一个servlet接口,是用于来开发动态web资源
4-1 第一步 创建servlet类
创建方式
第一种,实现servlet接口,需要把接口里面的所有的方法都实现
第二种,继承GenericServlet类实现
第三种,继承HttpServlet类实现public class Serdemo extends GenericServlet { // 第一步,写一个类,继承GenericServlet类实现 @Override public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { // 实现类里面的service(ServletRequest req, ServletResponse res) // 使用service方法里面ServletResponse向页面输出内容 arg1.getWriter().append("Holle world ..."); } }
4-2 在xml的配置文件进行配置,让服务器知道类是一个servlet
<pre name="code" class="html"><!-- 第三步 让服务器知道类不是普通的类,而是一个servlet --> <servlet> <!-- 类的名称 --> <servlet-name>Serdemo</servlet-name> <!-- 类的全名称 --> <servlet-class>com.android.longs.Serdemo</servlet-class> </servlet> <servlet-mapping> <!-- 类的名称 --> <servlet-name>Serdemo</servlet-name> <!-- 访问的域名 --> <url-pattern>/hello</url-pattern> </servlet-mapping>
将mycelipse关联本地Tomcat
将我们创建编写的webProject发布到tomcat上
然后在弹出的窗口中选择我们创建的web项目添加
然后点击OK,进行查看
然后点击启动Tomcat
我们可以看到在请求到的页面中输出的信息
public class Serdemo1 extends GenericServlet{ @Override public void init() throws ServletException { super.init(); } @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { } @Override public void destroy() { super.destroy(); } }
与servlet的生命周期相关的三个方法
8-1 init()方法
* 在servlet创建时候执行这个方法
* 在访问servlet时候创建servlet,servlet创建一次
** init方法会执行一次8-2 service()方法
* 每次请求servlet时候调用这个方法
* 这个方法执行多次
8-3 destroy()方法
* servlet销毁时候调用这个方法,执行一次
* 关闭服务器会销毁servlet(需要正常关闭服务器才能看到效果,非正常关闭服务器也可以销毁只是看不到效果)
在web.xml中进行配置,找到配置的servlet标签,在标签里面进行配置
<load-on-startup>正整数的值</load-on-startup>
注意:这个正整数的值不要写成1,在tomcat里面有默认的servlet,不要与tomcat里面默认的servet值冲突
创建一个serverlet类
public class HttpServerletDemo extends HttpServlet { @Override public void init() throws ServletException { super.init(); System.out.println("tomacate first ... "); } }
在web.xml中的配制
<servlet> <servlet-name>HttpServerletDemo</servlet-name> <servlet-class>com.android.longs.HttpServerletDemo</servlet-class> <load-on-startup>3</load-on-startup> </servlet> <servlet-mapping> <!-- 类的名称 --> <servlet-name>HttpServerletDemo</servlet-name> <!-- 访问的域名 --> <url-pattern>/servlet/HttpServerletDemo</url-pattern> </servlet-mapping>
10-1 在web.xml中一个servlet可以对应多个servlet-mapping
当在一个servlet里面写了多个servlet-mapping,只能有一个mapping来执行
10-2 有三种配置
第一种: 完全路径匹配 首先写 /demo1
第二种:目录匹配 首先写 /aa/*
第三种:扩展名匹配 不需要写 / ,直接 *.action *.do
优先级:
完全路径匹配 > 目录匹配 > 扩展名匹配
11-1 相对路径
第一种情况:图片和html文件在一个目录下面,在html中直接写图片的文件的名称
第二种情况 图片在html的上层目录 ../ : 表示上层目录(上一层)
第三种情况 图片在html的下层目录
11-2 绝对路径
(1)写法一:使用ip+端口号+访问的文件
http://127.0.0.1/day07/path01/a.jpg
(2)写法二:不需要写ip+端口号,直接写文件夹和文件名称
/day07/path01/a.jpg
11-3 绝对路径的分类有两种分类
第一种:客户端路径,和重定向操作在一起使用
* 请求两次,每次请求的路径使用的是客户端路径,需要带项目名称 /day08....
第二种:服务器端路径,和转发的操作在一起使用
* 请求一次,不带项目名称
* 比如现在找班上某个同学,在班级外部,说找某某班的张三,但是当在班级内部之后,
再找同学,不需要说找哪个班了
第一个用途:获取初始化参数
例:
首先在web.xml文件中配制初始化参数
其次在们的的HttpServerletDemo中获取SerletConfig对象
public class HttpServerletDemo extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取 ServletConfig对象 ServletConfig servletConfig = getServletConfig(); //获取初始化参数的值 String username = servletConfig.getInitParameter("username"); // System.out.println("username is : "+username); } @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
将项目发布到tomacat上,然后在浏览器中进行访问请求
然后我们可以在控制台中看到相应的输出信息
注: 在servlet里面可以配置多个初始化参数
<servlet> <servlet-name>HttpServerletDemo</servlet-name> <servlet-class>com.android.longs.HttpServerletDemo</servlet-class> <init-param> <param-name>username</param-name> <param-value>zhangsan</param-value> </init-param> <init-param> <param-name>password</param-name> <param-value>123</param-value> </init-param> </servlet>
第二种方式获取相应的值
public class HttpServerletDemo extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 得到servletconfig对象 ServletConfig config = getServletConfig(); // 得到所有初始化参数的名称 Enumeration<String> enumration = config.getInitParameterNames(); // 遍历枚举得到每个名称 while (enumration.hasMoreElements()) { // 得到参数的名称 String name = enumration.nextElement(); // 得到名称对应的值 String value = config.getInitParameter(name); System.out.println(name + " :: " + value); } } @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); }
访问
注: 初始化参数在某个servlet里面配置的,所以只能在这个servlet里面才能获取初始化参数的值,在其他的servlet里面不能得到参数的值
第二个用途: 得到当前运行的servlet的名称
public class HttpServerletDemo extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 得到servletconfig对象 ServletConfig servletConfig = getServletConfig(); // 获取当前运行的servlet的名称 String servletName = servletConfig.getServletName(); System.out.println("servletName is "+servletName); } @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
当访问时会在控制台输出
第三个用途:得到servletContext对象
(1)一般都直接使用getServletContext()方法得到servletContext对象
ServletContext servletContext = servletConfig.getServletContext();
servletContext的作用: 获取全局的初始化参数(在项目里面的所有的servlet里面都可以得到参数)
ServletContext servletContext = servletConfig.getServletContext(); String username = servletContext.getInitParameter("username");
ServletContext servletContext = servletConfig.getServletContext(); // 获取所有的全局初始化参数的名称 Enumeration initParameterNames = servletContext.getInitParameterNames(); while (initParameterNames.hasMoreElements()) { // 获取初始化参数名称 String name = (String) initParameterNames.nextElement(); // 获取对应的值 String values = servletContext.getInitParameter(name); }
第二个用途:servletContext对象也称为域对象,在一定的范围内,可以存值和取值
在启动tomcat服务器的时候,在服务器里面可能有多个项目,服务器会为每个项目创建一个servletContext对象,servletContext对象可以存值和取值
通过servlet1向servletContext里面设置一个值,在这个项目里面的所有的servlet里面都可以得到servlet1设置的那个值。
* 存值 setAttribute(String name, Object object)
第一个参数:名称
第二个参数:具体的值
* 取值 getAttribute(String name)
第一个参数:名称servletContext对象的第三个用途读取web项目中的文件
读取ser目录下的文件
public class HttpServerletDemo extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext servletContext = getServletContext(); /* * 在getResourceAsStream(String path)里面path写法固定 首先第一个位置 写 /: 理解为代表项目的名称; * 在/后面写文件在tomcat里面的具体的路径 */ InputStream in = servletContext.getResourceAsStream("/WEB-INF/classes/db.properties"); int len =0; while ((len = in.read())!=-1) { System.out.print((char)len); } }
将项目布到tomcat上 并运行
读取包下面的文件
public class HttpServerletDemo extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext servletContext = getServletContext(); /* * 在getResourceAsStream(String path)里面path写法固定 首先第一个位置 写 /: 理解为代表项目的名称; * 在/后面写文件在tomcat里面的具体的路径 */ InputStream in = servletContext.getResourceAsStream("/WEB-INF/classes/com/android/longs/db1.properties"); int len =0; while ((len = in.read())!=-1) { System.out.print((char)len); } }
访问运行
读取webroot下面的文件
public class HttpServerletDemo extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 得到servletContext对象 ServletContext context = getServletContext(); // 使用getRealPath(String path) // 首先第一个位置 /,后面写文件在tomcat里面的具体的路径 String path = context.getRealPath("/db2.properties"); System.out.println(path); Properties p = new Properties(); // 得到输入流 InputStream in = new FileInputStream(path); p.load(in); String url = p.getProperty("url"); String username = p.getProperty("username"); String password = p.getProperty("password"); System.out.println("url is "+url); System.out.println("username is "+username); System.out.println("password is "+password); } }
访问运行
mysql基础综述(四) | 点击打开链接 |
mysql数据库安装与卸载 |
点击打开链接 |
mysql数据库的基本操作(二) |
点击打开链接 |
mysql数据库基本操作(三)使用JDBC来操作 |
点击打开链接 |
xml综合简述 |
点击打开链接 |
标签:
原文地址:http://blog.csdn.net/zl18603543572/article/details/50976492