servlet
servlet就是sun公司开发动态web的一门技术
在这些API中提供一个接口,叫做servlet
开发一个servlet,只需要完成两个步骤:
编写一个类,实现Servlet接口
把开发好的java类部署到web服务器中
实现了servlet接口的java程序叫做servlet
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"> version="4.0" metadata-cpmplete="true"> </web-app>
由于get或者post只是请求实现的不同方式,可以相互调用,业务逻辑一样
编写Servlet的映射?为什么需要映射:
我们写的是Java程序,但是要通过浏览器访问,而浏览器需要连接web服务器,所以我们需要在web服务中注册我们写的Servlet,还需要给他一个浏览器能够访问的路径
Servlet运行原理
Mapping -->映射
一个Servlet可以指定一个映射路径
<servlet-mapping> <servlet-name>chunchun</servlet-name> <url-pattern>/meimei</url-pattern> </servlet-mapping>
一个Servlet可以指定多个映射路径
<servlet-mapping> <servlet-name>chunchun</servlet-name> <url-pattern>/meimei</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>chunchun</servlet-name> <url-pattern>/meimei01</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>chunchun</servlet-name> <url-pattern>/meimei02</url-pattern> </servlet-mapping>
一个Servlet可以指定通用映射路径
<servlet-mapping> <servlet-name>chunchun</servlet-name> <url-pattern>/meimei/*</url-pattern> //通配符 </servlet-mapping>
默认请求路径
<servlet-mapping> <servlet-name>chunchun</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>
可以自定义实现请求路径
<servlet-mapping> <servlet-name>chunchun</servlet-name> <url-pattern>*.meimei</url-pattern> //*前面不能加映射的路径 </servlet-mapping>
指定一些后缀或者前缀等等
<servlet-mapping> <servlet-name>chunchun</servlet-name> <url-pattern>*.meimei</url-pattern>//前面也可以加东西 比如 chunchun.meimei </servlet-mapping>
优先级问题
指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求
servletContext
上下文
web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,它代表了当前的web应用
作用:共享数据
在这个Servlet中保存的数据,可以在另一个servlet中拿到
共享数据
ServletContext servletContext = this.getServletContext(); String name = (String) servletContext.getAttribute("name"); resp.setContentType("text/html"); resp.setCharacterEncoding("utf-8"); resp.getWriter().print(name);
获取初始化参数
ServletContext context = this.getServletContext(); String url = context.getInitParameter("url"); resp.getWriter().print(url);
<context-param> <param-name>url</param-name> <param-value>jdbc:mysql://localhost:3306/mybatis</param-value> </context-param>
请求转发
ServletContext context = this.getServletContext(); RequestDispatcher Dispatcher = context.getRequestDispatcher("/cc"); //转发的请求路径 Dispatcher.forward(req,resp);//调用forword实现请求转发
读取资源文件
Properties
在java目录下新建properties
在resources目录下新建properties
他们都被打包到了同一个路径下:classes,我们俗称这个路径为classpath
思路:需要一个文件流
username=meimei password=123456
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { InputStream as = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");//把资源变成一个流 Properties prop = new Properties(); prop.load(as); String username = prop.getProperty("username"); String password = prop.getProperty("password"); resp.getWriter().print(username); resp.getWriter().print(password); }