Servlet
简介
Servlet是JavaEE的一个组件,也是JavaEE中的一种规范,为了遵循这一规范所有的类都必须实现javax.servlet.Servlet接口
使用IDEA开发Servlet
- 新建一个项目:
- 新建好的项目的结构
- 接着在src中新建一个包,用于存放java代码,在这个包中new
- 新建的servlet中IDEA已经帮你写好需要继承的HttpSevlet类,但因为没有导包,致使 类报错,所以我们需要给其导包(快捷键alt+回车) 点击Add JavaEE6 …
- 点击后会出现一个提示框,接着点击Download即可,IDEA会自动下载所需的jar包,并放在lib的文件夹下
6. 此时就可以编写Servlet了
package com.igor.servlet;
import java.io.IOException;
public class ServletDemo extends javax.servlet.http.HttpServlet {
protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
}
protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
//让浏览器打印一句Hello Servlet
response.getWriter().println("Hello Servlet");
}
}
- 接着配置Servlet,打开下面的Web目录下的WEB-INF目录,有一个web.xml文件,然后再该文件中配置
<?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="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>ServletDemo</servlet-name>
<servlet-class>com.igor.servlet.ServletDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletDemo</servlet-name>
<url-pattern>/servlet</url-pattern>
</servlet-mapping>
</web-app>
配置Tomcat,以及运行
见:https://blog.csdn.net/weixin_43958460/article/details/96269640 后面的使用IDEA搭建Web开发环境,在搭建完成后运行Tomcat,Tomcat运行后,在运行的初始页面后加上上面web.xml中servlet-apping标签下,url-pattern中的地址,比如:/servlet
此时页面跳转,并显示"Hello Servlet"。
Servlst的生命周期
可以用this查看其中的方法:
.
Servlet运行过程
在刚下的演示中,我们用一句代码演示了前后端的交互,其中的流程又是怎样的的?
- 当服务器跳转到"localhost:8080/javaweb/servlet"时,浏览器给服务器发出请求,服务器找到web.xml文件,然后在servlet-mapping标签中通过"/servlet"找到对应servlet-name中的ServletDemo,接着找到servlet标签下与ServletDemo相同的servlet-name,从而找到servlet-class中Servlet类的地址,进而将该Servlet类加载进JVM。
- JVM加载字节码,该Servlet类中的doGet方法中的response会被执行,响应浏览器的请求,同时给浏览器传输"Hello Servlet"的资源,浏览器接收后打印在页面上。
Servlet实现类
Servlet映射路径问题
1.一般情况下我们都会指定一个URL , 一个URL对应一个请求
2.通配问题
/* :不报错
*.do
Reponse需要掌握
重定向
将这个请求,转换到另一个地址;
比如,我们请求 : http://localhost:8080/servlet01/dasdasdasda/aaaa.do 他会跳转到百度首页;
//通过响应对象重定向页面
resp.sendRedirect("404.jsp");
ServletContext
通过servletContext对象实现数据共享
通过this获得ServletContext,实现数据的共享,ServletContext中的资源会被存储到服务器中,所有的Servlet都可以访问的到。
通过servletContext对象读取网站配置文件
-
新建一个properties文件
driver=com.mysql.jdbc.Driver username=root password=123456 url=jdbc:mysql://localhost:3306/smbms
-
编写servlet类
package com.kuang.servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.FileInputStream; import java.io.IOException; import java.util.Properties; //读取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