servlet
1.servlet创建方式:
1.实现Servlet接口:
void init(ServletConfig var1) throws ServletException;
ServletConfig getServletConfig();
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
String getServletInfo();
void destroy();
2.继承GenericServlet(适配器模式)
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
3.继承HttpServlet:可以不写任何方式,具体可以根据不同的请求,来执行对象的doXxx方法
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 {
}
2.Servlet的配置方式:
<servlet>
<servlet-name>aaa</servlet-name>
<servlet-class>com.qfedu.controller.HelloServlet<servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>aaa</servlet>
<url-pattarn>/aaa</url-pattarn>
</servlet-mapping>
@WebServlet(urlPattarn='/aaa')
public class HelloServlet extends HttpServlet{}
3.Servlet的生命周期
servlet默认是在web容器中是单例模式,
而且服务器启动时并不创建Servlet实例,只有请求发生后才会创建对应的servlet实例
1 + 3
构造器
init
service
doGet
doPost
destroy
4.Servlet解决中文乱码问题:
1. 数据库的编码格式必须为utf8
2. 在jdbc的url中添加characterEncoding=utf8代码
3. 在每一个Servlet的请求中设置三行代码
注意这三行代码必须写在request.getParameter()之前,最好放在最前面
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=UTF-8");
5.servlet的页面跳转方式:
1.请求转发
request.getRequestDispatcher('目标url').forward(request, response)
特点:
1. 客户端与服务器只交互了一次,服务器内部可以实现请求的转发
2. 地址栏显示的是中间处理的url,不是最后的url
3. 一般用于数据的传递
4. 查询一般都使用请求转发方式
2.重定向
response.sendRedirect('目标url')
特点:
1. 客户端与服务器端交互了多次
2. 地址栏显示的是最终处理的url
3. 不能用作数据传递
4. 增删改一般都用重定向方式(可以避免重复提交)
6.下载
String str = "1.jpg";
String realPath =getServletContext().getRealPath("/WEB-INF/img");
resp.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(str, "utf-8"));
FileInputStream fileInputStream = new FileInputStream(realPath + "/" + str);
byte[] bytes = new byte[1024*4];
int l = 0;
while ((l=fileInputStream.read(bytes))!=-1){
resp.getOutputStream().write(bytes,0,l);
}
fileInputStream.close();