1.创建JavaWeb项目
File --> New --> Project...
![](http://upload-images.jianshu.io/upload_images/1458573-b696dd006044f8e8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
设置工程名字:
![](http://upload-images.jianshu.io/upload_images/1458573-ea756b35b34e8f91.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
创建完成后工程结构如下:
![](http://upload-images.jianshu.io/upload_images/1458573-cdd78da6b1dc5021.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
2.设置Web项目
2.1 在WEB-INF 目录下点击右键,New --> Directory,创建 classes 和 lib 两个目录
classes目录用于存放编译后的class文件,lib用于存放依赖的jar包
![](http://upload-images.jianshu.io/upload_images/1458573-a59a6b4f80564d98.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
2.2 File --> Project Structure...,进入 Project Structure窗口,点击 Modules --> 选中项目“JavaWeb” --> 切换到 Paths 选项卡 --> 勾选 “Use module compile output path”,将 “Output path” 和 “Test output path” 都改为之前创建的classes目录
即将后面编译的class文件默认生成到classes目录下
![](http://upload-images.jianshu.io/upload_images/1458573-7dc3b07cbf7b9270.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
2.3 点击 Modules --> 选中项目“JavaWeb” --> 切换到 Dependencies 选项卡 --> 点击右边的“+”,选择 “JARs or directories...”,选择创建的lib目录
![](http://upload-images.jianshu.io/upload_images/1458573-7a9bace915cc88a9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
选择Jar Directory
![](http://upload-images.jianshu.io/upload_images/1458573-78dcc02b0f17781f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
2.4 配置打包方式Artifacts:点击 Artifacts选项卡,IDEA会为该项目自动创建一个名为“JavaWeb:war exploded”的打包方式,表示 打包成war包,并且是文件展开性的,输出路径为当前项目下的 out 文件夹,保持默认即可。另外勾选下“Build on make”,表示编译的时候就打包部署,勾选“Show content of elements”,表示显示详细的内容列表。
![](http://upload-images.jianshu.io/upload_images/1458573-034c64474bc1fd96.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
3.配置Tomcat
3.1 Run -> Edit Configurations,进入“Run Configurations”窗口,点击"+"-> Tomcat Server -> Local,创建一个新的Tomcat容器
![](http://upload-images.jianshu.io/upload_images/1458573-d0b2ae826ca40f2a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
3.2 在"Name"处输入新的服务名,点击“Application server”后面的“Configure...”,弹出Tomcat Server窗口,选择本地安装的Tomcat目录 -> OK
![](http://upload-images.jianshu.io/upload_images/1458573-34b23215444345c2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
3.3 在“Run Configurations”窗口的“Server”选项板中,去掉勾选“After launch”,设置“HTTP port”和“JMX port”,点击 Apply -> OK,至此Tomcat配置完成。
![](http://upload-images.jianshu.io/upload_images/1458573-8de6340f0188ad03.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
4.JavaWeb测试
4.1 Run -> Edit Configurations,进入“Run Configurations”窗口,选择之前配置好的Tomcat,点击“Deployment”选项卡,点击“+” -> “Artifact”-> 选择创建的web项目的Artifact...修改“Application context”-> Apply -> OK
![](http://upload-images.jianshu.io/upload_images/1458573-cc03d101924f6c93.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
说明:此处的Application context是指定本工程的根目录
4.2 在index.jsp文件中的body之间添加要显示的内容,然后点击“运行”的绿色三角
打开浏览器,输入:localhost:8080/JavaWeb
![](http://upload-images.jianshu.io/upload_images/1458573-5e1530bd26f1d33d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
至此,intellij idea创建并设置javaweb工程全部完成,下面是在其中编写并运行Servlet。
5.Servlet简单实现
5.1. 编写servlet源文件
在src目录下新建HelloServlet.java,并编写一下代码并进行编译:
![](http://upload-images.jianshu.io/upload_images/1458573-081f50c075784e49.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
编译后会发现在classes目录下生成了HelloServlet.class文件
![](http://upload-images.jianshu.io/upload_images/1458573-687820b7bd627e72.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
5.2. 部署servlet
方法一:
在WEB-INF目录下web.xml文件的标签中添加如下内容:
![](http://upload-images.jianshu.io/upload_images/1458573-0696371c5fc0c2be.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
方法二:
在HelloServlet文件的类前面加上:@WebServlet("/hello")
![](http://upload-images.jianshu.io/upload_images/1458573-322d82c8c258062a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
5.3. 运行servlet
点击运行按钮
![](http://upload-images.jianshu.io/upload_images/1458573-6f465c5c09336977.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
控制台出现successfully则tomcat服务启动成功!打开浏览器输入:localhost:8080/JavaWeb/HelloWorld即可查看servlet运行状态了.
![](http://upload-images.jianshu.io/upload_images/1458573-c676024623227ce1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
6.接受Get和Post请求的Servlet
创建一个Client类,定义两个基本方法。
![](http://upload-images.jianshu.io/upload_images/1458573-f106ba033dfb5a13.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
下面,我们来实现这两个方法,先看看GET,比较简单:
![](http://upload-images.jianshu.io/upload_images/1458573-d98861adcf135e54.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/1458573-6fc348461ff0dd3a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
注释都很详细了,只是要说一点,GET方式提交的参数是绑定在URL中的,所以这部分要单独处理,进行转码,参数是Map类型,那么我们遍历这个Map获取参数,并拼装成?,&的格式就行了。下面来看POST,这个复杂一点:
![](http://upload-images.jianshu.io/upload_images/1458573-13a68173a438f16c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
这中间就是设置POST方式时要开启两个选项,不能忘了。而且POST方式提交参数,参数是在请求体中发送的,就是和GET的一个很重要的区别。模拟好了两个方法,下面我们来写Servlet,这就很简单了,我们使用RequestServlet:
![](http://upload-images.jianshu.io/upload_images/1458573-03639fedb0045b48.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
好了,我们来测试GET请求,写主函数:
![](http://upload-images.jianshu.io/upload_images/1458573-17a8e269f34bcbd2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
在控制台,我们就得到了如下的输出:
![](http://upload-images.jianshu.io/upload_images/1458573-d60e67675b4fb72f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
因为我们打印了还原出的参数形式,这里没有用中文,所以看不出编码效果,中文效果大家可以自行测试。 POST方式就是修改主函数中调用的方法,这里不再测试了。 至此我们已经可以脱离浏览器进行GET/POST请求了,基本上网络传输的方式我们都可以来看看服务器返回的原始数据了,设置好URL和所需参数,直接运行就行了。 Servlet的原理很简单,这是比较直观的实现,要比直接上来就BS清楚很多。
常见问题:
1.Tomcat权限问题?
问题描述:
下午9:11:27 All files are up-to-date
下午9:11:27 All files are up-to-date
下午9:11:27 Error running Tomcat 8.0.18: Cannot run program "/Users/horse_leo/Documents/apache-tomcat-8.0.18/bin/catalina.sh" (in directory "/Users/horse_leo/Documents/apache-tomcat-8.0.18/bin"): error=13, Permission denied
提示的主要问题是权限不足
解决方案:
打开终端,进入tomcatin目录,然后执行chmod 777 *.sh
2.HttpServlet找不到?
解决方案:
到/tomcat/lib下导入servlet-api.jar
3.Tomcat中文乱码?
问题描述:
用GET方式测试时,参数是英文没有问题,可是出现中文时,也转码了,但没有配置的Tomcat依然读取的是乱码
解决方案
配置Tomcat的server.xml:
![](http://upload-images.jianshu.io/upload_images/1458573-a79dc2c1030e2cb5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
加一个URIEncodeing选项就可以了,这样走GET请求编码就正常了,这也是Ajax走GET提交时不设置依然是中文乱码的一个原因,这一般情况想不到。