文档章节

Servlet初步

zhchl2010
 zhchl2010
发布于 2015/09/10 18:23
字数 763
阅读 84
收藏 4
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //request.getSession().setAttribute("hello","Hello Servlet!");
        //response.sendRedirect(request.getContextPath()+"/01/02jstl.jsp");
        /*客户端跳转需要在服务端Seesion存值,不建议*/
        
        request.setAttribute("hello","Hello Servlet!");
        //web中WEB-INF下的路径在客户端无法访问,在服务端可以访问,安全性!
        RequestDispatcher rd=request.getRequestDispatcher("/WEB-INF/01/02jstl.jsp");
        rd.forward(request,response);
        /*服务端跳转,Dispatcher可以自动添加上下文路径,forward*/
        
        
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

}
/////////////////////////多业务支持 
@WebServlet("/user02.do")
public class UserServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    public UserServlet() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*
         * 动态获取访问的是哪一个操作
         * 1.if else会随着方法的增多而增多,不易管理(反射)
         * */
        request.setCharacterEncoding("UTF-8");//post传送需在服务端设置编码格式
        String method=request.getParameter("method");
        if("list".equals(method)){
            list(request,response);
        }else if("register".equals(method)){
            register(request,response);
        }else if("add".equals(method)){
            add(request,response);
        }
    }
    
    protected void list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<User> users=(List<User>) request.getSession()
                .getServletContext().getAttribute("storeUsers");
        request.setAttribute("users", users);
        request.getRequestDispatcher("/WEB-INF/user02/list.jsp").forward(request, response);
    }

    protected void register(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getRequestDispatcher("/WEB-INF/user02/register.jsp").forward(request, response);
    }
    
    protected void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        String username=request.getParameter("username");
        String nickname=request.getParameter("nickname");
        int age=Integer.parseInt(request.getParameter("age"));
        
        /*
         * 此处将用户存储到application中
         * */
        List<User> users=(List<User>) request.getSession()
                .getServletContext().getAttribute("storeUsers");
        if(users==null){
            users=new ArrayList<User>();
        }
        User u=new User(username,nickname,age);
        System.out.println(u);
        users.add(u);
        request.getSession()
            .getServletContext().setAttribute("storeUsers",users);
        response.sendRedirect("user02.do?method=list");
    }

}
//////////////////////////////////////////////////MVC 初步,基于命令式的struts1模型
public class BaseServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        try {
            String method=request.getParameter("method");
            Method m=this.getClass().getMethod(method,HttpServletRequest.class,HttpServletResponse.class);
            String rel=(String) m.invoke(this,request,response);
            String redirStr="redirect:";
            if(rel.startsWith(redirStr)){//判断是服务端跳转还是客户端跳转
                response.sendRedirect(rel.substring(redirStr.length()));
            }else{
                request.getRequestDispatcher("/WEB-INF/"+rel).forward(request, response);
            }
            } catch (SecurityException e) {
            e.printStackTrace();
        }catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        
    }
}

@WebServlet("/user03.do")
public class UserServlet extends BaseServlet {
    private static final long serialVersionUID = 1L;
       
    public UserServlet() {
        super();
    }

    /*这是第3版,基于反射,父类BaseServlet继承HttpServlet实现service方法进行方法调用
     * 所有本类作为子类不需要实现doPost()和doGet(),只需要自己的逻辑方法
     * 不足之处:每个执行方法最后跳转代码都相同,应该想办法解决:参考list()和BaseServlet.class
     访问地址:user03.do?method=list
     * */
    @SuppressWarnings("unchecked")
    public String list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<User> users=(List<User>) request.getSession()
                .getServletContext().getAttribute("storeUsers");
        request.setAttribute("users", users);
        //request.getRequestDispatcher("/WEB-INF/user03/list.jsp").forward(request, response);
        return "user03/list.jsp";
    }
    //访问地址:user03.do?method=register
    public String register(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //request.getRequestDispatcher("/WEB-INF/user03/register.jsp").forward(request, response);
        return "user03/register.jsp";
    }
    
    //访问地址:user03.do?method=delete
    public String delete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("子类增加方法测试:delete");
        return "user03/register.jsp";
    }
    
    public String update(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("子类增加方法测试:update");
        return "user03/update.jsp";
    }
    
    @SuppressWarnings("unchecked")
    public String add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        String username=request.getParameter("username");
        String nickname=request.getParameter("nickname");
        int age=Integer.parseInt(request.getParameter("age"));
        
        /*
         * 此处将用户存储到application中
         * */
        List<User> users=(List<User>) request.getSession()
                .getServletContext().getAttribute("storeUsers");
        if(users==null){
            users=new ArrayList<User>();
        }
        User u=new User(username,nickname,age);
        System.out.println(u);
        users.add(u);
        request.getSession()
            .getServletContext().setAttribute("storeUsers",users);
        //response.sendRedirect("user03.do?method=list");
        return "redirect:user03.do?method=list";
    }

}




© 著作权归作者所有

zhchl2010
粉丝 3
博文 80
码字总数 77710
作品 0
成都
程序员
私信 提问
Tomcat 7 下对 JSP 进行预编译

问题: 有一个web应用,包含很多jsp,直接调用某些后台库的方法,但这些库通过 Java 的安全管理器运行在一个沙盒环境中,必须使用某个密钥签名后才能进行调用。 解决方案: 因此初步考虑使用以...

红薯
2011/09/20
2.8K
4
WildFly Swarm Alpha2 发布

WildFly Swarm Alpha2 发布,此版本包括一些改进和修复。此版本解决了所有 Windows 的 issues。 相比 Alpha1 修改了一些插件的使用方式,用户需要更新一些应用: 从 wildfly-swarm-plugin 移...

叶秀兰
2015/06/09
874
1
tomcat 5.5 部署项目报错 关于Filter的错误。。

我在tomcat7.0部署没不报错,但是再tomcat5.5就会报错。。 listener.ContextListener UrlRewriteFilter org.tuckey.web.filters.urlrewrite.UrlRewriteFilter logLevel WARN UrlRewriteFilte......

庄泽锐
2014/03/06
1K
5
oscache缓存的页面为乱码

项目用的oscache,用的web.xml配置 CharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8   forceEncoding   true    CharacterEncodingF......

kkli
2014/03/13
378
1
Tomcat 容器与servlet的交互原理

Tomcat 是Web应用服务器,是一个Servlet/JSP容器. Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户.而Servlet是一种运行在支持Java语言的服务器...

watermelon11
02/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

rsync工具常用选项以及同步的两种方式

rsync -av /etc/passwd /tmp/1.txt #rsync的本机传输写法 rsync -av /tmp/1.txt 192.168.188.128:/tmp/2.txt #rsync的远程传输rsync格式rsync [OPTION] … SRC ......

林怡丰
今天
3
0
GatewayWorker 报错:stream_socket_server(): unable to connect to tcp://0.0.0.0:1238

GatewayWorker 报错:stream_socket_server(): unable to connect to tcp://0.0.0.0:1238 (Address already in use) 官方文档虽然有相同的问题,但是对我的问题没起作用…… 后面发现自己手贱...

wenzhizhong
昨天
3
0
REST接口

文章来源 https://zhuanlan.zhihu.com/p/28674721?group_id=886181549958119424 http://www.ruanyifeng.com/blog/2014/05/restful_api.html REST 对请求的约定 REST 用来规范应用如何在 HTTP......

Airship
昨天
5
0
Spring Cloud Config 统一配置中心

Spring Cloud Config 统一配置中心 一、统一配置中心 统一管理配置 通常,我们会使用配置文件来管理应用的配置。如一个 Spring Boot 的应用,可以将配置信息放在 application.yml 文件中,如...

非摩尔根
昨天
6
0
android ------ AAPT2 error: check logs for details解决方法

AAPT 是全称是 Android Asset Packaging Tool,它是构建 App,甚至是构建 Android 系统都必不可少的一个工具。它的作用是将所有资源文件压缩打包到Android APK 当中。我们在 Android SDK 目录...

切切歆语
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部