Servlet
用于开发动态web的技术,开发Servlet程序步骤:
- 编写类,实现Servlet接口
- 将开发好的类部署到服务器中
Servlet原理
servlet由web服务器调用
web服务器收到http请求后
图中红色箭头:request会从service拿到请求并且把并且把请求后的响应封装交给response,然后交给web容器
创建一个Servlet项目
1.创建maven项目,导入依赖
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
2.将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"
metadata-complete="true">
</web-app>
3.将项目结构补充完整
4.创建类继承默认实现类HttpServlet
5.重写doGet和doPost方法
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter writer = resp.getWriter(); //响应流
writer.println("第一个Servlet项目");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
get和post是请求实现的不同方式,业务逻辑一样,可以互相调用
6.在xml文件中编写Servlet映射
为什么要映射?
我们写java程序,通过浏览器访问,而浏览器要连接web服务器,所以我们需要在web服务器中注册servlet,同时还需要给浏览器一个能访问的路径
<!--注册servlet-->
<servlet>
<servlet-name>demo</servlet-name>
<servlet-class>com.chenyx.servlet.ServletDemo</servlet-class>
</servlet>
<!--servlet请求路径-->
<servlet-mapping>
<servlet-name>demo</servlet-name>
<url-pattern>/demo</url-pattern>
</servlet-mapping>
7.配置Tomcat,设置项目发布路径
8.启动测试
乱码问题
上面启动项目时出现了乱码问题
解决方法:
在doGet方法加上
resp.setContentType("text/html");
resp.setCharacterEncoding("UTF-8");