资料来源:B站狂神说
tomcat目录结构
/conf/server.xml
<!--设置端口-->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!--设置主机名和网站放置位置-->
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
Servlet程序
继承HttpServlet ,重写doGet、doPost
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("into hello get");
//获得上下文
ServletContext context = this.getServletContext();
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
//读资源文件
InputStream inputStream = context.getResourceAsStream("/WEB-INF/classes/a.properties");
Properties properties = new Properties();
properties.load(inputStream);
System.out.println("username="+properties.get("username"));
System.out.println("password="+properties.get("password"));
//文件下载
String path = context.getRealPath("/WEB-INF/classes/a.properties");
System.out.println(path);
String filename = path.substring(path.lastIndexOf("\\")+1);
resp.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(filename,"utf-8"));
FileInputStream fileInputStream = new FileInputStream(path);
int len = 0;
byte[] buffer = new byte[1024];
ServletOutputStream outputStream = resp.getOutputStream();
while ((len = fileInputStream.read(buffer))!=-1) {
outputStream.write(buffer, 0 , len);
}
inputStream.close();
outputStream.close();
//请求转发
//context.getRequestDispatcher("/second").forward(req, resp);
//设置返回
/*PrintWriter writer = resp.getWriter();
writer.println("hello,servlet!");*/
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
web.xml配置映射
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.yangxudong.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
动态验证码
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置浏览器刷新
resp.setHeader("refresh","3");
BufferedImage bi = new BufferedImage(80, 20, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = (Graphics2D) bi.getGraphics();
graphics.setColor(Color.white);
graphics.fillRect(0, 0, 80, 20);
graphics.setColor(Color.BLACK);
graphics.setFont(new Font(null, Font.BOLD, 20));
graphics.drawString(makeString(),0, 20);
//告诉浏览器用图片打开
resp.setContentType("image/jpeg");
//不缓存
resp.setDateHeader("expires", -1);
resp.setHeader("Cache-Control", "no-cache");
resp.setHeader("Pragma", "no-cache");
ImageIO.write(bi,"jpg",resp.getOutputStream());
}
session
session的传递可以通过cookie、url、隐藏表单
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
HttpSession session = req.getSession();
String id = session.getId();
if(session.isNew()) {
resp.getWriter().write("session新创建,ID:"+id);
} else {
resp.getWriter().write("session已经存在,ID:"+id);
}
}
JSP
本质是Servlet
JSP内置对象:
xxx.IntelliJIdea2019.2\system\tomcat\Unnamed_maven\work\Catalina\localhost\ROOT\org\apache\jsp
过滤器
public class CharacterEncodingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("init");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
System.out.println("过滤前");
chain.doFilter(request,response);
System.out.println("过滤后");
}
@Override
public void destroy() {
System.out.println("destroy");
}
}
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.yangxudong.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/filter/*</url-pattern>
</filter-mapping>
监听器
实现HttpSessionListener