Tomcat安装
是一个绿色文件,解压就安装好了
启动
javaWeb项目结构
修改class地址为编译后的默认地址
其中的classes和lib都还不是默认地址,需要进行地址修改
步骤:File --> project Structure --> Modules --> paths --> Use module compile output path --> 将Output path 和Test Output paths 的路径改为Web下的classes地址
javaWeb项目部署
- 方式一
直接把文件夹放到Tomcat的webapps中(效率不高,需要手动)
- 方式二
在conf的sever.xml里面进行配置
<Context docBase="项目A的路径" path="A" />
<Context docBase="项目B的路径" path="B" />
书写位置:
| Contest | 代表上下文配置 |
| docBase | 代表项目的物理路径 |
| path | 可以根据它查出相关项目的文件 |
- 方法三:ideal部署
Ideal中搭建Web项目
点击Web位置 --> 右上角Add Configuration... --> "+" --> Tomcat Server --> Local -->(已将TomCat内置到Ideal中,但并没有把项目部署到TomCat中去)
--> (部署)Deployment --> "+" --> Artifact --> apply --> ok
server.xml和web.xml
server.xml是对服务器做配置。web.xml是对项目做配置,我们主要以Ideal里的web.html为主,当Ideal里面没有添加任何配置才会使用TOmCat里的web.html
<welcome-file-list>
<welcome-file>Hello.html(项目名)</welcome-file>
</welcome-file-list>
默认跳到Hello界面,不用再加Hello.html后缀
Servlet基础
(在已经部署好Servlet之后操作)
开发一个Servlet
方法一:配置Servlet
- 先创建一个web项目
- 导入Servlet的jar包(已经部署好TOmCat后可以直接导入整个jar包)
- 新建一个实现类去实现Servlet接口并
重写service方法 - 在web.xml中注册Servlet,将Servlet交给TOmCat容器去管理
//配置Servlet
<servlet>
<!-- 为Servlet起的名字-->
<servlet-name>taofen</servlet-name>
<!-- Servlet的全限定名-->
<servlet-class>com.lifei.servlet.Helloservlet</servlet-class>
</servlet>
//Servlet映射配置
<servlet-mapping>
<!-- 通过Servlet的名字找到地址-->
<servlet-name>taofen</servlet-name>
<!-- 浏览器发起的请求-->
<url-pattern>/hi</url-pattern>
<url-pattern>/hi1</url-pattern>
</servlet-mapping>
- 匹配请求
- 可以在浏览器中直接访问
流程:后台启动服务器 --> 通过映射找到HelloServlet类里面,然后进行请求的处理
方法二:注解
把在web.xml里的配置全部换成所在类上方的注解,其余不变
//括号里面的等于浏览器发起的请求后缀
@WebServlet("/hi")
@WebServlet(urlPatterns = {"/hi","/h1"}
Servlet的生命周期
- servlet使用无参构造创建对象(生命周期开始,是懒加载,程序启动的时候并不会创建对象,开始访问才创建)
- Servlet调用初始化方法(inti())
- Servlet调用服务方法(service(),单例,从程序启动到程序结束都是同一个Servlet对象,反复执行的是service方法)
- destory关闭TOmCat(生命周期结束,正常关闭才执行)
Servlet的实例化和初始化是懒加载,如果同时启动,会造成反应迟钝的感觉,造成不好的体验,可以将实例化和初始化提前到服务器启动的时候,加一条迫切加载
方法一:在Servlet配置里面抒写代码
里面输入大于0的整数,数字越小,启动优先级越高
<load-on-startup>1</load-on-startup>
方法二:在注解
@WebServlet(urlPatterns = {"/hi","/h1"},loadOnStartup = 1)
ServletConfig
| 方法 | 描述 |
|---|---|
| config.getServletContext | 拿到的上下文对象 |
| config.getServletName | 拿到Servletd名字 |
| config.getIniParameter | 根据名称拿到初始化参数 |
初始化参数设置:在web里写初始化参数
<servlet>
<!-- 为Servlet起的名字-->
<servlet-name>taofen</servlet-name>
<!-- Servlet的全限定名,对应哪个class-->
<servlet-class>com.lifei.servlet.Helloservlet</servlet-class>
<!-- 初始化参数设置,用法类似于Key-->
<init-param>
<param-name>赵鑫</param-name>
<param-value>煮稀饭</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<!-- 通过Servlet的名字找到地址-->
<servlet-name>taofen</servlet-name>
<!-- 浏览器发起的请求-->
<url-pattern>/hi</url-pattern>
</servlet-mapping>
在init里根据名称拿值:
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println(servletConfig.getInitParameter("赵鑫"));
System.out.println("初始化");
}
get请求和post请求
区别
- get在请求时,请求的参数都会拼接在请求URL地址后面,安全性不高;post的请求参数是放在请求数据包中的实体内容进行传递
- 地址栏的长度限制为2KB,所以get请求传输的数据量小,post传输的数据大小没有限制,所以一般都用post传输
HttpServletRequest对象
| 方法 | 描述 |
|---|---|
| voidreq.setCharacterEncoding("UTF-8") | 能获取post请求的中文参数不乱码,必须放在第一行,在get执行之前执行这一句 |
| String getParameter(String name) | 根据参数名称获取对应参数的值 |
HttpServletResponse对象
是Servlet的响应对象,可以设置响应的文件格式和编码格式,还可以获取输出流;
- 常用方法
//防止乱码
resp.setCharacterEncoding("UTF-8");
//获取字符流
final PrintWriter printWriter = resp.getWriter();
//输出的界面
printWriter.println("<!DOCTYPE html>\n" +
"<html lang="en">\n" +
"<head>\n" +
" <meta charset="UTF-8">\n" +
" <title>登录</title>\n" +
"</head>\n" +
"<body>\n" +
"欢迎使用\n" +
"</body>\n" +
"</html>");