部署项目打成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=newProperties();
pro.load(newFileInputStream(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=newProperties();
pro.load(newFileInputStream(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=newProperties();
pro.load(newFileInputStream(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=newFileInputStream(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请求
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 parameterMap =request.getParameterMap();//以字节流的方式得到所有表单数据
ServletInputStream inputStream =request.getInputStream();