[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xbOFYxkt-1601788593301)(D:\qq7A5F538EF54A10976ECE4E8BF7624F3B\aa6a503262174fc69b77459495b2ec98\clipboard.png)]
liu没有写的话,是默认访问路径
<servlet-mapping> <servlet-name>helloservlet</servlet-name> <url-pattern>/liu/*</url-pattern> </servlet-mapping>“星号”前面不能加映射的路径
aslfhas.liu <servlet-mapping> <servlet-name>helloservlet</servlet-name> <url-pattern>*.liu</url-pattern> </servlet-mapping>web容器在启动的时候,它会为每个web应用都创建一个ServletContext对象,它代表当前对象的web应用
共享数据
一个servlet保存的数据,可以在另外一个servlet中拿到1设置传参
//设置传参 public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("ok"); ServletContext servletContext = this.getServletContext(); String name = "luz"; servletContext.setAttribute("username",name); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }2设置接参
public class GetServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext servletContext = this.getServletContext(); String username = (String) servletContext.getAttribute("username"); req.setCharacterEncoding("UTF-8"); resp.setContentType("text/html;charset=UTF-8"); resp.getWriter().println("username:"+username); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }4.测试结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fWJVTcbE-1601788593305)(D:\qq7A5F538EF54A10976ECE4E8BF7624F3B\d48e0fee16de4b329954a64ccdbdede2\clipboard.png)]
web服务器接收客户端的http请求,针对这个请求,分别创建一个代表HttpServletReuest对象,代表响应的一个httpservletrequest;
获取客户端请求参数:httpservletrequest给客户端响应参数:HttpServletResponse1.获取下载路径
2.获取下载文件名
3.获取下载文件输入流
4.设置想办法浏览器能够支持下载需要的东西
5.创建缓冲区
6获取OutPutStream对象
7.将FileOutputStream流写入到buffer缓冲区
8.使用OutputStream将缓冲区的数据输出到客户端
public class FileServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1.获取下载路径 String realPath ="D:\\学习\\web\\课程代码\\kuang-JavaWeb-servlet\\response\\src\\main\\resources\\刘.png"; // 2.获取下载文件名 String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1); // 3.设置想办法浏览器能够支持下载需要的东西(文件url中文处理) resp.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(fileName,"UTF-8")); // 4.获取下载文件输入流 FileInputStream inputStream = new FileInputStream(realPath); // 5.创建缓冲区 int len = 0; byte[] buffer = new byte[1024]; // 6.获取OutPutStream对象 ServletOutputStream outputStream = resp.getOutputStream(); // 7.将FileOutputStream流写入到buffer缓冲区,使用OutputStream将缓冲区的数据输出到客户端 while ((len=inputStream.read(buffer))>0){ outputStream.write(buffer,0,len); } // 9.关闭流 inputStream.close(); outputStream.close(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }测试结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sqGHvttP-1601788593307)(D:\qq7A5F538EF54A10976ECE4E8BF7624F3B\1b6779d730b144039996a2debfdd241e\clipboard.png)]
代表客户端的请求,用户通过http协议访问服务器,请求的所有信息会被封装到HttpServletRequest中。
测试结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ma23E5gH-1601788593310)(D:\qq7A5F538EF54A10976ECE4E8BF7624F3B\0a668158116a4305a4b9f26db3ca8ef4\clipboard.png)]
什么是Session;
服务器会给每一一个用户(浏览器)创建一个Seesion对象;一个Seesion独占一个浏览器,只要浏览器没有关闭,这个Session就存在; .用户登录之后,整个网站它都可以访问! ->保存用户的信息;保存购物车的信息…session和cookie的区别
Cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)Session把用户的数据写到用户独占Session中,服务器端保存(保存重要的信息, 减少服务器资源的浪费)Session对象由服务创建;使用场景:
保存一个登录用户的信息;购物车信息;在整个网站中经常会使用的数据,我们将它保存在Session中;会话自动过期
<!--设置session--> <session-config> <!--超时1分钟失效--> <session-timeout>1</session-timeout> </session-config>导包
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency>编写过滤器
public class CharacterEncodingFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=UTF-8"); chain.doFilter(request,response);//放行 }配置servlet、filter
<servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>com.liu.servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/HelloServlet</url-pattern> </servlet-mapping> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>com.liu.filter.CharacterEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <!--访问HelloServlet下的路径会经过这个过滤器--> <url-pattern>/HelloServlet/*</url-pattern> </filter-mapping>实现接口
public class OnlineCountListener implements HttpSessionListener { @Override public void sessionCreated(HttpSessionEvent se) { ServletContext servletContext = se.getSession().getServletContext(); Integer onlineCount = (Integer) servletContext.getAttribute("OnlineCount"); if (onlineCount==null){ onlineCount = new Integer(1); }else{ int count = onlineCount.intValue(); onlineCount= new Integer(count++); } servletContext.setAttribute("OnlineCount",onlineCount); } @Override public void sessionDestroyed(HttpSessionEvent se) { ServletContext servletContext = se.getSession().getServletContext(); Integer onlineCount = (Integer) servletContext.getAttribute("OnlineCount"); if (onlineCount==null){ onlineCount = new Integer(0); }else{ int count = onlineCount.intValue(); onlineCount= new Integer(count--); } servletContext.setAttribute("OnlineCount",onlineCount); } }ttribute(“OnlineCount”); if (onlineCount==null){ onlineCount = new Integer(0); }else{ int count = onlineCount.intValue(); onlineCount= new Integer(count–); } servletContext.setAttribute(“OnlineCount”,onlineCount); } } ```
#### 2.配置监听器 ```java <listener> <listener-class>com.liu.listener.OnlineCountListener</listener-class> </listener> ```