一、部署项目打成war包
二、虚拟目录
三、Servlet常见配置
1、常用配置
2、映射通配符
四、Servlet三种创建方式
五、Servlet线程安全问题
六、Servlet获取配置信息
七、ServletContext
1、域对象
存储局部
2、获取全局配置信息
存储全局
3、获取资源路径
(1)配置文件在“WEB-INF”目录下
(2)配置文件在“src”目录下
(3)配置文件在包名目录下
(4)请求转发
八、HttpServletResponse响应
(1)文字内容响应编码格式设置
(2)文件下载响应格式设置
九、HttpServletRequest请求
1、参数解释
一、部署项目打成war包
windows系统
1、 进入到webRoot目录下,或者是webContent目录下
2、打war包命令:jar -cvf myApp.war . mac os系统:jar -cvf xxx.war *
3、把war直接复制到 tomcat的webapps下,自动解压
4、tomcat的webapps下有几个目录就代表有几个应用
mac os系统:
部署项目打成war包
1.自动打包:
File —> Project Structure —> Artifacts —> Add —> Web Application: Archive —> For ..war exploded
Build —> Build Artifacts… —> war —> Build
2.命令行打包:
进入要打包的项目目录:
cd /Users/yuukoiry/IdeaProjects/...
cd web/
打包命令:
jar -cvf xxx.war *
部署运行:
1.将war包复制到tomcat安装目录:/usr/local/apache-tomcat-9.0.0.M4/webapps/
2.终端操作:
cd /usr/local/apache-tomcat-9.0.0.M4/bin/
./startup.sh
3.打开浏览器:
http://localhost:8080/xxx/xx.jsp
二、虚拟目录
修改:
1、创建文件
2、粘贴到tomcat目录下
三、Servlet常见配置
1、常用配置
2、映射通配符
四、Servlet三种创建方式
1、创建类继承Servlet
2、适配器模式
创建类继承GenericServlet
3、模版方法设计模式
创建类继承HttpServlet
五、Servlet线程安全问题
不要写全局变量,尽量写局部变量
六、Servlet获取配置信息
七、ServletContext
代表整个应用,一个应用只有一个ServletContext;
获取:this.getServletContext()
1、域对象
2、获取全局配置信息
获取:
3、获取资源路径
(1)配置文件在“WEB-INF”目录下
String path= this.getServletConfig().getServletContext().getRealPath("/WEB-INF/a.properties"); Properties pro=new Properties(); pro.load(new FileInputStream(path)); String value= pro.getProperty("key"); System.out.println("配置文件中key相对的值="+value);
(2)配置文件在“src”目录下
String path= this.getServletConfig().getServletContext().getRealPath("/WEB-INF/classes/a.properties"); Properties pro=new Properties(); pro.load(new FileInputStream(path)); String value= pro.getProperty("key"); System.out.println("配置文件中key相对的值="+value);
(3)配置文件在包名目录下
String path= this.getServletConfig().getServletContext().getRealPath("/WEB-INF/classes/com/demo/servlet/a.properties"); Properties pro=new Properties(); pro.load(new FileInputStream(path)); String value= pro.getProperty("key"); System.out.println("配置文件中key相对的值="+value);
(4)请求转发
this.getServletContext().getRequestDispatcher("/demo5").forward(request, response);//dmeo5是url-pattern的路径
八、HttpServletResponse响应
(1)文字内容响应编码格式设置
//服务器默认的编码为:ISO-8859-1,它不支持中文,tomcat规定的 //设置服务器相应编码 response.setCharacterEncoding("UTF-8"); //告诉客户端使用什么编码方式 // response.setContentType("text/html;charset=utf-8"); response.setHeader("content-type", "text/html;charset=utf-8"); PrintWriter writer = response.getWriter(); //客户端响应内容 writer.write("你好,相应内容");
(2)文件下载响应格式设置
/** * 文件下载 */ //通过路径得到一个输入流 String realPath = this.config.getServletContext().getRealPath("/WEB-INF/classes/北京市道路停车电子收费集中缴费系统.jpg"); FileInputStream fis=new FileInputStream(realPath); //创建字节输出流 ServletOutputStream sos=response.getOutputStream(); //得到要下载的文件名; String fileName = realPath.substring(realPath.lastIndexOf("/")+1); //设置图片名编码格式 fileName=java.net.URLEncoder.encode(fileName,"UTF-8"); //告诉客户端要下载文件,Content-Disposition控制是显示还是下载 response.setHeader("Content-Disposition", "attachment; filename="" + fileName ); response.setContentType("application/octet-stream;charset=UTF-8"); //response.setContentType("image/jpeg"); //执行输出操作 int len=1; byte[] b=new byte[1024]; while ((len=fis.read(b))!=-1) { sos.write(b,0,len); } sos.close(); fis.close();
九、HttpServletRequest请求
接口名称 http://localhost:8080/wxx_bdb/servletHome?name=10&age=20
1、参数解释
//获取请求方式 System.out.println("获取请求方式:"+request.getMethod()); //返回请求中的参数部分 System.out.println("返回请求中的参数部分:"+request.getQueryString()); //返回客户端发出请求时的完整URL System.out.println("返回客户端发出请求时的完整URL:"+request.getRequestURL()); //返回请求中资源名部分 System.out.println("返回请求中资源名部分:"+request.getRequestURI()); //当前应用的虚拟目录 System.out.println("当前应用的虚拟目录:"+request.getContextPath());
//获取访问者的ip
System.out.println("域名:"+request.getRemoteHost());
打印日志
获取请求方式:GET 返回请求中的参数部分:name=10&age=20 返回客户端发出请求时的完整URL:http://localhost:8080/wxx_bdb/servletHome 返回请求中资源名部分:/wxx_bdb/servletHome 当前应用的虚拟目录:/wxx_bdb
获取请求头信息:
//获取请求头信息 Enumeration headerNames = request.getHeaderNames(); while (headerNames.hasMoreElements()) { String name = (String) headerNames.nextElement(); System.out.println("求头信息------"+name+":"+request.getHeader(name)); }
请求正文信息:
1.获取表单数据的相关方法:
// 告诉服务器要使用什么编码,注:浏览器使用的是什么编码传过来的就是什么编码 request.setCharacterEncoding("UTF-8"); //得到对应名称的值 String pwd = request.getParameter("pwd"); //复选框提供的方法 String[] values = request.getParameterValues("body"); //得到表单获取的所有name Enumeration parameterNames = request.getParameterNames(); //得到表单提交的所有值的方法,非常实用 Map<String, String[]> parameterMap = request.getParameterMap(); //以字节流的方式得到所有表单数据 ServletInputStream inputStream = request.getInputStream();