1.使用注解来代替web.xml文件的配置
其原理都是把注解和wen.xm文件加载到内存中,但是有先后顺序,注解先加载,web.xml文件后加载,这样先加载的注解就被wen.xml文件给覆盖了。举一个简单的例子:
新建一个Servlet文件ServletTest.java,使用注解
@WebServlet(urlPatterns={"/test"},name=("ServletTest"),initParams={@WebInitParam(name="zz",value="bbb")})
在web.xml同样加上如下代码:
<servlet>
<servlet-name>ServletTest</servlet-name>
<servlet-class>servlet.ServletTest</servlet-class>
<init-param>
<param-name>zz</param-name>
<param-value>abcd</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ServletTest</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
重写HttpServlet的init方法:
@Override
publicvoid init(ServletConfig config) throws ServletException { System.out.println("参数:"+config.getInitParameter("zz"));
}
启动服务器,访问这个Servlet文件。结果可以看到控制台输出了abcd,证明结论是正确的。
2.
Sevlet3.0的Listener加载的顺序是根据,类名字符串的自然顺序进行排列的,而在3.0之前因为是写在webxml文件中,所以加载顺序是根据Listener在web.xml中排列顺序进行先后加载的
而Filter呢?Filter则是根据fileName中的值得字符串排列进行先后加载的
3.不用第三方的jar包直接就可以进行上传文件
Part类支持文件上传的所有操作
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//获取普通请求参数
String userName = request.getParameter("name");
System.out.println("userName-"+userName);
//获取文件上传域
Part part = request.getPart("file");
//获取文件上传类型
String contentType = part.getContentType();
out.write("文件的上传类型"+contentType+"<br/>");
//String s = "."+contentType.substring(contentType.lastIndexOf("/")+1);
//获取文件上传的大小
out.write("文件上传的大小"+part.getSize()+"<br/>");
//获取该文件上传域中的Header Name
Collection<String> headernames = part.getHeaderNames();
String fileName = "";
//遍历文件上传域的Header Name ,Value
for(String headername :headernames){
out.write(headername+"-->"+part.getHeader(headername));
if(headername.equals("content-disposition")){
String content = part.getHeader("content-disposition");
int idx = content.lastIndexOf("filename");
fileName = content.substring(idx+10,content.length()-1);
}
}
System.out.println("file-"+fileName);
//将上传的文件写入服务器
String path = getServletContext().getRealPath("../uploadFiles");
System.out.println(path);
System.out.println("---小小分隔线---");
File file = new File(path);
if(!file.exists()){
file.mkdirs();
}
part.write(getServletContext().getRealPath("../uploadFiles")+"/"+fileName);