Java学习之路 Servlet
Servlet解压之后要配置环境变量:CATALINA_HOME-》安装目录 JAVA_HOME 也要配好
启动:%CATALINA_HOME%bin\startup.bat
关闭:%CATALINA_HOME%bin\shutdown
web.xml中配置:第一行和第三行是随意的一个名字,只要一样就行,和其他servlet进行区分,作为url到class的沟通桥梁,第二行是你实现的servlet类名称,一定要带上前置的包名,第四行是用户输入在浏览器上的地址(前置http://localhost:8080)
中文乱码:设置UTF8即可
http://localhost:8080/testweb/HelloForm?first_name=ZARA&last_name=ALI
java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
javax.servlet.jsp.jstl.core 同
原因:在WebContent.WEB-INF.lib下没有生成对应的依赖包
解决:Project-reference-Deployment Assembly-Add-Java Build Path Entries-全选或者选择缺少的部分
No converter found for return value of type: class :没导入相应的jackson jar包
初始化组件[[email protected]]失败:其实就是jar包冲突,经过排查发现jackson.mapper这个包有问题,除去即可
部署tomcat项目之后修改源文件不生效的原因:除去各种项目保存配置的问题之外,要命的就是项目存在一些莫名其妙的错误,你没找到----还是能运行,但是eclipse不帮你更新编译了,所以用的还是旧版本的源码编译出的class文件。
解决方法:
在项目的proprites选项中如下图配置,将Abort build when error 的勾去掉,然后重新启动Tomcat即可
查看日志:https://www.cnblogs.com/herd/p/4985754.html
500:写的服务器程序有问题,比如sql语句是错的
linux下部署tomcat和重新部署tomcat的方法:
将eclipse工程导出的wav包放到tomcat的webapps目录下,启动tomcat即可
重新部署:删除webapps下的同名目录,删除wav包,重新放入即可
这里设置了前缀和后缀。所以改控制器代码
即可
这里的url-pattern是错的,要在后面再加/*,不然只能匹配learn-test这一个请求
这里的learn_test和ServerAndDB都在ServerAndDB这个目录下
多一个servlet可能可以多200连接数
返回一个jsp的典型方法:ModelAndView,或者直接返回一个Sting类型,值是jsp文件路径
转发和重定向:
上图是转发,其页面变换只发生在服务器内部,外部看不出这个过程。
地址栏还是hello.test
效果是一样的。对jsp的直接访问相当于转发
这样转发也可以,更简练可读
重定向:
地址栏变了
这样也行
如果用一个返回字符串,最好跟model配合使用,model指定转发/重定向的新参数,返回的字符串指定新路径
url-pattern要用/+通配符表示子路径所有请求才行。
这里的result路径是从Tomcat项目根目录开始。Spring配置的时候有前后缀所以不用这么麻烦。
关于
mySpring.xml和struts.xml,部署到Tomcat上之后都会自动帮我们放到classes文件夹下
注意:这两个xml的位置应该和com.c72是平级的,同属src
这里的默认设置导致我们result指定的url是一个转发请求
一个controller要声明一个入口方法,如果内部有很多方法都要调用,我们不可能每次都去声明新的action。用通配符来简化配置。
对于表单参数的获取,基本是自动地:
1.自动装配和jsp中表单参数名一样的属性(params拦截器),这是直接对一个变量赋值,但是我们有时候没必要特地把一个类成员的变量拿出来装配好再赋回去,有点绕。
如<input type="text" name="name"/>
2.自动装配ognl描述的属性,这是直接访问一个成员类变量,再对变量的成员赋值,这样很直接但是jsp写得麻烦
如<input type="text" name="user.name"/>
这里会自动对控制器类内的user变量进行装配。
3.控制器实现ModelDriven<T>接口,重写getModel()方法,返回一个要装配的类成员,放到栈顶
三种action写法:
实现action接口、继承actionsupport(推荐)、POJO类
自定义拦截器:
有点类似AOP的反射过程
不能直接在地址栏输入jsp名称访问WEB-INF/jsp文件夹下的jsp 解决方法
如果不通过servlet作为中间物转发到jsp,只能放到WEB-INF外面,这时候又要从根开始寻找action