servlet是j2ee的基础,struts2是基于它的框架,什么是框架:就是为了方便开发,提供了一些高层的功能,比如说输入验证啥的,隐藏了底层很复杂的实现
以前没有框架的时候用的是servlet,然后开发比较复杂的系统,并且有可重用的功能时,就有了框架,现在开发一般都用框架,但学习servlet会更好理解框架的
j2ee的框架有很多的,不止struts2
Servlet是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
Struts2是控制层框架,Struts2这个东西很多人认为是struts的升级版,但其实他合Struts没多大关系,仅仅只是使用方法类似,内部架构原理完全不同。但两者都是基于Serlvet的,但struts对Servlet API(注意是API)依赖程度很高不利于调试,struts2并不依赖Servlet API,更多的是其本身的API,有利于调试。
为什么用这些,很大一部分情况是不会写这类的抽象型面向协议的应用框架,另一些能写的大牛是因为这项技术在这些框架里已经体现的很成熟,并且通过一代一代版本的积累对已知漏洞的修补,已知攻击方式的防御都已经达到一定高度,并不是随手写一个能够代替的。最后万事没有绝对,struts2在爆出严重的提权漏洞后就慢慢的被spring mvc占领了市场。
至于什么时候用,这个不好说,合适的需求,合适的环境用合适的框架。
servlet的缺点:
1、写一个servlet需要在web.xml文件中配置8行,如果一个系统中servlet很多,则会导致
web.xml文件中的内容很多
2、在项目中很多人编辑一个web.xml文件会出现版本冲突的问题
3、在一个servlet中方法的入口只有一个,如果在servlet中写很多方法,这些方法应该传递参数,根据每次
请求的参数不一致来判断执行哪个方法
4、servlet中的方法都有两个参数request,response,这两个参数具有严重的容器依赖性,所以在
servlet中写的代码是不能单独测试的
5、现在写一个servlet,为注册servlet
ResigterServlet{
public void doPost(){
1、权限的操作
2、获取表单中的数据
3、文件的上传的功能
4、表单上的元素进行验证
5、保存一个用户
}
}
6、如果在表单中的元素很多,在servlet中要想获取表单中的数据,那么在servlet的方法中必要有大量的
request.getParameter代码
7、在一个servlet的属性中声明一个数据,会存在线程安全的问题
Servlet的优点:
因为是最低层的mvc,所以效率比较高
struts2中action是否安全
struts2的action的说明:
1、action是多实例的,每请求一次将会创建一个对象
2、是不存在线程安全的问题的:不存在